2026-05-28
WEB
Sekce „Moje aplikace" živá — 7 aplikací, 50 screenů, audit drift sweep
Dvoudenní intenzivní práce na osobním webu cestovatel69.cz/aplikace. Nová hub sekce prezentuje sedm vlastních aplikací: Config Center, Italia Travel Planner, Účetní kniha, Finance Analytik, Krabičková dieta, Energy Dashboard a Domácí panel na zdi (RPi kiosk). Celkem 50 screenů (14 ITP, 8 UK, 8 Analytik, 8 Meal Planner, 7 CC, 4 RPi, 1 Energy), plně lokalizováno CS/EN/IT (21 stránek = 7×3). Texty pro běžné lidi — tech jargon vždy vysvětlený v 1 větě (DCF, FIFO, AES, ZTL zóny, BMR/TDEE). Site-wide vanilla JS lightbox — klikni na kterýkoli obrázek, otevře se fullscreen modal, ESC zavře. Po finišování proběhl audit drift sweep obou webů (osobni + smart-home-website): nalezeno 25 driftů ve 3 prioritách, opraveno 13 (P0+P1). Hlavní motivy: RPi kiosk umístění (kuchyně → předsíň, oprava i v EN/IT mirrorech), Sheets → SSD framing na 5 stránkách smart-home webu (po 27.5. cutover), Shelly Plug S Gen3 status z „na cestě" → „LIVE od 30.4.", Door/Window Sensor diakritika („Jídelna1" → „Jidelna1") sjednocena, Intenso SSD z „plánováno" → „LIVE od 27.5.2026" (verified /dev/sda1).
2026-05-27
DEPLOY
Energy Dashboard one-click launcher — PC webová aplikace bez blikajícího monitoru
Standalone projekt v C:\.Projekt\.Energy\ dostal kompletní Windows webapp wrapper. Jeden klik na desktop shortcut Energy Dashboard → spustí se hidden pythonw proxy (port 5177) → otevře se Edge/Chrome v --app módu na čistém dashboardu (žádný taskbar, žádné menu). Proxy je server-side reverse fetcher pro http://192.168.1.241:8123/local/smart-home/energy-dashboard.json — řeší CORS problém (HA Core neposílá ACAO header) a poskytuje on-disk fallback když je HA RPi nedostupný (X-Energy-Source: cached-stale header + viditelný alert). Původně byl design „PC scheduled task každých 60 s sync" — vyřazeno, protože blikalo okno. Nahrazeno on-demand proxy: data si stahuje až browser tab je otevřený. RPi data live od 28.5., port přesunut z 5176 (kolize s Meal Plannerem) na 5177. Vlastní programaticky generovaná multi-res ICO ikona (16/32/48/64/128/256, cyan blesk na navy panelu). Repo: bludek69-lgtm/energy-dashboard (private).
2026-05-27
FIX
Roleta zavírala přes otevřené okno — paralelní writer v sh_light_router_v1
User report: „roleta se zavírá i když je otevřené okno". SSD log z 19:12 přesně diagnostikoval problém: sh_jidelna_roleta_router_v2 zafungoval správně (roleta_window_safety skipped v 19:12:48 — window contact = open detected) — ale o sekundu později sh_light_router_v1 zavřel roletu PŘÍMO bez window kontroly (roleta_auto_close_privacy 100% → 15%, trigger evening_deadlock_fix). Root cause: canAutoClose branch (L1009) checkoval jen phase + mode + sleep, žádný alarm_contact guard. Sandbox-first oprava — 8-case test scenarios v _backup_window_safety_fix/test_roleta_window_safety.js (closed/open/sensor-offline/getDevice-throws/null/day-phase/away/sleep) → 8/8 PASS → live PUT v1.16. Fail-CLOSED policy: když je senzor nedostupný / vyhodí exception → považuj okno za otevřené, raději nezavřít. Nový log event roleta_auto_close_skip_window_open. Pure-function logic replica, žádná funkční změna jiných cest. Backup pair pre/post v _backup_window_safety_fix/.
2026-05-22
FIX
Roleta jídelna zavřela přes otevřené okno (P1) — silent-fail kvůli rename device
Předchozí incident stejného typu, jiný root cause. sh_jidelna_roleta_router_v2 měl v lokálním D constu hardcoded starý device name 'Door/Window Sensor (SNZB-04)1', ale device byl mezitím přejmenován na 'Door/Window Sensor Jidelna1'. getDev() vrátil null, try/catch(_) ho potichu spolkl, windowOpen defaultoval na false (unsafe default) → SAFETY skip se nespustil → roleta zavřela přes otevřené okno. Fix commit 349532d: dva string replaces (oba název senzoru), commit + push. Pravidla z incidentu: (1) safety guards musí default-to-fail-CLOSED (windowOpen=true při fetch failu), (2) catch bloky musí volat logEvent aby silent fail šel vidět, (3) device names číst ze sh_device_map namísto hardcoded stringů. Memory entry feedback_device_rename_silent_fail_2026-05-22.md dokumentuje pravidla pro reuse v dalších scriptech.
2026-05-19
FIX
SIGABRT každých 5 minut — group concurrency, ne vadný script
Čtyři dny audit memory, knihoven a logování. Nasazený forensic patch na 80 hot-path scriptech (odstranění Promise.race + wait() z inline fetchWithTimeout). Crash cyklus pokračoval. Teprve když uživatel vizuálně oznámil „padá to přesně každých 5 minut", příčina začala konvergovat. Nešlo o jeden vadný script — bylo to skupinová souběžná zátěž: 17 Advanced Flow s triggerem cron:every_nth {n:5, type:minute} spouštělo HomeyScript synchronně na 00s 5min hranici, runtime nezvládl souběh. Emergency 5-min isolation (vypnutí celé /5min HomeyScript skupiny) zastavila pády — crashedCount +0 za 12 minut. Pak R1 obnovil 3 kritické flows s delay 30/60/90s (Heating, Presence Failsafe, Brain Guardian). R1B rozprostřel 8 lehkých flows přes delays 5–195s. R1C snížil kadenci 3 nejtěžších na /10m (Device Availability, Health Monitor, OpenSpace Autoheal) — mem peak spadl z 235 MB na ~145 MB median (−38 %). ENABLE-ALL sequential vrátil zbývajících 6 heavy flows (Dashboard, Health Alert, Context Full, Diagnostic, Meta, AI Guard) na /15m nebo /30m s offsetem 215–320s, 1 PUT na flow + reálné fire ověření + 10 min observační okno. Tři hodiny, 6 kroků, 0 crashes během deploye. Žádný HomeyScript PUT, žádná business logika dotčená, žádný manual restart. Klíčová lekce: před hlubší crash analýzou nejdřív spočítej intervaly mezi pády — pravidelný interval = trigger-driven cause. Číst delší post →
2026-05-19
FIX
Context Full chain — 7-day stale článek opraven Flow bypassem
Audit po SIGABRT odhalil další pre-existing bug: Flow SH – System – Context Full mělo chain trigger /30m → delay 215s → runWithArg sh_context_full_v1("get") → run sh_context_history_v1, ale první článek dlouhodobě silent-failoval. Skript sh_context_full_v1 byl ~12.5. ručně smazán z Homey UI (vrácel false i bez exception), Flow card si ale držela orphan SID. sh_context_history_v1 tak nedostal control přes outputSuccess chain — jeho lastExecuted ustrnulo na 2026-05-12 18:25 (7 dní stale). Restore-with-patch (recreate skript s Promise.race+wait odstraněním v fetchWithTimeout) ani defensive try/catch wrap kolem koncových setValueSafe volání chování nezměnily — debug ukázal že throw je před hypotetizovaným řádkem. Mezitím sh_context_weather_sync_v1 (separate /10m bridge, existující 3 týdny jako workaround) drží sh_context_json fresh nezávisle. Finální fix: atomický Flow bypass — z 4-card chain odstraněno card #1 (runWithArg), delay přepojen přímo na sh_context_history_v1. První /30m fire @ 11:33:35.979 (exact schedule match, +979 ms latency) — chain obnoven. sh_context_full_v1 ponechán jako legacy artifact (per hard rule nemazat). Slot 215s zachován pro no-overlap plán. Lekce: Pokud Flow míří na smazaný skript, Homey ho NEMUSÍ označit jako broken=true — ověřuj action-level SID reference přes GET /script/<sid>.
2026-05-18
INFRASTRUCTURE
SSD logging cutover — 1 var flip migroval 91+ logEvent callerů
2026-05-18 v 07:09 CEST proběhl migrační moment, na který se v Homey velmi obtížně reaguje retroaktivně. Až do tohoto okamžiku všechny logEvent(...) hovory napříč 91+ skripty směřovaly na Google Sheets Apps Script web app — pomalý, rate-limited a závislý na cloudu. Nasazená architektura umístila SQLite receiver na HA RPi (http://192.168.1.241:9080/log/sheets-compat) s daily JSONL files + WAL-enabled SQLite (4.2 MB po prvním dni). Migrace bez touching jediného skriptu: stačila změna jediné Logic proměnné sh_sheets_url z Apps Script URL na receiver URL. Skripty si target endpoint čtou per-call přes getValue('sh_sheets_url'), takže všechny callery se přepojily okamžitě. Google Sheets endpoint zůstává jako záložní fallback (revert = swap původní URL zpět). Schema kompatibilita 100 % (payload format sheets-compat), zero data loss. Po cutover proběhla séria operací na vrácení Energy Dashboard R1 aggregatoru + UI a osobní web AI page deploye.
2026-05-15
FEATURE
Dashboard Config Center + Weather restore — 8 vln v jeden den
15. května večer. Po sérii R2-R6A oprav Homey runtime se přesun na dashboard. Wave 1 přidal __CANON_ENUMS guard — dashboard přestal psát czech literály (doma, pryc, ano, strong_yes) do logických proměnných, 9 zakázaných tokenů blokováno na write path. Wave 2A obnovil cache-first weather renderer (po SSD migraci RPi se vrátila stará OWM verze — deploy-channel regression, ne code bug); Wave 2B oživil cron sh_weather_yr_bridge_v1 z yr.no, žádné API klíče. Wave 3 udělal z rolety PURE LUX truth (odstraněný short-circuit sh_house_state='home_normal', který občas držel roletu nahoře i v noci). Wave 6 propagoval enum guard na desktop v7_1920 + v7_2880. Wave 4A → 4B-6 Config Center: DASHBOARD_CONFIG_SCHEMA + writeVarValidated + writeCfg dispatcher, růst z 18 entries na 128+ (min/max/enum/crossField/softWarnings), pokrývá morning/heating/audio/light/occupancy/roleta/energy/scenes. Aktuálně soft-reject, po 24h soaku hard-mode flip. Final RPi sha e3216213…. Číst delší post →
2026-05-14
FIX
Memory pressure — 1 var + 6 live patchů + bathroom audio konečně odjelo z koupelny
Druhá půle dne 14. května: po dopoledním úklidu RPi/HAOS přišly živé zásahy do Homey. Diagnostika potvrdila 1 295 cron fires/h napříč 67 cron flows — HomeyScript app cyklovala na 125 MB threshold, watchdog ji restartoval 38× za den, a vacancy guardian běžel reálně jen 5× za 24h místo očekávaných 288×. To vysvětlilo dlouhotrvající stížnost: koupelna která zůstala svítit / s rádiem po opuštění místnosti. Nasazeno 6 live změn v jednom dni — všech 6 bit-perfect SHA verify, žádný flow/dashboard/device touch: (1) nová proměnná sh_vacancy_guardian_heartbeat_ts, (2) sh_room_vacancy_guardian_v1 v1.1 (heartbeat at start + stuck-audio-reset), (3-7) pět throttle patchů (TTS skip-empty-queue, Kaffe time-window, Wake/Score sleep-window). Měřitelný win do 9 minut: guardian dokončil první run za 40+ min a vyresetoval stuck sh_audio_current_mode='radio_bathroom' z ranní rutiny na idle. Pět R2-failsafe sandbox testů (T22-T26), staleness pair-logic OK/WARN/CRASH_MID_RUN/CRON_NOT_FIRING klasifikátor. Číst delší post →
2026-05-14
INFRASTRUCTURE
Sandbox 24/7 + kiosk Phase E + dashboard cache retry — den úklidu
Den, kdy se RPi/HAOS přestal hrát na servisního pomocníka a stal se z něj plnohodnotná testovací brána. Node.js 24.14 nainstalován do core_ssh addonu s persistencí přes apks config. Python sandbox runner nasazen 24/7 přes HA shell_command + automation každou hodinu — gate DEPLOY_GATE_OPEN, testy 20/20 PASS, replay 13/13. Když HA Core container Node neměl, runner přepsán do Pythonu (F1-B). Dashboard cache retry fix v2.1 — transient 417/0 errory teď retry 3× s backoffem místo crashe; error rate spadl z 5 % na 1.8 %. Kiosk Phase E LIVE — RPi kiosek (192.168.1.122) má teď cache→Homey REST→localStorage fallback chain s viditelným badge (● CACHE / ◐ CACHE OLD / ○ HOMEY / ○ LOCAL). Vše rebuilt fresh ze samotného kiosk HTML bez PC reference. 0 Homey writes, 0 dashboard edits, 0 device renames. Číst delší post →
2026-05-12
ARCHITEKTURA
Tři zdroje počasí → jeden. LOCATION_TIME_GUARD den.
Briefing recitoval 13 °C zatímco venku bylo 6 °C. V 3:03 ráno se sám spustil než zazvonil budík. A systém uměl říct „dobré ráno" v noci. Audit odhalil tři paralelní zdroje počasí (yr.no + OpenWeatherMap + Open-Meteo) ve dvou různých městech (Semily / Praha) a hardcoded fallback teplotu. Konsolidace: yr.no jako jediný zdroj (lokalita Semily 50.6012/15.495), nový skript sh_weather_yr_bridge_v1 (cron 10 min → 22 vars), centrální vrstva sh_location_time_context_v1 (master JSON pro lokaci+čas+phase, refresh 5 min). Smazáno: Open-Meteo fetcher, OWM HTTP fetch v context_full (−2 868 znaků dead code), sh_owm_api_key, hardcoded GPS v dashboards. Greeting guard v briefingu: phase=night → „Vítej, Luďku" místo „Dobré ráno". Phase guard v morning_brain blokuje motion-trigger v noci bez alarmu. Číst delší post →
2026-05-05
INFRASTRUCTURE
Sheets cleanup + dashboard fix — den po rozbité rutině
Ranní rutina v pondělí nezačala. Začalo to fixem jednoho bugu (sleep_window blokoval routing po budíku) a skončilo úklidem celé Google Sheets vrstvy. 28 listů → 25, 6 commitů, Apps Script v18 → v21. Score producer (existoval, nikdo ho nečetl) napojený na brain. Tři chybějící dashboard endpointy přidané (Lux/Battery/Morning Timeline). Sensor registry pro adaptabilní budoucí čidla. DeviceInventory producer který nikdy neposílal. Architektonický bug v logEvent lib (default sheet:'EventLog' forsoval všechny event_type events do jednoho listu) odhalený. Číst celý postmortem →
2026-05-02
FEATURE
Dům, který sám sebe pozoruje — nová vrstva vědomí
Přibyly dvě „pozorovatelské" vrstvy. První každou minutu vyhodnocuje, v jakém režimu se domov právě nachází (klidný spánek, noční výlet na záchod, ranní probouzení, někdo odchází…) — a u každého odhadu má skóre jistoty od 0 do 100. Druhá vrstva každých 5 minut kontroluje, že všechny klíčové programy běží, a u jednoznačně-bezpečných problémů je sama opraví. Při kritickém problému pošle push notifikaci na telefon. Číst delší vysvětlení →
2026-05-02
FEATURE
Pohotovostní vypínač — jediný přepínač pro všechno automatické
Nová proměnná sh_kill_switch se dvěma stavy. Když ji přepnu na yes, šest klíčových programů (rozhodovací mozek, noční světla, predikce, ranní rutina, hlídka, vytápění) se při příštím spuštění zastaví na začátku a nic neudělají. Cesta k jistotě, že lidský operátor má vždy poslední slovo.
2026-05-02
FIX
Ranní rutina se nespustila — uživatel vstal před budíkem
V sobotu ráno (budík 5:15) uživatel vstal v 3:08, procházel mezi pokoji, ale rutina nikdy neběžela. Příčina: stará logika čekala buď na budík, nebo na dvojí pohyb v jedné zóně do 3 minut. Při procházení mezi zónami senzory zachytily pohyb v každé jen jednou. Mezitím nezávislý detektor probuzení hlásil „silně ano" ve 4 zónách — ranní rutina ten signál ale neposlouchala. Oprava: třetí spouštěcí cesta — silný multi-zóna signál + 10 minutový kompromis filtruje noční výlety na záchod.
2026-05-02
FIX
LED pásek a stolní lampa svítily celou noc
Příčina: program, který se každou půlhodinu probudí a předvídá co dům potřebuje, neměl podmínku „pokud uživatel spí, nezapínej nic". V 23:00 i v 00:30 napadlo „je tma + někdo doma → noční dotyk světla", a lampa se rozsvítila. Tři řádky kódu — sleep guard přidán do dvou míst (predikce + záchranná logika). Příští noc se nic samo nerozsvítí.
2026-05-02
FEATURE
SNZB-06P openspace + integrace ložnice/koupelna senzorů
Tři radarové senzory přítomnosti (otevřený prostor, ložnice, koupelna) — radar vidí osobu i v klidu, na rozdíl od PIR pohybového. Hlavní z nich přejmenován na Sensore di Presenza SNZB-06P openspace kvůli jasnému rozlišení. Ložnice + koupelna teď přidány do logu zónové aktivity (před tím se logoval jen openspace). Atomický rename: zařízení + mapa + 7 skriptů + záloha před/po. Smoke test prošel.
2026-04-29
FEATURE
Dashboard V7.5 layout editor
Drag-and-drop tile reorder + native CSS resize via corner handle + per-page localStorage persistence. Ctrl+E toggles edit mode. 3 floating buttons (🎨 Edit / 💾 Save / ↻ Reset). MutationObserver chrání proti bounce-back při render cycles.
- Stable tile identity (id or hash of textContent)
- Multi-parent aware (handles tiles spread across grid containers)
- Auto-save on drop (no need to click Save for reordering)
2026-04-29
FIX
Bug E — priority engine ghost auto-cleanup
sh_priority_active='tts' stuck po crashi HomeyScript app během 10s delay v reset flow. Fix: timestamp na claim + stale check > 60s + nový cron SH – Priority – Stale Cleaner. Validator score 94 → 100, Brain Guardian 92 → 97.
2026-04-29
DEPLOY
Brain Guardian deployment
5 scripts + 1 flow + 12 vars deployed. Top-level supervisor: sh_state_validator (drift detection), sh_brain_guardian (orchestrator), sh_release_guard (deploy gate). První live finding: detekoval priority_active=tts ghost (Bug E nahoře).
2026-04-29
FIX
Audio race condition fix — bathroom misroute
Po comfort_suggest TTS se sám spustil bathroom radio i bez user accept. Root cause v sh_tts_resume_exec_v1 fallback bez prev_playing guardu. Fix v1.8 přidal explicit guard. Stuck sh_audio_current_mode='radio_bathroom' reseten.
2026-04-29
FEATURE
Dashboard V7 polish — V7.1 → V7.5.1
8 micro-sprintů: Zones bottom strip, AI grid 2-col, Ložnice tile dedupe, status chips wired, Settings collapse, Burza 2→6 coins, Heating right rail rebuild, AI 4 system cards, layout editor.
2026-04-29
PERF
Memory leak partial mitigation
3 cron flows zpomalené 1 → 2 min (Dashboard Refresh, Wake Scorer, Audio Pipeline WD). Saves 2 160 runs/den. Manual app restart 143 → 99 MB. Watchdog drží <125 MB threshold.
2026-04-29
FIX
Vacuum Giuseppe rename revert
Device name byl omylem změněn na 'ano' (UUID stable). 4 sw consumers silently fail. Revert via API PUT name='Giuseppe'. Reset ghost vars. Live test: router can find device, state stays idle.
2026-04-29
DEPLOY
Morning routine pipeline rebuild
Nový request type morning_open_space_gentle. ON Sektorka1 + Stul Jidelna1 (warm dim 0.4) + OFF Led pasek postel (sleep nightlight deactivace). Motion branch teď symetrická s alarm/fallback. Live test 7/7 PASS.
2026-04-26
FIX
UUID re-pair orphans — silent fail
Door/Window Sensor Jidelna1 dostal nové UUID po výměně baterky. Tři flows osiřely, čistička se nevypínala při otevření okna. Diagnose + bulk swap fix. Memory entry pro budoucnost.
2026-04-21
FIX
Cold-start anti-cycling bug — heating
Kotel sepnul jednou, vypnul, pak nikdy víc. Anti-cycling guard držel hold_off_180s_left forever kvůli NaN propagation. Defensive coding gone wrong, fix v1.2.
2026-04-29
ROADMAP
Release Governance V2 — plánovaná etapa
Canary deploys (1 zóna na 24h před plošným nasazením), auto-rollback při score < 80, sanity checks před PUT (přečíst flow tree, validate DAG, simulate edge cases), drift gates (Brain Guardian musí dovolit). Backlog Q3 2026.
2026-04-29
ROADMAP
Predictive Heating · ML model
Plán pro 2026/2027: anomaly detection na event sequences, predikce occupancy, integrace electricity tariff (NT/VT) do scheduler decision. Aktuálně rule-based scheduler s 3 AI vrstvami (preWake / weather / occupancy bonus).