# 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`