feat(telemetry): idle-skip zápisů — neukládat 1min řádky idle zařízení
Slabý server: dict (tabulka, asset_id) → (signature, last_stored_at); _idle_skip ukládá vždy při změně signature, aktivitě, po startu procesu a heartbeat po > 840 s (každý 15min bucket má ≥ 1 řádek). - telemetry_ev_charger: aktivní = status != 'available' nebo power > 50 W; signature (status, výkon na 100 W) - telemetry_pool_pump: aktivní = is_on nebo power > 5 W (ON řádky 1/min kvůli on_minutes); signature (is_on, výkon na 10 W) - telemetry_loxone_sensor: jen změna hodnoty ≥ 0.1 / heartbeat - telemetry_heat_pump: aktivní = mode != 'off' nebo defrost; signature (mode, teploty na 0.2 °C) - telemetry_inverter: beze změny — NIKDY se nepřeskakuje (audit Wh split, baseline, SoC plánovače) Detekce příjezdu/odjezdu EV: previous_status přesunut z posledního řádku DB do in-memory _EV_LAST_STATUS (po startu seed z vw_latest_ev_charger — přechod během výpadku se pozná, prázdná DB nevystřelí falešný příjezd); fn_ev_session_transition se volá jen při změně statusu. PoolCard: staleness práh 5 → 16 min (> heartbeat 840 s). Docs: telemetry.md sekce „Idle-skip zápisů" (pravidla pro nové čtecí dotazy: sumy/gapfill, ne avg přes řádky), planning-changelog (TUV °C/min). Testy: tests/test_telemetry_idle_skip.py — _idle_skip jednotkově + EV arrival/departure přežije skip i restart procesu (303 passed). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -5,6 +5,28 @@ Formát: **datum (ISO)** · stručný důvod · soubory · chování / ověřen
|
||||
|
||||
---
|
||||
|
||||
## 2026-06-12 — idle-skip telemetrie: TUV delta normalizovaná na °C/min
|
||||
|
||||
**Problém:** telemetry_collector nově přeskakuje 1min zápisy idle zařízení
|
||||
(heartbeat 840 s — viz `telemetry.md`, sekce Idle-skip zápisů). Vstupy
|
||||
plánovače čtené z těchto tabulek nesmí předpokládat hustou 1min řadu.
|
||||
|
||||
**Mechanismus:** `fn_update_tuv_usage_stats` (R__018) počítá deltu TUV jako
|
||||
`(temp − lag(temp)) / gap_min` (°C/min, mezery > 30 min vyloučeny) — pro
|
||||
hustá 1min data numericky identické s původním per-row LAG; po idle-skip bez
|
||||
až 14× nadhodnocení delty. Ostatní vstupy solveru (poslední TUV teplota v
|
||||
`fn_planning_site_context`, poslední EV status v `fn_load_planning_slots_full`,
|
||||
baseline stats) pokrývá heartbeat beze změny. Audit: EV/TČ `sum/15` v R__019.
|
||||
|
||||
**Soubory:** `telemetry_collector.py`, `R__018_fn_extended_planning.sql`,
|
||||
`R__019_fn_fill_audit_interval.sql`, `R__097_vw_pool_pump.sql`, `PoolCard.tsx`,
|
||||
`docs/04-modules/telemetry.md`.
|
||||
|
||||
**Ověření:** `tests/test_telemetry_idle_skip.py` (změna/aktivita/heartbeat/
|
||||
start; EV arrival přežije skip i restart procesu); celá sada 303 passed.
|
||||
|
||||
---
|
||||
|
||||
## 2026-06-12 — v2 AKTIVNÍ v produkci + robustnostní trojice „nejistota jako cena"
|
||||
|
||||
**Přepnutí (847015f):** `PLANNING_ENGINE_VERSION` default **v2** v deploy compose; v1 běží
|
||||
|
||||
Reference in New Issue
Block a user