fix discharge battery
Some checks failed
CI and deploy / migration-check (push) Failing after 18s
CI and deploy / deploy (push) Has been skipped

This commit is contained in:
Dusan Vojacek
2026-04-19 23:46:16 +02:00
parent e3776226a4
commit 7f3b0957cc
4 changed files with 19 additions and 24 deletions

View File

@@ -1383,14 +1383,13 @@ def get_deye_mode(setpoints: ControlSetpoints) -> str:
záporný export z portu sítě a zároveň **|battery_w| ≥ |grid_setpoint_w|** (výdej z
baterie není menší než plánovaný čistý export). Pak Deye „selling first“ (reg. 142=0).
- **PASSIVE** — všude jinde: přetok FVE do sítě / do baterie řeší reg. **108** (nabíjení),
**109** (vybíjení, škálované podle plánu), **142** dle ``deye_zero_export_mode`` instalace,
**145** solar sell. Žádné odhady PV vs. load v této funkci.
- **PASSIVE** — všude jinde: reg. **108** / **109** na **max. proud** invertoru; přetok FVE / chování
vůči zátěži drží **142** dle ``deye_zero_export_mode``, **TOU výkon** z plánu, **145** solar sell.
- **CHARGE** — nabíjení ze sítě (``battery_w`` > 500 a ``grid_setpoint_w`` > 200).
``battery_w=None`` (SELF_SUSTAIN) → bat_w 0 → PASSIVE zde; plné 108/109 řeší
``self_sustain_local_use`` v ``write_inverter_setpoints``.
``battery_w=None`` (SELF_SUSTAIN) → bat_w 0 → PASSIVE zde; **108/109 max** stejně jako u běžného
PASSIVE v ``write_inverter_setpoints`` (viz ``self_sustain_local_use`` pro TOU SOC).
"""
grid_w = int(setpoints.grid_setpoint_w or 0)
bat_w = 0 if setpoints.battery_w is None else int(setpoints.battery_w)
@@ -1476,16 +1475,12 @@ async def write_inverter_setpoints(
charge_a = int(inv.max_charge_a)
discharge_a = int(inv.max_discharge_a)
else:
# PASSIVE: škáluj 108/109 podle |battery_w| — ne plný max při malém setpointu z LP.
if bat_w > 0:
charge_a = battery_watts_to_amps(bat_w, inv.max_charge_a)
discharge_a = 0
elif bat_w < 0:
charge_a = 0
discharge_a = battery_watts_to_amps(bat_w, inv.max_discharge_a)
else:
charge_a = 0
discharge_a = 0
# PASSIVE (AUTO): plný strop 108/109 — stejná idea jako SELF_SUSTAIN.
# Dříve škálování podle |battery_w| z LP usekávalo fyzický výkon baterie (např. 23 A při
# ~1,2 kW plánu) a velká akumulace pak neuměla rychle doplnit síť při nárazové zátěži.
# Ekonomiku a směr toku drží TOU časové body (výkon W / SOC %) + režim 142/178, ne reg. 108/109.
charge_a = int(inv.max_charge_a)
discharge_a = int(inv.max_discharge_a)
zero_exp_mode = int(inv.deye_zero_export_mode or 1)
selling_mode = 0 if deye_mode == "SELL" else zero_exp_mode