doplneni dokumentace provozcnih rezimu

This commit is contained in:
Dusan Vojacek
2026-05-03 22:46:16 +02:00
parent e8eb867a2a
commit 405e832f8d

View File

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