Add TOU SOC handling for battery priority in passive mode
All checks were successful
deploy / deploy (push) Successful in 28s
test / smoke-test (push) Successful in 6s

- Introduced `effective_sell_price_czk_kwh` to `ControlSetpoints` for managing battery usage based on sell price.
- Implemented logic in `_deye_passive_tou_battery_soc_pct` to set TOU SOC to 100% when conditions favor battery usage.
- Updated tests to validate new behavior for negative sell prices and planned charging scenarios.
- Enhanced documentation to clarify TOU SOC behavior in passive mode.
This commit is contained in:
Dusan Vojacek
2026-04-19 12:49:04 +02:00
parent d5dcf33e13
commit d3fd8b139a
3 changed files with 91 additions and 5 deletions

View File

@@ -73,7 +73,9 @@ Solver předvybírá sloty pro nabíjení a export-vybíjení (`_select_charge_s
| **178** peak shaving | 48 (PASSIVE) | 48 (PASSIVE) | **32** (SELL) | 48 (PASSIVE) |
| **143** export limit | max export W z DB | max export W z DB | max export W z DB | max export W z DB |
| **141** energy mode | 0 | 0 | 0 | 0 |
| **TOU SOC** | min_soc_pct | min_soc_pct | reserve_soc_pct | min_soc_pct |
| **TOU SOC** (reg 166+) | viz níže | min_soc_pct | reserve_soc_pct | min_soc_pct |
**PASSIVE TOU SOC % (home-01 / Deye):** EMS ukládá do řádku time pointu procento, které na zařízení řídí **prioritu baterie vs. přetok FVE do sítě** (viz firmware / instalace). Je-li zapsané procento **níž než skutečný SoC**, přebytek tíhne do sítě; při **záporné efektivní vykupní** (`effective_sell_price` ze slotu) nebo při **kladném `battery_setpoint_w`** (plánované nabíjení) EMS nastaví **100 %** (signál „využij baterii naplno“). **`asset_battery.max_soc_percent`** (typicky 95) je **jiný účel**: horní limit pro **plánovač / denní provoz v % SoC** (komfort, degradace, rezerva výrobce), **ne** časové „do kdy“ ani hodnota zapisovaná do tohoto TOU při této priorité. Jinak zůstane **`min_soc_percent`**.
**Jak funguje pass-through fyzicky:**
@@ -116,7 +118,7 @@ Příklad v 14:18: blok 1 má čas **1415**, blok 2 čas **1430** mezi 14:15
| Režim | Výkon (W) | SOC min (reg 166+) | Grid charge |
|-------|-----------|---------------------|-------------|
| **PASSIVE** | `max_discharge_a × 51,2` | **`min_soc_percent`** z DB | NE |
| **PASSIVE** | `max_discharge_a × 51,2` | `_deye_passive_tou_battery_soc_pct`: při neg. vykupní / plánovaném nabíjení = **100 %**, jinak **`min_soc_percent`** | NE |
| **SELL** | `max_discharge_a × 51,2` | **`reserve_soc_percent`** z DB | NE |
| **CHARGE** | `battery_watts_to_amps(battery_w, max_charge_a) × 51,2` | min(95, cíl SoC z plánu nebo 80) | ANO |