From 405e832f8debae1457fbec4928eededb9dba55c8 Mon Sep 17 00:00:00 2001 From: Dusan Vojacek Date: Sun, 3 May 2026 22:46:16 +0200 Subject: [PATCH] doplneni dokumentace provozcnih rezimu --- docs/04-modules/provozni-rezimy-checklist.md | 289 +++++++++++++++++++ 1 file changed, 289 insertions(+) create mode 100644 docs/04-modules/provozni-rezimy-checklist.md diff --git a/docs/04-modules/provozni-rezimy-checklist.md b/docs/04-modules/provozni-rezimy-checklist.md new file mode 100644 index 0000000..30d8135 --- /dev/null +++ b/docs/04-modules/provozni-rezimy-checklist.md @@ -0,0 +1,289 @@ +# Provozní režimy EMS - praktický přehled + +Tenhle dokument je zkrácený provozní cheat sheet. Cíl je jednoduchý: + +- rychle poznat, co EMS v daném slotu dělá +- umět to porovnat s `planning_interval` +- ověřit to na live registrech Deye a ve FE + +## 1. Co je zdroj pravdy + +- EMS provozní režim lokality: `ems.site_operating_mode.mode_code` +- aktivní plán: `ems.planning_interval` +- fyzická konfigurace invertoru: `asset_inverter` + `site_grid_connection` +- live stav Deye: registry 108, 109, 141, 142, 143, 145, 178, 340 + +Když něco nesedí, porovnávej vždy v tomto pořadí: + +1. `planning_interval` +2. `control/registers` na FE +3. `modbus_command` journal + +## 2. EMS režimy lokality + +### AUTO + +Normální provoz. EMS bere sloty z `planning_interval` a podle nich řídí Deye, EV, TČ a signály. + +V AUTO se pak mohou objevit sloty s různým exportním záměrem: + +- `PV_SURPLUS` +- `BATTERY_SELL` +- `NONE` + +### SELF_SUSTAIN + +Bezpečný provoz bez obchodní logiky. + +- Deye fyzicky běží v PASSIVE +- baterie se nechává pro vlastní spotřebu +- export je jen nouzový ventil, pokud je potřeba kvůli feasibility + +### CHARGE_CHEAP + +- nabíjení ze sítě +- export se nepoužívá +- fyzicky CHARGE + +### PRESERVE + +- baterie je uzamčená +- žádné nabíjení ani vybíjení +- fyzicky PASSIVE + +### MANUAL + +- EMS setpointy nezapisuje +- vše je ruční řízení + +## 3. Tvoje 5 provozních archetypů + +### 1. Standardní režim s přetokem + +Co tím myslíme: + +- baterie se normálně nabíjí i vybíjí podle plánu +- přetok do sítě je povolený +- exportní limit je jen tvrdý site / inverter cap +- když je baterie plná, přebytek FVE jde do sítě + +Jak to je v implementaci: + +- `export_mode = PV_SURPLUS` +- `export_limit_w = hard cap` +- `solar_sell = 1` +- `deye_physical_mode = PASSIVE` +- v PASSIVE se pro exportní slot typicky použije `108 = 0`, `109 = max` + +Poznámka: + +- exportní limit se už netipuje z forecastu +- neomezuješ tedy výkon do sítě podle předpovědi, jen podle hard capu + +### 2. Standardní režim s vypnutým přetokem + +Co tím myslíme: + +- `solar_sell = false` +- přebytek FVE se nesmí posílat do sítě +- jakmile je baterie plná, FVE se utlumí + +Jak to je v implementaci: + +- tohle není samostatný fyzický Deye režim +- většinou jde o kombinaci: + - `reg 143 = 0` nebo site `no_export` + - případně `export_ban = true` a `reg 145 = 0` +- fyzicky to pořád bývá PASSIVE + +Poznámka: + +- tohle je důležité ověřovat na `reg 143` a `reg 145`, ne jen na `grid_setpoint_w` + +### 3. Prodej přebytku do sítě bez nabíjení baterie + +Co tím myslíme: + +- baterie není cílem +- nechci ji nabíjet +- chci prodávat celou výrobu do sítě + +Jak to je v implementaci: + +- `export_mode = PV_SURPLUS` +- `solar_sell = 1` +- `battery charge A = 0` +- `export_limit_w = hard cap` + +Použití: + +- vhodné, když je výkupní cena vysoká +- baterii chceš šetřit na jiný slot + +### 4. Šetření baterie + +Co tím myslíme: + +- když je kupní cena nízká +- nechci brát energii z baterie +- raději budu kupovat ze sítě + +Jak to je v implementaci: + +- `battery discharge A = 0` +- fyzicky PASSIVE +- baterie se nevybíjí, ale podle slotu se může pořád nabíjet nebo držet + +Poznámka: + +- tohle je jiné než SELL +- tady jen chráníš baterii, neprodáváš ji + +### 5. Aktivní prodej do sítě z baterie + +Co tím myslíme: + +- `selling first` +- baterie prodává do sítě plným výkonem, co dovolí střídač / baterie / síť + +Jak to je v implementaci: + +- `export_mode = BATTERY_SELL` +- `deye_physical_mode = SELL` +- `reg 142 = 0` +- `reg 178 = 32` +- `reg 109` na max, `reg 108 = 0` + +## 4. Další režimy, které v praxi existují + +### CHARGE_CHEAP + +- nabíjení ze sítě +- export vypnutý +- fyzicky CHARGE + +### SELF_SUSTAIN + +- vlastní spotřeba +- fyzicky PASSIVE +- export jen jako nouzový ventil + +### PRESERVE + +- baterie uzamčená +- žádné řízení baterie + +### MANUAL + +- EMS nezasahuje + +## 5. Registry, které má smysl kontrolovat + +### 108 + +Max charge current. + +### 109 + +Max discharge current. + +### 142 + +Limit control: + +- `0` = selling first +- `1` = zero export to load +- `2` = zero export to CT + +### 143 + +Export cap. + +- tvrdý site / inverter limit +- neforecastuje se + +### 145 + +Solar sell: + +- `1` = povoleno +- `0` = zakázáno + +### 178 + +Bitové pole: + +- bits 4-5 = peak shaving switch +- bits 0-1 = GEN export cut-off u BA81 + +### 340 + +Max solar power pro řízenou FVE A. + +- není to exportní cap +- je to strop výroby pole A + +## 6. Co kontrolovat na FE + +### Planning page + +Zkontroluj: + +- `deye_physical_mode` +- `grid_setpoint_w` +- `export_limit_w` +- `export_mode` +- `deye_gen_cutoff_enabled` +- `effective_buy_price` +- `effective_sell_price` + +### Control panel + +Na živém panelu porovnej: + +- reg 142 +- reg 143 +- reg 145 +- reg 178 + +Reg 143 musí být vidět jako hard cap. + +## 7. Rychlá kontrola nesrovnalostí + +1. Najdi slot v `Planning` +2. Podívej se na: + - `battery_setpoint_w` + - `grid_setpoint_w` + - `export_limit_w` + - `export_mode` + - `deye_physical_mode` +3. Otevři `ControlPanel` +4. Porovnej live registry: + - 142 + - 143 + - 145 + - 178 +5. Podívej se do `modbus_command` + +## 8. Co je v implementaci důležité vědět + +Tady jsou dva praktické detaily: + +- `export_limit_w` se bere jako hard cap z lokality / invertoru +- export se už netipuje z forecastu + +To znamená: + +- při `PV_SURPLUS` se má pustit maximum, které dovoluje distribuce a HW +- při `BATTERY_SELL` se použije SELL a prodej z baterie +- při běžném importu / šetření baterie se exportní logika nemá „uhádnout“ z ceny nebo forecastu + +## 9. Kde hledat v kódu + +- plánování: `backend/services/planning_engine.py` +- mapování plánu na setpointy: `backend/services/control/setpoints.py` +- zápis Deye: `backend/services/control/inverter.py` +- live registry: `backend/app/routers/sites.py` +- FE plánování: `frontend/src/pages/Planning.tsx` +- FE live registry: `frontend/src/components/ControlPanel.tsx` +