📖 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.

85 minTotal délka rituálu
5Subsystémů zapojených
2TTS fáze briefingu
0Manuálních akcí

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.

  1. 02:45:00

    Heating layer 1 zapne pre-wake boost

    Scheduler cron: preWakeBoost AI 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).

  2. 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.

  3. 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).

  4. 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_brain připravuje: ensureHeatingMorningMode (preset boost koupelna na 23 °C 60 min), ensureAudioMorningMode (TV mute prep).

  5. 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.

  6. 03:15:08

    Briefing 1 končí, sleep_state unset

    TTS dokončen, tts_completed event. 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).

  7. 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.

  8. 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.

  9. 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?".)

  10. 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.

  11. 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).

  12. 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ý).

  13. 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).

  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).

  15. 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.

  16. 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á.

  17. 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).

  18. 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