📦 Zařízení · Tlačítka a ovladače

Ovládání bez aplikací

User input bez nutnosti otvírat telefon. Aqara Cube T1 Pro jako primární gestural ovladač — šestistranná kostka, kde každá strana = jiný režim, otáčení = volume, ťuk = trigger. Plus Sleep Manual button a fyzická tlačítka jako fallback.

6Stran kostky
3Gestura (rotate, tap, flip)
2Roky baterie
3Side actions live

Co to dělá

Fyzický ovladač jako primární UX

Smart home s mobilní aplikací jako jediným UX je nepoužitelný — když mám ruce v testě, nebo právě vstávám, nikdo netáhá telefon. Proto fyzický ovladač jako primární vstupní vrstva: Aqara Cube T1 Pro stojí na poličce, jednou rukou, různá gesta = různé akce.

Cube má tři typy gest: flip (otočit na novou stranu — cube_face capability hodnota 1–6), rotate (točit kostkou ve stejné straně — cube_rotate emitting +/- delta), tap (klepnout — cube_tap event). Každé gesto má jiný handler ve flow / scriptu.

Plus jsou tu fyzická tlačítka jako fallback (Sleep Manual, Home Reset). Single press, double press, hold = různé eventy. Použito výjimečně, ale když je potřeba, funguje bez Wi-Fi i bez kostky.

Denní provoz

Jak ovladače fungují přes den

Většinu dne se nedotknu — kontext rozhodne za mě. Ovladač je pro výjimky.

  1. Ráno

    Cube ve „TV mode" straně

    Po probuzení natočím kostku na stranu 3 = TV channel control. Rotate = channel up/down (key_channel_up / key_channel_down). Single tap = TV mute toggle. Bug v1.10 měl špatné capability ID (channel_up bez prefixu), fix v1.11.

  2. Den

    Cube na straně 2 = audio volume

    Strana 2 = volume control aktivní speakeru. Rotate vlevo/vpravo posílá cube_rotate event s delta ±. Skript přepočte na nové volume, setCap na speaker zóny dle aktivního TOD.

  3. Večer

    Tap při comfort suggest

    AI coordinator vyhodnotí evening_idle → TTS suggest. User answer = tap na cube = accept (sh_user_intent_request='accept'). Bez tap je suggest ignorovaný (po bathroom misroute fix).

  4. Spánek

    Sleep manual button

    Hard fyzické tlačítko vedle postele. Single press → sh_spim='yes' + sleep_brain cleanup. Double press → emergency lights ON (kdyby něco). Hold 5 s → reset všech sleep state vars.

Scény

Pět konkrétních interakcí

Každá strana kostky = jiná role. Některé live, jiné v plánu.

Strana 1 — IDLE

Default. Žádné gesto neaktivní. Stojí na poličce, kdykoli můžu otočit na něco jiného. cube_face=1 + tap = nic.

Strana 2 — VOLUME

Audio volume control aktivního speakeru. Rotate ± delta → setCap volume_set. Tap = mute toggle. Cílový speaker dle TOD: ráno kuchyně, večer ložnice.

Strana 3 — TV CHANNELS

TV remote shortcut. Rotate = channel up/down (key_channel_up), tap = mute, hold = power toggle. Bug fix v1.11 (3 týdny starý) — channel capability prefix.

Strana 4 — LIGHT SCENE

Cyklicky přepíná light scenes — bright / dim / mood / off. Tap = next scene. Rotate = brightness fine-tune aktivní scene. Plánováno, zatím v testu.

Tap během suggest

AI coordinator → comfort_suggest → TTS přečte návrh. User tap během 30 s okna = accept → sh_user_intent='accept' → scéna provede. Bez tap ignorováno.

Hardware v provozu

Co se dotýkám

Jeden primární gestural + 1–2 fyzická fallback tlačítka.

Aqara Cube T1 Pro

Gestural · Zigbee · battery (2 roky)

Šestistranná kostka. Capability cube_face (1–6), cube_rotate (delta), cube_tap (event). Magnetické držení strany, akcelerometr pro rotaci. Cena ~700 Kč. Akcent ovladač.

Sleep Manual button

Aqara · Zigbee · battery

Fyzické tlačítko vedle postele. Single / double / hold events. Trigger pro sh_spim toggle, emergency lights, reset state. Backup pro případ že kostka není v dosahu.

Mobile Homey app

iOS / Android · over Wi-Fi/internet

Sekundární UX pro dálku, debugging, schedule editor. Není primární — most denních akcí jde přes cube nebo geofence. Mobilní app zachytí push alerty.

Aqara H1 wall switch Plánováno

Wall · Zigbee · 2-tlačítkové

Místo klasického vypínače u dveří — 2 tlačítka, single/double/hold per tlačítko = 6 různých eventů. Plán pro „odchozí scéna" (single = vše off, double = away preset, hold = panic mode).

Voice command Plánováno

Local LLM · Whisper STT · HA Voice

Hlasové ovládání lokálně — Whisper STT + lokální LLM. „Snižte topení v ložnici" → parse intent → set var. Závisí na LLM host (RPi5, NAS). Iterace po Cube + tlačítka.

Pro tech-savvy

Co se děje pod kapotou

Cube event model, side dispatch, capability remapping.

Cube event model (face vs. rotate vs. tap)

Aqara Cube emituje 3 různé eventy přes Homey capabilities:

  • cube_face: hodnota 1–6, mění se na flip akci. Je to state, ne event — drží aktuální stranu, dokud user neflipne.
  • cube_rotate: event s delta v stupních. Pozitivní = clockwise, negativní = counter-clockwise. Sample přes ~10° inkrement, takže točení = sequence eventů.
  • cube_tap: jednorázový event. Single tap. Double tap není native, simulujeme přes 2× tap v 500 ms okně.

Side dispatch je v sh_cube_dispatcher_v1 — switch (cube_face) on event type, route do specific handlers (volume, channel, light scene).

TV channel capability bug (3 týdny diagnostika)

Bug 2026-04-20 resolved: cube strana 3 = TV channels, ale rotate nedělalo nic. Hypotéz několik:

  • Cube nemá rotate event v té straně? (false — eventy v EventLog byly)
  • TV neresponduje? (false — manuální setCap fungoval)
  • Capability remapping? (true — root cause)

Cube_dispatcher měl setCapabilityValue('channel_up'), ale Android TV driver capability je key_channel_up (s prefixem). Žádný error, jen silent ignore. Fix v1.11: channel_upkey_channel_up.

Memory: todo_cube_tv_channels.md — solved record.

User intent capture window

Comfort suggest pipeline:

  1. AI coordinator: situation = comfort_suggest, level 4
  2. TTS přečte návrh: „Chceš spustit relax scénu?"
  3. 30 s capture window pro user_intent_request
  4. Pokud cube_tap ARRIVES během okna → sh_user_intent_request='accept'
  5. Pokud nic → window expiruje, sh_user_intent_request='timeout_idle'
  6. Down stream akce (scéna) běží jen při 'accept'

Bez tohoto bypass okna by AI coordinator sám aktivoval scény → bug 25.4. (bathroom radio misroute). Fix v1.8 přidal eksplicitní accept guard.

Battery management (cube + button)

Aqara Cube má dvě CR2032 batterky, životnost ~24 měsíců při typické denní aktivitě (5–10 gest/den). Sleep manual button má AAA, ~12 měsíců.

Brain Guardian sleduje measure_battery:

  • < 30 % — log warning
  • < 15 % — push alert (až bude implementováno)
  • < 5 % — kritický, výměna nutná

Po výměně baterky nové UUID (silent fail flow trigger). Nutný re-pair check — diagnose GET /api/manager/devices/device/<old> → 404.

Fallback chain (cube → button → mobile → manual override)

Fault tolerance design — když primární ovladač nefunguje, jdou se nižší vrstvy:

  1. Cube — primární (gestural, žádný app)
  2. Sleep manual button — pro sleep state (vedle postele)
  3. Mobile Homey app — full UI, debugging, schedule editor
  4. Dashboard kiosek — RPi WaveShare 1024×600, touch
  5. REST API přímo — last resort (PUT /capability/setCapabilityValue)
  6. Fyzické vypínače u žárovek — když nic z výše nefunguje