Doručovatel
Geofence enter = 1/3, motion v předsíni = 2/3 (klepá), DOOR_OPEN ne (otevře jen když po 30 s ticho). Multi-signal nesplní → arrival_pending expirace v 5 min → away zůstává. Funguje.
Kontext
Stav před: sh_rezim_doma='pryc' od 04:10 ráno (po ranní
rutině). Topení preset away — všechny zóny 16 °C cíl. Lights blokované přes
priority engine. Audio idle. Robot vysavač spustil v 14:00 plánované cleaning,
momentálně dokončuje (~70 % progress).
User: cesta z Liberce, 14:25 dorazí na ulici, parkuje, jde k bytu, otevírá dveře. Žádný telefon v ruce, žádné „home" tlačítko, žádný NFC tag. Jen jednoduše přišel. Systém sám rozhodne, kdy a co přepnout.
Cíl pipeline: vědět, že je to skutečně user vrácení domů, ne falešný geofence trigger (sousedi, doručovatel, projíždění kolem). Proto multi-signal — geofence + door + motion v 5 min okně. Single-signal příliš často false positive.
Timeline
Každý milník zaznamenán v EventLog s timestamp.
Auto na ulici, GPS poloha 200 m od domu. Mobile Homey app reportuje
geofence='outside'. sh_rezim_doma='pryc' stále aktivní,
všechno tiché. Robot vysavač pokračuje v cleaning.
GPS posun do 100 m okruhu kolem domu (radius config:
sh_cfg_geofence_radius_m). Mobile app fire geofence_enter
event. Homey flow trigger → sh_arrival_pending='yes', čeká na další
signály. Multi-signal counter = 1/3.
Geofence enter event spustí flow „SH – Robot – Pause on arrival" — robot dostane pause command, vrací se do dock. User nepříde do dveří se startujícím vysavačem. Cleaning bude auto-resume večer (po sleep block expiraci).
Door/window contact na vchodových dveřích → alarm_contact='open'.
Flow „SH – Door – Front" → sh_arrival_pending stále active, counter = 2/3.
Way-finding light v předsíni auto-on (motion + door open + lux pod prahem) na 60 s.
PIR motion v předsíni → alarm_motion=true. Multi-signal counter = 3/3
(geofence + door + motion v 5 min okně). Confirm threshold splněn — toto je
skutečné user arrival, ne false positive.
sh_rezim_doma='doma' set. Cascade do subsystémů:
sh_heating_preset='home',
sh_audio_request='idle' (bez auto-radio, ale unblock TTS),
sh_priority_active='none' (light router uvolněný).
Scheduler cron next tick (do 5 min) přepočte targets dle aktuálního schedule slotu (afternoon comfort): jídelna 21 °C, ložnice 19 °C, koupelna 22 °C, toaleta 18 °C. Demand cron spočítá delta z aktuálních (16+ °C protože away) → boiler_request='on'. Kotel rozjede na ~20 min comeback.
Po pohybu z předsíně do kuchyně se aktivuje FP2 v open space. Lux check (zima, ale denní světlo OK ~250 lux) — nad „off" threshold (400) ne, ale nad „on" threshold (120) ano. Hraniční zóna, hystereze drží lights vypnuté.
AI coordinator vyhodnotí situation = arrival_idle (přišel domů,
žádná immediate task). Možnost level 4 suggest: „Ahoj, dnes byl studený den,
chceš spustit relax scénu?". TTS čeká 30 s na cube tap accept.
Všechny subsystémy v home modu. Brain Guardian next cron 14:30 ověří consistency. Energy tracking re-započne (kotel runtime today += 0 počítáno, kotel teď zase běží — runtime se inkrementuje od příštího demand cronu).
Po 30 min topení (jídelna 16 → 21 °C, delta 5 °C, 9 kW kotel) zóna v rámci hystereze. Kotel vypne. Runtime today += ~0,5 h × 9 kW = 4,5 kWh za odpolední comeback (zima venku zhoršuje accuracy estimate).
Co když
Co se stane v edge cases — a co se reálně stalo.
Geofence enter = 1/3, motion v předsíni = 2/3 (klepá), DOOR_OPEN ne (otevře jen když po 30 s ticho). Multi-signal nesplní → arrival_pending expirace v 5 min → away zůstává. Funguje.
Geofence enter = 1/3, ale GPS opustí okruh za 1–2 min. Geofence_exit event před motion confirm → counter reset, arrival_pending cleared. Žádný false positive.
Bez auta, jen pěšky. Geofence funguje stejně (mobile GPS), door + motion stejně. Pipeline neutrální vůči dopravnímu prostředku — záleží jen na finálním příchodu domů.
Žádný geofence signál. Door + motion = 2/3, geofence = 0. Multi-signal nesplní — ale arrival_pending counter má tolerantní pravidlo: 2/3 + door open = arrival high confidence (alternate path).
GPS noise může způsobit blikání geofence_enter / exit. Pipeline má debounce 5 s na geofence transitions. Vícenásobné re-entries během 1 min se počítají jako 1 event.
Pro tech-savvy
Single-signal arrival je nepoužitelný protože:
Kombinací 3 z 3 signálů během 5 min okna získáme high confidence. Tolerance pravidla:
Po home preset confirm subsystémy přepínají v deterministic pořadí:
Heating první protože nejpomalejší. Když user dorazí, dům je studený (away 16 °C), comfort 21 °C trvá ~30 min. Robot druhý protože méně časově citlivý.
Bez tohoto by robot pokračoval v cleaning během user arrival → kolize, hlučno, nepříjemné. Implementace:
// flow "SH – Robot – Pause on arrival"
trigger: geofence_enter event
action 1: setCap robot.vacuum_cleaner_state = 'docked'
action 2: log event 'robot_paused_on_arrival'
action 3: schedule resume @ next_evening_after_sleep_off
Pause neznamená cancel — cleaning se obnoví večer po sleep gate release. State pamatuje progress, pokračuje od přerušeného místa.
30 min studený dům → 21 °C target = 9 kW non-stop ~30 min. Bez safety:
Log z poslední pondělní arrival (před 1 týdnem):
14:24:32 sh_geofence_router_v1 geofence_enter radius=85m
14:24:34 _flow_ robot_paused_on_arrival vacuum_state=docked
14:24:58 sh_door_router_v1 door_open contact=front
14:25:03 sh_motion_router_v1 motion_on zone=predsin
14:25:03 sh_arrival_pipeline_v1 arrival_confirmed signals=3/3
14:25:04 sh_presence_router_v1 mode_change away→home
14:25:05 sh_heating_scheduler_v1 preset_change away→home
14:25:08 sh_open_space_router_v1 presence_on lux_check=hold
14:25:30 sh_brain_guardian_v1 state_consistent score=92
Související