📖 Příběh · Případová studie
Ráno v 3:15
Minute-by-minute timeline pondělního rána, jak ho dům odehraje sám. Začíná v 02:45 pre-wake boostem topení v koupelně, končí v 04:10 odchodem do auta. Žádný klasický budík, žádné mobilní app dotyky, žádné scény spuštěné ručně. Jen subsystémy, které samy vědí, co a kdy.
Kontext
Pondělí, leden, -3 °C venku
Datum: pondělí v lednu 2026. Venku: -3 °C, vlhkost 85 %, mírný východní vítr. V domě: night slot schedule (jídelna 18 °C, ložnice 17 °C, koupelna 19 °C), sleep state aktivní od 22:30, roleta dole na 0,1.
User cíl: vstát ve 3:15 (pracovní den), do auta ve 4:00, na šichtu v Liberci v 4:30. Žádný čas na boj s technikou, žádná tolerance pro „dnes ráno mi to nefungovalo". Tohle byl tester celý vývoje smart home — jednoduše musí pracovat.
Následující timeline je reálné chování systému jak ho EventLog zaznamenává — ne plán, ne ideál, reálná data z poslední pracovní pondělí tohoto roku.
Timeline
85 minut autonomního provozu
Každá rolka v EventLog odpovídá jednomu řádku tady.
-
02:45:00
Heating layer 1 zapne pre-wake boost
Scheduler cron:
preWakeBoostAI vrstva detekuje alarm time = 03:15 (PO–PÁ), 30 min do něho. Zóna koupelna target_temp z 19 → 21 °C (+2 °C delta). Toaleta 18 → 19 °C (+1 °C, okno 5–15 min, ještě se nestartuje). -
02:47:30
Demand cron sepne kotel
Koupelna current 19,2 °C, target 21 °C, delta = 1,8 °C > hyst_cold (0,5).
boiler_request='on', executor setCap FGS-214. Stykač cvakne, kotel rozjede stage 6 kW. Ostatní zóny zatím v rámci hystereze. -
03:00:00
Toaleta layer 1 startuje
Druhý preWakeBoost slot: toaleta z 18 → 19 °C, okno 15 min do alarm time. Demand cron příští tick (03:01:00) ohodnotí, zatím není demand (delta < 0,5).
-
03:14:55
Alarm fires (-5 s buffer)
Mobilní alarm time 03:15, Homey flow „SH – Alarm – Pre-fire" trigger 5 s před.
sh_alarm_pending='yes',sh_morning_brainpřipravuje: ensureHeatingMorningMode (preset boost koupelna na 23 °C 60 min), ensureAudioMorningMode (TV mute prep). -
03:15:00
Briefing fáze 1 startuje
Gemini brain generuje text: pozdrav, čas, datum, počasí, svátek. Defenzivní truncation na 150 znaků (Cast limit 200). TV mute (Android TV remote setCap volume_mute=true). Speaker kuchyně začne TTS.
-
03:15:08
Briefing 1 končí, sleep_state unset
TTS dokončen,
tts_completedevent. TV unmute (volume restore).sh_spim='no'(sleep gate uvolněna). Schedule příští fázi briefing 2 v 03:30 (delay 15 min přes pending var). -
03:16:30
Vstal kuchyně motion
PIR Fibaro v kuchyni detekuje pohyb. Motion-on event → flow → light_router s priority engine check. Sleep guard už unset, lux pod prahem (tma) → kuchyně dim 0,4 (ranní jemný profil). FP2 v open space čeká na confirm.
-
03:17:00
FP2 presence confirm
FP2 detekuje sedící/stojícího člověka v open space →
alarm_presence=true. Open space router: lux check, privacy guard (roleta dole, OK), sleep guard unset → Sektorka dim 0,5, Stůl Jídelna 0,3 warm. -
03:18:20
Káva trigger (možná)
Plug measure_power kávovaru z 0 → 800 W → flow logger zaznamená spotřebič on. Zatím žádná akce, jen passive monitoring. (V plánu: trigger pro sound suggest „Pondělní hudba?".)
-
03:30:00
Briefing fáze 2
Pending timestamp expirace → flow „SH – Morning – Briefing 2". Gemini generuje part 2: BTC kurz, PM2.5 (-1 / 8 µg/m³), vlhkost 45 %, vtipný komentář. Truncation 170 chars. Speaker kuchyně, TV znovu mute → TTS → unmute.
-
03:35:00
Bathroom motion start
Motion v koupelně → bathroom router (vlastní pipeline). Lux pod prahem + TOD ráno → koupelnová stropní dim 0,8 (bright morning). Sanremo radio spustí na koupelnovém speakeru (Italian Classic Hits).
-
03:35:05
Heating boost koupelna 23 °C
ensureHeatingMorningMode aplikoval boost preset → koupelna target = 23 °C (config:
sh_cfg_heating_morning_bath_boost_temp). Demand cron příští tick 03:36 boiler_request='on' (kotel běží od 02:47, jen target jiný). -
03:50:00
Sprcha končí, motion off
Motion sensor v koupelně 30 s bez pohybu → motion-off event. Bathroom router čeká dalších 30 s grace period, pak Sanremo radio stop. Stropní dim ramp z 0,8 → 0 v 5 s. Heating boost stále aktivní (60 min countdown ze 03:14).
-
03:55:00
Snídaně, kuchyně full
Motion v kuchyni continuous, lux stále pod prahem → kuchyně dim ramp 0,4 → 0,8 (jasnější profil pro snídani). FP2 stále presence → open space lights drží. Heating: jídelna current 18,5, target 21 (schedule comfort od 5:00 už jede).
-
04:08:00
Vstoupení do předsíně
Motion v předsíni → way-finding light auto-on (60 s timer). Otevření vchodových dveří → door_contact event.
sh_departure_pending='yes'flag, čeká na geofence exit confirm. -
04:09:30
Vystoupení, geofence exit
Phone GPS opustil home zónu (radius 100 m). Multi-signal confirm — geofence_exit + door_contact open + 0 motion v 5 min okně. Pravděpodobnost odchod = vysoká.
-
04:10:00
Away preset cascade
Multi-signal confirm splněn →
sh_rezim_doma='pryc'. Cascade: všechny zóny topení → preset away (16 °C target). Audio brain → idle silent. Light router → blokované všechny non-essential. Robot vysavač → unblocked (může spustit denní cleaning). -
04:10:15
Předsíň timeout off
Motion v předsíni naposled v 04:09, 60 s timer expiroval → way-finding light off. Dům je tichý, dark, kotel běží na low (16 °C target velký delta z aktuálních 19 °C → off do hystereze).
Postmortem
Co fungovalo, co se mohlo pokazit
Co fungovalo bez zaváhání
- Pre-wake boost timing — 30 min předstih byl dostatek, koupelna v 03:15 = 21 °C
- Briefing split — 200 char limit držel, ani jedna fáze nebyla truncated mid-věty
- TV mute pipeline — synchronizace s TTS bez race condition
- Light routing — sleep guard unset včas, dim profil ranní šetrný
- Multi-signal departure — bez false positive (sousedi za zdí v 4:00 = neodhlásilo)
Co se mohlo (a v minulosti se i pokazilo)
- Stuck priority='tts' — kdyby TTS pipeline nevyhodila tts_completed event, light router by zůstal blokovaný. Brain Guardian by detekoval po 1 min. Reálně se stalo 22.4. — fix v guardian v1.1.
- SNZB-04 deep-sleep — kdyby door/window contact spadl do unreachable, departure pipeline by ztratil door_contact signál. Multi-signal by neconfirmoval, away preset by nepřišel. Stalo se 23.4. — náhrada Aqara P2 plánovaná.
- Cold-start bug — kdyby anti-cycling guard nedovolil topení sepnout (sinceTs=0 → forever cooldown), pre-wake boost by neodehrál. Reálně se stalo 21.4. — fix demand v1.2.
- UUID re-pair orphan — kdyby po výměně baterky senzor dostal nové UUID a flow trigger karty zůstaly na old, silent fail. Reálně se stalo 26.4. (Door/Window Sensor Jidelna1) — bulk swap fix.
- Ghost var sh_audio_current_mode='radio_bathroom' — po incompletním stop by audio_brain mohl spustit bathroom radio i bez user. Reálně se stalo 25.4. — prev_playing guard fix v1.8.
Co tady ještě není (Phase E plán)
- Voice intent — místo cube možnost říct „dej mi briefing 2 hned"
- Ambient morning music — místo TTS-only briefing přidat lehkou hudbu na pozadí
- Proactive smart suggest — „dnes je -10 °C venku, vezmi si bundu"
- Coffee level monitoring — plug power curve detekuje, kdy káva dohotovuje
Související