🏠 Prožívání · Atmosféra a scény

Dům který cítí část dne

Tři stavy, čtyři fáze dne, jeden centrální sleep guard. Ráno tě probudí pomalu, přes den nechá pracovat, večer nabídne klid, v noci ztichne. Bez explicitních „scén" v Homey UI — všechno běží přes time-of-day a state-aware logiku ve skriptech.

4Fáze dne
3Brain skripty
1Sleep gate
5Subsystém pod ním

Co to dělá

Nálada se nedá nastavit, jen poznat

Místo „scén" v Homey UI — kde uživatel klikne na „Filmový režim" a něco se stane — je tady state-aware vrstva. Systém sám pozná, jestli je ráno před budíkem, jestli zrovna spím, jestli jsem v relax módu po práci, jestli je pozdě večer. Z toho se odvodí všechno ostatní: světla, topení, audio, notifikace.

Centrální proměnná je sh_spim ('yes' / 'no'). Když je 'yes', všech 5 subsystémů (světla, audio, topení, robot, alerty) automaticky tlumí nebo úplně zhasíná. Set/unset body jsou tři: Sleep Manual button (Aqara Cube), Vstal Kuchyně motion (probuzení), phone geofence.

Nad sleep state běží tři brain skripty: morning_brain (ranní rituál), sleep_brain (večerní shutdown), AI coordinator (situation classifier — ráno briefing, večer comfort suggest). Žádný z nich není „scéna" — jsou to handlers reagující na time + state + presence.

Home page v dashboardu — celkový přehled stavu domu
Home page v dashboardu — celkový přehled stavu domu, sidebar s pillars, status pills v topbaru

Denní provoz

Čtyři fáze dne

Kontext se mění plynule. Hraniční momenty mají vlastní handler.

  1. 02:45

    Pre-wake (před budíkem)

    Heating layer 1 startuje 30 min před alarm — koupelna +2 °C, toaleta +1 °C. Sleep state ještě 'yes', světla zatím tma. Systém se připravuje, ale nevyrušuje.

  2. 03:15

    Wake & briefing

    Alarm time → morning_brain: ensureHeatingMorningMode (preset=home), TV mute, briefing fáze 1 do kuchyně. Sleep state se odepne při motion v kuchyni. 03:30 briefing fáze 2.

  3. Den

    Active

    Light routing dle lux + presence, audio idle, topení dle schedule + AI vrstvy. Žádné automatické scény — každý subsystém řeší svůj kontext samostatně. AI coordinator monitoruje, ale většinu času ticho.

  4. Večer

    Comfort phase

    AI coordinator může vyhodnotit „evening + idle scene" → comfort_suggest. TTS přečte návrh, neauto-execute (po bathroom misroute fix). Privacy guard zapnut — roleta nahoře = open space lights blokovaná.

  5. 22:00+

    Sleep prep

    Heating night slot převzal už ze schedule (22 h). Sleep_brain při sleep confirm: preset boost→home reset, audio mute, robot blokován. sh_spim='yes' gate pro celou noc.

Scény

Pět rituálů dne

Spouští se z time + state + presence. Manual override jen výjimečně.

Morning

Alarm → morning_brain → topení preset=home + boost koupelna 23 °C 60 min, TV mute, briefing fáze 1+2. Cíl: uvedení do dne pomalu, žádný šok.

Day

Default state — žádná scéna, jen reaktivní subsystémy. Lux řídí světla, schedule řídí topení, audio idle. Brain Guardian běží jednou za 15 min.

Evening

AI coordinator detect „evening + idle" → comfort_suggest TTS. Privacy guard aktivní (roleta > 20 % blokuje open lights). Možný relax scene při user accept (Cube / voice).

Sleep

Sleep button (Cube) nebo manual flow → sh_spim='yes' → sleep_brain cleanup (boost reset, audio mute, robot block). Schedule night slot už drží nižší teploty.

Night

Sleep state active. Motion v koupelně má vlastní jemnou cestu (bathroom router dim mode). Critical alerts (anti-freeze, gas, water) přebijí přes safety bypass.

Hardware

Co rozhoduje o atmosféře

Není to hardware ve standardním smyslu — je to kompozice senzorů + skriptů.

Aqara Cube T1 Pro

User intent · gestural · Zigbee

Šestistranná kostka. Každá strana = jiný režim. Otáčení = volume change. Ťuk = trigger. Hlavní user input pro „accept comfort suggest" / „sleep manual" / atd. Vyřešený TV channel bug v1.11 (channel_up → key_channel_up).

Aqara FP2

Presence · sleep wake detection

Detekuje klidného člověka. Pro atmosféra logiku jako sleep_wake marker — kdy se v ložnici začne hýbat (probuzení) vs. klid (spánek). Plus open space presence pro evening comfort detection.

Morning + Sleep brain

Skripty · sh_morning_brain_v1 · sh_sleep_brain_v2

Dva orchestrátory — ranní rituál a večerní cleanup. Každý drží 5+ subsystémů v synchronu. Morning: heating + audio + TV. Sleep: heating reset + audio mute + robot block + sleep state set.

Phone geofence

Mobile app · GPS · radius 100 m

Detekce home/away. Multi-signal confirm s motion v 5 min okně. Trigger pro preset přepínač + sleep state suggest (když sám doma a 22+ h).

AI Coordinator

sh_ai_coordinator_v1 · cron 5 min

Klasifikuje aktuální situation (idle, busy, evening_idle, morning_prep, comfort_suggest). Vstup pro AI brain a comfort_suggest TTS. Levels 0–5, úroveň 4 = TTS suggest.

Pro tech-savvy

Co se děje pod kapotou

Sleep state architektura, brain handlers, AI coordinator levels.

Sleep state (sh_spim) — centrální gate

Jediná proměnná, která gateuje 5 subsystémů. sh_spim='yes':

  • Light: priority engine deny → tma
  • Audio: TTS deny (kromě critical), radio blocked
  • Heating: night slot už aktivní ze schedule (informativní)
  • Robot: nelze spustit, queued requests čekají
  • Brain Guardian: zvýšená tolerance pro motion (anti-false-positive)

Set body: Sleep Manual (Cubo button), Vstal Kuchyně (motion at unusual hour implies waking), Phone geofence (alone home + late hour). Sync s native Homey presence API set_asleep / set_awakenikdy nesmazat jako duplicate.

Morning brain (ensure*Mode functions)

sh_morning_brain_v1 v3.5+ má 4 ensure functions, každou volá flow při alarm / motion / fallback:

  • ensureHeatingMorningMode() — preset=home, koupelna boost 23 °C 60 min
  • ensureAudioMorningMode() — TV mute, briefing trigger via sh_gemini_mode
  • ensureLightsMorningMode() — kuchyně dim, open space dle FP2
  • ensureSleepStateUnset() — sh_spim='no' (gate uvolněna)

Každá function je idempotent — můžou se zavolat víckrát během rituálu, výsledek stejný. Žádný state mutation kromě desired-state writeback.

Sleep brain (večerní cleanup)

sh_sleep_brain_v2 v3.1+ spouštěn při Sleep button / late-evening auto-detect:

  • ensureHeatingSleepMode() — boost preset reset (boost→home), schedule night slot převezme
  • ensureAudioSleepMode() — vše stop, prev_playing flag clear
  • ensureLightsSleepMode() — fade out 5 s, pak off
  • ensureRobotSleepMode() — block + cancel queued cleaning
  • ensureSleepStateSet() — sh_spim='yes' (gate aktivace)
AI coordinator levels (situation classifier)

sh_ai_coordinator_v1 cron 5 min vyhodnotí 6 situations:

  • Level 0 — idle: nic se neděje, žádná akce
  • Level 1 — passive_observe: motion ale žádný intent change
  • Level 2 — context_log: hraniční moment (sunrise / sunset / alarm)
  • Level 3 — passive_notify: log do EventLog, žádný TTS
  • Level 4 — comfort_suggest: TTS suggest (evening + idle scene)
  • Level 5 — proactive_action: auto-execute (jen po user accept)

Bug 25.4. — level 4 sám spustil bathroom radio bez user accept. Fix: prev_playing guard v sh_tts_resume_exec_v1 v1.8.

Time-of-day buckets (4 fáze)

Žádná explicitní „scéna" — jen TOD bucket, který subsystémy čtou:

  • night (22:00–05:00): sleep gate likely aktivní, low temps, no audio
  • morning (05:00–10:00): briefing window, koupelna boost, audio aktivní
  • day (10:00–18:00): default reactive, lux řídí lights, idle audio
  • evening (18:00–22:00): privacy guard active, comfort suggest possible

Granty kontextu nejsou hard-coded v skriptech — čtou se z konfigurace sh_cfg_tod_*_start. Sezónní úpravy (zimní/letní čas) jdou přes config update, ne kód.