📦 Zařízení · Rolety

Rolety s dvojí rolí

IKEA Fyrtur 1 v hlavní místnosti — fyzické zastínění + privacy signál pro light router. Pozice je continuous 0–1 (0 = úplně dolů, 1 = úplně nahoru), threshold 0,2 = privacy boundary. Bezpečnostní interlock auto-zavírá při light request, který by jinak prozradil interiér.

1Zóna s roletou
0,2Privacy threshold
0,15Auto-close target
2Role v systému

Co to dělá

Roleta jako sensor + actuator

Roleta není jen blackout. Roleta je vstup pro security/privacy decisioning. Byt je v přízemí — když je roleta nahoře, z ulice je vidět přímo do obyváku. Otevřená světla v té situaci = privacy fail. Light router čte pozici a blokuje.

Pozice je kontinuální 0,0–1,0 přes capability windowcoverings_set (Homey unification). 0 = úplně dolů, 1 = úplně nahoru. Threshold 0,2 = privacy boundary. Pod 0,2 = „closed" pro privacy účely, nad 0,2 = „open".

Bezpečnostní interlock: pokud user vystaví light request a roleta je nad 0,2, light_router NEpustí akci přímo. Místo toho: (1) auto-zavře roletu na 0,15, (2) počká na driver ack, (3) pak setCap light. Tj. roleta řídí, kdy můžou jít světla. v1.13 měla invertovanou comparison → user-zavřená roleta blokovala lights → fix v1.14.

Denní provoz

Jak roleta reaguje

Většinu dne pasivní. Akce je triggrovaná time + light request.

  1. Ráno

    Auto open

    Schedule slot 06:30 (v týdnu) → roleta auto-open na 1,0. Cíl: dům sluneční, user vstane do světla. Sleep state už unset (briefing 3:15 už proběhl).

  2. Den

    Idle / manual

    Roleta nahoře, žádné automatické akce. User může manual rotace (dashboard tile) — setCap windowcoverings_set na konkrétní hodnotu. Plus čte se pozice pro privacy guard.

  3. Večer

    Privacy interlock

    Tma venku + presence + roleta > 0,2 + light request → safety interlock. Auto-close roleta na 0,15. Po dosažení pozice (driver ack) uvolní light_router a setCap. User vidí krátký delay (~5 s) než roleta dojede dolů.

  4. Noc

    Closed

    Schedule slot 22:00 → roleta auto-close na 0,1 (úplně). Sleep state aktivní, všechny lights blokované. Roleta drží pozici celou noc.

Hardware v provozu

Konkrétní rolety

Aktuálně jen jedna — v hlavní místnosti. Plánováno více.

Roleta Fyrtur 1

IKEA · Zigbee · windowcoverings_set 0–1

IKEA Fyrtur (battery-powered roller blind). Hlavní okno open space (jídelna). Capability windowcoverings_set kontinuální 0–1. Battery cca 1 rok při typickém využití (2× denně auto). Cena ~3 000 Kč.

Ložnice roleta Plánováno

IKEA Fyrtur / Aqara · ložnicový blackout

Plánovaná druhá roleta v ložnici. Funkční role: blackout pro lepší spánek, auto-open ráno před wake. Aqara P2 alternativa pro Matter/Thread (lepší budoucí standard).

Pracovna roleta Plánováno

Anti-glare · monitor protection

Pracovna východní okno, ranní oslnění monitoru. Plán: auto-close 50 % v okně po východu slunce, full open při sunset. Závisí na lux senzoru v pracovně (zatím není).

Koupelna roleta Možná

Privacy + steam

Volitelné — koupelna je v přízemí, ale lehké okno se zatemněním. Privacy při sprchování ráno když venku tma. Otázka jestli má smysl, momentální workflow funguje.

Smart valance / curtain Daleký plán

Aqara curtain motor · stop replacement

Tradiční záclonová tyč s motorem (Aqara) místo roller blind. Estetičtější ale dražší (~5 000 Kč/m). Daleký plán pro nový byt nebo jako upgrade.

Pro tech-savvy

Co se děje pod kapotou

Privacy comparison, safety interlock, position semantics.

Privacy comparison (proč invertovaná byla bug)

v1.13 měl light router code:

// BEFORE (wrong)
const blindOpen = roletaPos < 0.2;
if (blindOpen && wantsLight) → block;

Logika byla: „pokud roleta dole (< 0,2) = open prostor venku → block lights." Ale to je obráceně — roleta na 0,1 znamená dolů (zataženo), ne otevřeno. Důsledek: user-zavřená roleta = blokovala lights. Přesný opak požadovaného.

// AFTER (right) v1.14
const blindOpen = roletaPos > 0.2;
if (blindOpen && wantsLight) → block;

Položka 0,2 = privacy threshold. Nad = open (vidět dovnitř). Pod = closed (privacy zachována). Memory: reference_open_space_lighting_pipeline.md.

Safety interlock (auto-close pipeline)

Když user emituje light request a roleta je nad 0,2 v privacy hours (TOD evening / night, lux pod prahem):

  1. Light_router detekuje privacy fail
  2. setCap windowcoverings_set = 0.15 (config: sh_cfg_blind_privacy_position)
  3. Listen na driver ack (pozice dosažena, ~3–5 s) NEBO timeout 10 s
  4. Po ack: setCap light onoff (původní request)
  5. Pokud timeout: log warning + default deny (radši tma než breach)

Pipeline atomicky — jeden flow rozhodne celý sequence. Žádný race condition („roleta dolů + light → během toho user otevře roletu manuálně" — by se to v 5 s okně mělo dovnitř, ale pokud ano, příští cyklus to dořeší).

Position semantics (windowcoverings_set vs. _state)

Homey má dvě capabilities:

  • windowcoverings_set: float 0,0–1,0 — target position. Set čte device na drive direction. 0 = bottom (closed), 1 = top (open).
  • windowcoverings_state: enum 'idle' / 'up' / 'down' — současný stav motoru. Read-only z driver. Užitečné pro „čekej až dojede".

IKEA Fyrtur convention: 0 = full down (tělo lana navinuté), 1 = full up (lano vysunuté). Aqara curtain motor naopak často 0 = open, 1 = closed — ověřit per device.

Schedule format (auto-open / auto-close)

Schedule per zóna podobně jako heating:

{
  "version": 1, "enabled": true,
  "schedule": {
    "weekday": [
      {"time": "06:30", "position": 1.0, "comment": "morning open"},
      {"time": "22:00", "position": 0.1, "comment": "night close"}
    ],
    "weekend": [
      {"time": "08:00", "position": 1.0},
      {"time": "23:00", "position": 0.1}
    ]
  }
}

Cron sh_blind_scheduler_v1 (every 5 min) najde aktuální slot a aplikuje. Manual override z dashboardu má prioritu (config: sh_cfg_blind_manual_override_until_ts).

Battery management (Fyrtur ~1 rok)

IKEA Fyrtur má integrovaný Li-Ion akumulátor, USB-C nabíjení. Capability measure_battery:

  • > 50 % — green
  • 20–50 % — yellow, log warning
  • 10–20 % — red, push alert (až bude implementováno)
  • < 10 % — kritický, schedule nabíjení do týdne

Real-life: při 2 cyklech denně (open ráno + close večer) battery drží ~1 rok. Nabíjení trvá ~4 h, lze přes noc bez vyndání. USB-C kabel zůstává během nabíjení.