diff --git a/packages/control/bat_all.py b/packages/control/bat_all.py index c1939c2187..150fa4e816 100644 --- a/packages/control/bat_all.py +++ b/packages/control/bat_all.py @@ -400,7 +400,9 @@ def get_charging_power_left_diff(self): # Ausgangsleistung des WR überschreiten. # Wenn der Speicher mit mehr als der erlaubten Entladeleistung entladen wird, muss das # vom Überschuss subtrahiert werden. - charging_power_left = min(required_absolut_discharge_power + base_power, + # Lädt der Speicher, bleibt seine Ladeleistung bei ihm: sie ist der einzige Weg + # zurück auf max_soc und damit aus der Hysterese heraus. + charging_power_left = min(required_absolut_discharge_power + min(0, base_power), absolute_bat_discharge_power) log.debug(f"Erlaubte Entlade-Leistung nutzen {charging_power_left}W") else: diff --git a/packages/control/bat_all_test.py b/packages/control/bat_all_test.py index 4f0a6f7cbe..43e22c27f8 100644 --- a/packages/control/bat_all_test.py +++ b/packages/control/bat_all_test.py @@ -158,9 +158,18 @@ class Params: 400, 90, 0, False, 600), Params(("Mindest-SoC, Hysterese, EV-Vorrang, keine Speichernutzung"), ChargemodeConfigBat(mode="min_soc_bat_mode"), 400, 60, 400, False, hysteresis_discharge=False), - Params(("Mindest-SoC, Hysterese, Speicherentladung, Speichernutzung erlaubt"), + Params(("Mindest-SoC, Hysterese, Speicher lädt, Ladeleistung bleibt beim Speicher"), ChargemodeConfigBat(mode="min_soc_bat_mode", power_discharge=500, power_discharge_active=True), - 400, 60, 900, False, hysteresis_discharge=True), + 400, 60, 500, False, hysteresis_discharge=True), + Params(("Mindest-SoC, Hysterese, Speicher ruht, nur die erlaubte Entladeleistung"), + ChargemodeConfigBat(mode="min_soc_bat_mode", power_discharge=500, power_discharge_active=True), + 0, 60, 500, False, hysteresis_discharge=True), + Params(("Mindest-SoC, Hysterese, Speicher entlädt innerhalb der Entladeleistung"), + ChargemodeConfigBat(mode="min_soc_bat_mode", power_discharge=500, power_discharge_active=True), + -300, 60, 200, False, hysteresis_discharge=True), + Params(("Mindest-SoC, Hysterese, Speicher entlädt mehr als die Entladeleistung"), + ChargemodeConfigBat(mode="min_soc_bat_mode", power_discharge=500, power_discharge_active=True), + -700, 60, -200, False, hysteresis_discharge=True), Params(("Mindest-SoC, Hysterese, Speicherentladung, Speichernutzung erlaubt, Speicher-Sperre aktiv"), ChargemodeConfigBat(mode="min_soc_bat_mode", power_discharge=500, power_discharge_active=True), 400, 60, 0, False, 600, hysteresis_discharge=True),