# EMS – konsolidovaný seznam TODO Shrnutí otevřených bodů z `docs/06-open-questions.md`, checklistů v modulech a komentářů `TODO` / `TBD` / `[ ]` v repozitáři. Duplicitní témata jsou sloučena; u uvedených řádků jde o stav k poslední synchronizaci se soubory. **Role „kdo řeší“:** *majitel* = vlastník/provoz objektu a smluvní údaje; *programátor* = vývoj EMS; *Loxone programátor* = konfigurace Miniserveru a integrace v Loxone. --- ## Vyřešeno | Popis | |-------| | **Zelený bonus:** přesunuto na `asset_pv_array` (`green_bonus_*`), výpočet `fn_green_bonus_revenue()`, audit_filler (`fn_fill_audit_interval`) počítá bonus z výroby pole; legacy sloupce odstraněny ze `site_market_config` (V018). | | **Rozšířený horizont plánování 96h** (fáze 3a+3b+3c): tabulky `market_price_stats`, `tuv_usage_stats`, funkce `fn_update_market_price_stats`, `fn_update_tuv_usage_stats`, `fn_get_predicted_price` (V022 + `R__018_fn_extended_planning.sql`), joby 14:45 / 00:45. **Aktualizace 2026-04:** ve solveru už není 96h ani váhy 1,0/0,7/0,4 — horizont je **dynamický jen z OTE** (`fn_planning_horizon_end`, `fn_last_effective_ote` v `R__074`), terminal SoC v LP; predikce zůstává pro statistiky / budoucí fáze. | | **Import OTE – robustní provoz:** timeouty + retry/backoff v `price_importer.py`, detailní error kódy v API, fallback D+1 → dnešek, scheduler importů 13:30 / 13:15+13:45+14:15+14:45 / 14:00 / 00:05 (`lifespan.py`). | | **Fail-safe bez OTE dat (legacy):** runtime guard v `control_exporter.py` při `is_predicted_price`; u plánů jen z OTE by flag neměl nastat. Historicky: zákaz exportu v predikovaných slotech ve solveru. | | **Forecast provoz:** refresh každé 2 hodiny (`:05`), konfigurovatelný Open-Meteo horizont (`OPEN_METEO_FORECAST_DAYS`, default 7, clamp 2..16), endpoint pro UI vrací latest-run bez duplicit slotů. | | **Telemetry – výroba FVE:** Registry 672/673/667 jsou **signed** W; `pv_power_w` = max(0,pv1)+max(0,pv2)+max(0,gen) (dashboard); sloupce pv1/pv2/gen ukládají signed pro audit. | | **Ekonomika baterie:** snížení `reserve_soc_percent` na 10 % a `degradation_cost_czk_kwh` na 0.1500 (migrace `V026__battery_economics_tuning.sql`), úpravy objective pro ekonomicky konzistentnější nabíjení/vybíjení. | | **Planning UI operátor akce:** trvale viditelné akce import/forecast/init plan, volba data OTE (dnes/zítra), zobrazení `pv_scarcity_factor` ve stavu plánu. | | **PV delta profil – kalibrace per site:** cutoff a parametry učení jsou v `ems.site_pv_forecast_calibration` (seed výchozí `delta_learn_min_ts` = UTC `2026-04-11T22:00:00Z`); `R__078` / `fn_fill_forecast_accuracy` respektují `learning_eligible` a škrcení. | --- ## Brzké vylepšení (plánování / arbitráž) | Popis | Kde | Kdo | |-------|-----|-----| | **`charge_acquisition` po solve:** druhé kolo — vážený průměr z plánovaných `bc`+`gi` a PV nabíjení místo odhadu z masek před solve; případně jedna iterace solve. Cutoff před 1. exportem už je v SQL. | `R__063_fn_load_planning_slots_full.sql`, `planning_engine.py`; [`planning-arbitrage-accounting.md`](04-modules/planning-arbitrage-accounting.md) §6 | programátor | | **Více levných charge slotů** v masce (N ∝ `energy_to_fill / per_slot_wh`, ne jen cap 6). | `R__063` | programátor | --- ## Budoucí vylepšení (PV kalibrace) | Popis | Kde | Kdo | |-------|-----|-----| | **Telemetry collector** čte Deye reg **145** (solar sell) a **179** (bits0–1 MI cut-off) do `is_export_limited` / `pv_derating_flags`. Volitelné rozšíření API o korigovaný výkon per `pv_array_id` v grafu. | `backend/services/telemetry_collector.py` | programátor | --- ## Fáze 3d – rozšířený horizont (zbývá) | Popis | Kde | Kdo | |-------|-----|-----| | **EV v rozšířeném horizontu** (pravděpodobnost příjezdu, dlouhé deadline) – závisí na Tesla API / rozšíření modelu (dříve „deadline přes 96h“). | `docs/04-modules/planning-extended-horizon.md` | programátor | | **Korekce predikce cen počasím** – potřeba 3+ měsíce korelačních dat. | stejný modul | programátor | --- ## Blokující – nutné před prvním reálným provozem Věci bez kterých nelze bezpečně napojit fyzická zařízení, spustit smysluplný forecast nebo dokončit kritická rozhodnutí před implementací řízení. | Popis | Kde | Kdo | |-------|-----|-----| | Ověřit **GPS** (`latitude`, `longitude`) pro lokalitu `home-01` proti skutečné instalaci – v seedu už jsou vyplněné hodnoty, ale forecast na nich stojí. | `db/migration/V003__seed_site_home01.sql` (`INSERT INTO ems.site`) | majitel (ověření souřadnic) → programátor | | Doplnit **skutečné IP** Waveshare (Deye), obou Teltonika WB, Samsung TČ a **Loxone**; ověřit **Modbus Unit ID** u zařízení. | `db/migration/V003__seed_site_home01.sql` ř. 27–30, 33–36, 39–41, 44–46, 49–52 (TODO komentáře); `docs/04-modules/telemetry.md` ř. 215 (ověření Unit ID) | majitel / instalatér (síť) → programátor (seed nebo `site_endpoint` v DB) | | Ověřit **azimut a sklon** FVE polí A a B proti skutečné instalaci. Seed aktuálně obsahuje `pv-a` 184°/22° a `pv-b` 184°/35° v kompasové konvenci `0=N, 90=E, 180=S, 270=W`. | `db/migration/V003__seed_site_home01.sql` (`asset_pv_array` seed); `docs/04-modules/forecast.md` | majitel / projektant FVE → programátor | | Doplnit **model TČ**, **jmenovitý topný výkon (W)**, **COP rated**, **objem zásobníku TUV**, **odkaz na čidlo TUV** v seedu (`asset_heat_pump` má povinné numerické sloupce – bez platných hodnot nelze konzistentně plánovat / migrovat). | `db/migration/V003__seed_site_home01.sql` ř. 182–200 | majitel (datasheet) → programátor | | **Rozhodnout Teltonika: OCPP 1.6 vs REST API** před implementací EV řízení a sběru. | `docs/06-open-questions.md` ř. 9–10; `docs/04-modules/consumption.md` ř. 184 | majitel + programátor | | **Doplnit přesné Modbus registry** pro Teltonika a Samsung a držet je jako TODO v kódu. Deye čtení a hlavní Deye řízení už jsou implementované přes registry popsané v `modbus-registers.md`; stále ověřit fyzické hodnoty pro konkrétní instalaci. | `docs/04-modules/telemetry.md`; `docs/04-modules/heat-pump.md`; `docs/04-modules/control.md`; `docs/loxone-integration.md`; `backend/services/telemetry_collector.py`; `backend/services/control/exporter_monolith.py` | majitel dodá PDF/šablony → programátor; část ověření s **Loxone programátor** | | Ověřit **Modbus registr Output Power Limit** (curtailment pole A) na Deye SUN-20K. | `docs/04-modules/planning.md` ř. 422 | programátor (+ dokumentace od majitele) | | Doplnit **skutečnou sazbu zeleného bonusu** do `asset_pv_array.green_bonus_czk_kwh` pro `pv-b` (aktuální placeholder: **7.135** Kč/kWh – ověřit ze smlouvy s EG.D). | `db/migration/V017__green_bonus.sql` (seed `pv-b`) | majitel (smlouva) → programátor | | Doplnit **`green_bonus_meter_code`** (EAN zeleného elektroměru) pro `pv-b` v `asset_pv_array`. | `db/migration/V017__green_bonus.sql` / přímá úprava DB | majitel → programátor | | Nastavit **`DISCORD_WEBHOOK_URL`** pro produkční alerty (Modbus mismatch, vyčerpaná verifikace času 62–64, přepnutí provozního režimu včetně SELF_SUSTAIN z mismatch, API, vypršení `valid_until`). | `.env` / `backend/app/config.py` | majitel → programátor | | **Cut-off přepínač** pro mikroinvertory (druhá instalace) – napojit logiku na `ems.cutoff_switch_log` a řízení. | `docs/04-modules/modbus-command-journal.md` | programátor | --- ## Fáze 1 – základní provoz Potřebné pro reálný, stabilní provoz; lze část EMS otestovat bez nich (např. jen DB, část solveru). | Popis | Kde | Kdo | |-------|-----|-----| | **Kurz EUR/CZK:** fixní env vs denní stahování (ČNB) – ovlivní import cen. | `docs/06-open-questions.md` ř. 11–12; `docs/04-modules/market-prices.md` ř. 126; `docs/04-modules/consumption.md` (související ekonomika) | majitel + programátor | | **TUV výkon:** měřitelný příkon vs jen ON/OFF – dopad na baseline a plánování. | `docs/06-open-questions.md` ř. 21–22 | majitel + programátor | | **Pole B (ongrid)** v auditu: sledovat neřízenou výrobu vs ignorovat. | `docs/06-open-questions.md` ř. 23–24; `docs/04-modules/forecast.md` ř. 179 | majitel + programátor | | Filtrovat aktivní nabíječky **dle session** při zápisu setpointů (místo všech schedulable). | `docs/04-modules/control.md` ř. 153–155 (komentář TODO v pseudokódu) | programátor | | Dohodnout **Loxone Virtual Input** názvy a vytvořit je v projektu (soulad s HTTP exportem). | `docs/04-modules/control.md` ř. 222–232, 252 | Loxone programátor + programátor | | **Strategie rozdělení výkonu** mezi 2 nabíječky; chování při **selhání zápisu** jednoho zařízení (rollback?). | `docs/04-modules/control.md` ř. 253–254 | majitel + programátor | | Ověřit **Watchdog / Timer** bloky v konkrétní verzi Loxone Config. | `docs/loxone-integration.md` ř. 258 | Loxone programátor | | **Deye work mode** hodnoty (Self-Consumption, Grid-Charge, Backup) pro SELF_SUSTAIN / přepínání. | `docs/loxone-integration.md` ř. 259; `docs/04-modules/operating-modes.md` ř. 130 | programátor + dokumentace majitele | | Dohodnout zdroj **SoC pro SELF_SUSTAIN** v Loxone (čtení ze střídače vs pevný práh). | `docs/loxone-integration.md` ř. 262 | majitel + Loxone programátor | | **Přístup k logu** přepnutí watchdogu pro EMS po restartu. | `docs/loxone-integration.md` ř. 263 | Loxone programátor + programátor | | Implementace **Loxone watchdog** dle integračního dokumentu. | `docs/04-modules/operating-modes.md` ř. 131; celý `docs/loxone-integration.md` | Loxone programátor + programátor | | **Post-processing min_run/min_stop** TČ po výstupu LP (krátké ON/OFF). | `docs/04-modules/planning.md` ř. 419 | programátor | | **EV:** přesnější než agregát – sladit s `ev1_setpoint_w` / `ev2_setpoint_w` v DB a solveru. | `docs/04-modules/planning.md` ř. 421 | programátor | | **Test solveru** na reálných datech (výkon pro 36h / 144 slotů). | `docs/04-modules/planning.md` ř. 423 | programátor | | **Optimalizace čtení Deye** – jeden blok `read_holding_registers`. | `docs/04-modules/telemetry.md` ř. 216 | programátor | | Ověřit **min_run_duration / min_stop_duration** TČ z dokumentace Samsung. | `docs/04-modules/heat-pump.md` ř. 104 | programátor | | Doplnit **objem zásobníku TUV** pro výpočet doby ohřevu (nad rámec seedu). | `docs/04-modules/heat-pump.md` ř. 107 | majitel → programátor | | **TUV čidlo v Loxone** pro přesnější řízení / baseline. | `docs/04-modules/consumption.md` ř. 185 | Loxone programátor + programátor | | **Bazální spotřeba:** zpřesnit odečítání výkonu TČ/TUV (ON/OFF × čas vs pevný výkon). | `docs/04-modules/consumption.md` ř. 186 | majitel + programátor | | **PostgREST autentizace** (JWT, RLS, …) před produkcí. | `docs/06-open-questions.md` ř. 25–26 | majitel + programátor | | **Zálohování PostgreSQL** (pg_dump cron, replikace, …). | `docs/06-open-questions.md` ř. 27–28 | majitel + programátor | | OTE: poznámka k **sell vs buy raw** u jiných zdrojů než OTE. | `docs/04-modules/market-prices.md` ř. 128 | programátor | | Ověřit **Zoe max AC výkon** (7.4 kW vs podmínky instalace). | `docs/04-modules/ev-charging.md` ř. 281 | majitel + programátor | --- ## Deye řízení – rozšíření | Popis | Kde | Kdo | |-------|-----|-----| | **Reg. 145 (solar sell)** z politiky: při `no_export` / `BLOCK_EXPORT` (a obdobně) zapisovat **145 = 0**, aby šlo tvrdě zakázat přetok **řiditelného** FVE na Deye (`asset_pv_array.controllable = true`); dnes exporter vždy **1**. Vazba na instalaci: `docs/04-modules/operating-modes.md` (ZERO a reg. 145). | `exporter_monolith.write_inverter_setpoints` (+ vstupy z `InverterConfig` / `site_grid_connection`) | programátor | | **Testy reg. 145** vůči journalu (`ems.modbus_command`): očekávaná hodnota při zákazu exportu vs. běžný provoz. | `backend/tests/`; `docs/04-modules/modbus-command-journal.md` | programátor | | **Dvě FVE pole:** UI / provozní poznámka, že **145 = 0** neomezuje **pv-b** (ongrid); celkový export lokality může z pole B dál „unikat“. | `docs/04-modules/operating-modes.md`; `planning.md` (pv_a / pv_b) | majitel + programátor | | **BA81:** přepínat „MI export to Grid cutoff“ pro GEN port při BLOCK_EXPORT přes **reg 179 bits0–1** (masked RMW) pod feature flagem `asset_inverter.deye_gen_microinverter_cutoff_enabled`. | `exporter_monolith.write_inverter_setpoints`; `docs/04-modules/modbus-registers.md` | programátor | --- ## Fáze 2 – rozšíření | Popis | Kde | Kdo | |-------|-----|-----| | **Tesla API:** Tessie vs přímé API. | `docs/04-modules/ev-charging.md` ř. 280 | majitel + programátor | | **UI** pro deadline a target SoC před odjezdem. | `docs/04-modules/ev-charging.md` ř. 283 | programátor | | **Notifikace** při nesplnitelném deadline nabíjení. | `docs/04-modules/ev-charging.md` ř. 284; `docs/04-modules/operating-modes.md` (sekce *Otevřené body* – stale heartbeat) | programátor | | Ověřit **round-trip účinnost** baterie a **odhad SoC Zoe** z energie session na reálných datech. | `docs/04-modules/ev-charging.md` ř. 282, 285 | programátor | | **Kalibrace COP** modelu TČ na 4–6 týdnů historie. | `docs/04-modules/heat-pump.md` ř. 105 | programátor | | **pvlib** vs jednoduchý model FVE; **Solcast** jako alternativa k Open-Meteo. | `docs/04-modules/forecast.md` ř. 178, 180; `docs/06-open-questions.md` ř. 34 | programátor | | **Intraday** OTE ceny. | `docs/06-open-questions.md` ř. 35; `docs/04-modules/market-prices.md` ř. 127 | programátor | | **Sezónní korekce** predikce spotřeby. | `docs/06-open-questions.md` ř. 36; `docs/04-modules/consumption.md` ř. 187 | programátor | | **Více lokalit** – UI a správa. | `docs/06-open-questions.md` ř. 33 | programátor | | **Mobile / PWA notifikace.** | `docs/06-open-questions.md` ř. 37 | programátor | | **Reporting** k dodavateli elektřiny. | `docs/06-open-questions.md` ř. 38 | majitel + programátor | --- ## Architektonická rozhodnutí čekající na odpověď Otázky vyžadující rozhodnutí majitele systému (případně ve spolupráci s integrátory). | Popis | Kde | Kdo | |-------|-----|-----| | Teltonika **OCPP vs REST** (vliv na provoz, údržbu, bezpečnost). | `docs/06-open-questions.md` ř. 9–10 | majitel + programátor | | **EUR/CZK** strategie (fix vs API). | `docs/06-open-questions.md` ř. 11–12; `docs/04-modules/market-prices.md` ř. 126 | majitel + programátor | | **TUV** měření vs aproximace ON/OFF. | `docs/06-open-questions.md` ř. 21–22 | majitel + programátor | | **Audit a plán:** jak nakládat s výrobou **pole B** a zeleným bonusem v reportingu. | `docs/06-open-questions.md` ř. 23–24; `docs/04-modules/forecast.md` ř. 179 | majitel + programátor | | **PostgREST / API bezpečnost** pro produkci. | `docs/06-open-questions.md` ř. 25–26 | majitel + programátor | | **Zálohy a DR** PostgreSQL. | `docs/06-open-questions.md` ř. 27–28 | majitel + programátor | | **Přímý Modbus TCP k TČ** vs řízení přes Loxone jako prostředníka. | `docs/04-modules/heat-pump.md` ř. 106 | majitel + Loxone programátor + programátor | | **pvlib vs jednoduchý** solární model – investice do přesnosti. | `docs/04-modules/forecast.md` ř. 178 | majitel + programátor | | **Rollback / částečný selhání** zápisu setpointů napříč zařízeními. | `docs/04-modules/control.md` ř. 254 | majitel + programátor | | **SoC zdroj** a prahy pro autonomní režimy v Loxone. | `docs/loxone-integration.md` ř. 262 | majitel + Loxone programátor | --- ## Poznámka k údržbě Po vyřešení položky ji aktualizuj v **původním** souboru (smaž nebo přeškrtni `[ ]` / TODO) a zde v `05-todo.md` položku odstraň nebo přesuň do changelogu, ať zůstane jeden zdroj pravdy.