🏠 Prožívání · Světla a osvětlení

Světla která vědí, kdo je v místnosti

Dva senzory na open space — mmWave radar pro klidného člověka, klasický PIR pro pohyb. Buď jeden, nebo druhý. Nikdy ne oba false. Nad senzory běží 4-vrstvá pipeline, která nakonec přepne kapacitu reálné žárovky — s privacy guardem, sleep guardem a triple-sensor anti-flicker logikou.

11Zón se světly
2Senzory open space
4Vrstvy pipeline
0,2Privacy threshold rolety

Co to dělá

Světla která respektují kontext

V open space (jídelna + kuchyně) jsou dva senzory: Aqara FP2 (mmWave radar — vidí i sedícího člověka, micro-pohyby, dýchání) a klasický Z-wave PIR Fibaro (jen pohyb). Pravidlo je jednoduché — light zůstává zapnutý, dokud kterýkoli ze senzorů hlásí přítomnost. Vypne až když oba říkají „nic tu není".

Nad senzory ale není rovnou setCapability. Mezi tím je 4-vrstvá pipeline: request → priority engine (TTS má prioritu 100, světla 60 — TTS přebije) → light router → fyzický zápis. Když priority engine řekne „ne", světla počkají až řeč dohraje.

A nad pipeline ještě dvě pravidla: privacy guard (byt je v přízemí, když je roleta nad 20 % = z venku vidět dovnitř → otevřená světla open space zakázána) a sleep guard (když spím, žádné světlo se zapnout nesmí — ani na motion).

Denní provoz

Jak světla reagují přes den

Lux senzor rozhoduje, presence senzor potvrzuje, privacy a sleep mají právo veta.

  1. Ráno

    Vstanu, nepřeruším spánek

    Motion sensor v kuchyni zachytí pohyb. Sleep state je už unset (sleep brain detekoval probuzení). Lux pod prahem → kuchyňská světla zapnutá v dim modu, open space čeká na FP2 confirm.

  2. Den

    Lux řídí, ne motion

    Při lux nad 400 (denní světlo dostatečné) zůstávají světla zhasnuté i když někdo prošel kolem. Při lux pod 120 a presence true se zapnou. Hystereze zabraňuje blikání kolem prahu.

  3. Večer

    Privacy guard aktivuje

    Když je venku tma a roleta je nad 20 % — Sektorka, Stůl jídelna a LED pásek se zapnout NESMÍ. Bezpečnostní interlock auto-zavře roletu na 0,15 a uvolní světla.

  4. Noc

    Sleep guard zamkne vše

    Sleep state = active → priority engine vrátí false na light request. Žádný motion, žádné FP2 vibration nezapne světlo. Pohyb v koupelně má vlastní jemnou cestu (bathroom router).

Scény

Pět situací, pět chování

Žádné explicitní tlačítko — světla rozhoduje senzor + kontext.

Vstup do bytu

FP2 detekuje presence → light_request='on' → priority engine allow → router → setCap. Při lux pod 120 dim na 40 %, jinak full.

Privacy guard

Roleta nad 20 % a is night → safety interlock blokne light request. Pokud user explicitně chce → auto-zavře roletu na 0,15 a uvolní light.

Lux auto

Lux > 400 → světla zůstávají zhasnutá i v presence. Lux < 120 → zapnou se. Mezi tím hystereze (config: sh_cfg_lux_open_space_on/off).

Sleep silent

sh_spim='yes' → priority engine deny pro light request. Pohyb se loguje, ale fyzická akce neproběhne. Bathroom má vlastní pravidla.

Stuck recovery

Když sh_priority_active='tts' přes minutu → brain guardian detekuje a resetuje na 'none'. Světla začnou opět reagovat.

Hardware

Co reálně svítí a co rozhoduje

Dva senzory + tři skupiny světel + jedna roleta která hraje roli v privacy logice.

Aqara FP2 (SNZB-06P)

mmWave radar · presence · Zigbee

Vidí i sedícího člověka, micro-pohyby a dýchání. Zóna „open space" (jídelna + kuchyně). Capability alarm_presence. Falešně může minutu mihnout na False — proto triple-sensor guard při presence_off.

Fibaro Motion Sensor

PIR · motion · Z-wave

Klasický PIR. Detekuje pohyb (změna IR), ne klidného člověka. Capability alarm_motion. Funguje jako guard pro presence_off — když je motion stále true, presence_off se ignoruje.

Sektorka1

Open space stropní · WiFi (Tuya)

Hlavní stropní svítidlo open space. Ovládaná přes setCapabilityValue('onoff', ...). V privacy módu (roleta nahoře) zakázaná — z venku přímo viditelná do bytu.

Stůl Jídelna 1 + LED pásek

Stolní + ambient · WiFi

Stolní lampa nad jídelním stolem + LED pásek za TV. Stejný privacy guard jako Sektorka. Při lux pod prahem se zapínají s presence, jinak zhasnuté.

Roleta Fyrtur 1

IKEA · Zigbee · windowcoverings_set

Hraje dvojí roli — fyzické zastínění a binární privacy signal pro light router. Pozice nad 20 % = „open" pro privacy účely. Při safety interlock auto-zavírá na 0,15.

Pro tech-savvy

Co se děje pod kapotou

Pipeline, dual-sensor logika, triple-sensor guard, privacy thresholdy.

4-vrstvá pipeline (request → priority → router → setCap)
  1. Request: senzor flow nastaví sh_light_request='on'/'off'. Tady končí senzorová cesta — žádné setCap zatím.
  2. Priority engine (sh_priority_engine_v1): rozhodne, jestli light může vyhrát. Když TTS běží, vrátí false a flow pipeline skončí.
  3. Router (sh_light_router_v1): aplikuje privacy guard, sleep guard, lux check. Vrací konkrétní device + capability + value.
  4. setCap: fyzický zápis přes Homey API ( setCapabilityValue('onoff', ...)) na konkrétní device z device map.

Před 25.4. byl bug — pipeline končila u priority_engine, router se nevolal. Fix: existující flow „SH – Priority – Light" rozšířen o 2. action chained na outputSuccess. Žádný nový flow (REUSE FIRST).

Dual-sensor logika (FP2 + Z-wave)

Pravidlo: lights ON pokud FP2.presence === true OR motion.motion === true. OFF jen když FP2.presence === false AND motion.motion === false.

  • FP2 ON → flow „SH – OpenSpace – Presence ON" → router
  • FP2 OFF → flow „SH – OpenSpace – Presence OFF" s 15 min delay → router
  • Z-wave motion → flow „SH – Kitchen AI – Motion ON/OFF" (jen kuchyňská světla, NE open space)

Z-wave NEPOSÍLÁ event přímo do open space routeru. Čte se jako guard ze skriptu při presence_off.

Triple-sensor guard pro presence_off (v1.18)

FP2 občas „mihne" na False (cooldown / sensitivity). 15 min delay → presence_off. V té chvíli user už dávno zpátky. Lights neměly zhasnout. Fix:

if (normalized === 'off') {
  if (motion.alarm_motion === true) → keep on (off_ignored_motion_active)
  if (presence.alarm_presence === true) → keep on (off_ignored_presence_active)
  if (max(open_presence_ts, open_motion_ts) > now - 5min) → keep on (off_ignored_recent_5min)
}
Privacy guard (roleta > 20 % = open)

Byt je v přízemí. Když je roleta nad sh_cfg_blind_safety_threshold (default 0,2 / 20 %), přímý pohled z ulice do obýváku. Otevřená světla (Sektorka, Stůl, LED pásek) jsou v té situaci zakázána.

Bezpečnostní interlock při light request s privacy fail:

  1. Auto-zavře roletu na sh_cfg_blind_privacy_position (0,15)
  2. Po dobu zavírání blokne light
  3. Po dosažení pozice uvolní light a setCap normálně

v1.13 měla invertovanou comparison (< místo >) — user-zavřená roleta byla považována za „open" a blokovala lights. Fixed v1.14.

Stuck priority bug (TTS gate)

Když TTS pipeline nedokončí (network glitch, speaker disconnect, …), sh_priority_active='tts' zůstane zaseklý. Light request priority 60 < TTS 100 → priority_engine vrátí false → light_router se nikdy nevolá → tma i při presence.

  • Detection: active='tts' AND result='allow' AND age > 1 min = stuck
  • Recovery: brain guardian resetuje na none/idle
  • Long-term fix: TTS skript musí volat priority reset při dokončení