Files
ems/docs/05-todo.md
Dusan Vojacek 254508fe1a
Some checks failed
CI and deploy / migration-check (push) Failing after 12s
CI and deploy / deploy (push) Has been skipped
dalsi fix
2026-05-25 01:27:33 +02:00

17 KiB
Raw Blame History

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 (two-pass): hotovo — solve_dispatch_two_pass v planning_engine.py (AUTO daily/rolling). planning_engine.py, planning-arbitrage-accounting.md §6
Grid maska B (nejlevnější sloty): hotovo — buy ASC v AM/PM do Wh rozpočtu; cap z ceil(budget/per_slot_wh). R__063
Self-konzistentní filtr B + acquisition bez buy<0: iterativní filtr v R__063 (v12); vážená acquisition pro filtr i charge_acquisition_buy_czk_kwh jen z allow_grid_charge s buy>=0 (záporný OTE buy zůstává allow_charge, ale neřítí exportní marži). Two-pass _recompute_charge_acquisition_from_results také přeskočí buy<0. Ověřit po deploy: two_pass_converged=true na home-01. R__063, planning_engine.py programátor
Večerní export plnou rychlostí v plánu: v18 — push ge_bat z min(max_discharge, max_export) z DB (ne 8000 W). Ověřit na home-01 po deploy. Refactor: planning_engine.py ~3100 řádků → vyčlenit constraints modul. planning_engine.py, docs/planning-changelog.md v18 programátor
KV1 replan timeout (~120 s): ruční/rolling replan občas spadne na timeout; 5. pokus prošel. Profilovat fn_load_planning_slots_full (iterativní filtr) + MILP délku horizontu; případně zkrátit horizont pro test nebo zvýšit limit API. backend replan endpoint, APScheduler programátor
home-01 export při sell<0 (26 slotů): záměrně ne block_export_on_negative_sell (neriditelné PV B + zelený bonus). Plán stále může dávat PV_SURPLUS ~67 kW od ~10:30 když je SoC ~97 %+ — jiná osa než noční grid 4,8 Kč. Review ventilu w_pv_b_vent_neg / nabíjení před exportem, ne stejný fix jako KV1. planning_engine.py, planning-arbitrage-accounting.md programátor

Budoucí vylepšení (PV kalibrace)

Popis Kde Kdo
Telemetry collector čte Deye reg 145 (solar sell) a 179 (bits01 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 ř. 2730, 3336, 3941, 4446, 4952 (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 ř. 182200 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 ř. 910; 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 6264, 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 ř. 1112; 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 ř. 2122 majitel + programátor
Pole B (ongrid) v auditu: sledovat neřízenou výrobu vs ignorovat. docs/06-open-questions.md ř. 2324; 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 ř. 153155 (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 ř. 222232, 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 ř. 253254 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 ř. 2526 majitel + programátor
Zálohování PostgreSQL (pg_dump cron, replikace, …). docs/06-open-questions.md ř. 2728 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 bits01 (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 46 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 ř. 910 majitel + programátor
EUR/CZK strategie (fix vs API). docs/06-open-questions.md ř. 1112; docs/04-modules/market-prices.md ř. 126 majitel + programátor
TUV měření vs aproximace ON/OFF. docs/06-open-questions.md ř. 2122 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 ř. 2324; docs/04-modules/forecast.md ř. 179 majitel + programátor
PostgREST / API bezpečnost pro produkci. docs/06-open-questions.md ř. 2526 majitel + programátor
Zálohy a DR PostgreSQL. docs/06-open-questions.md ř. 2728 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.