From 52a8bd705105e2eecd6c5bc6c4d7f29b655b9c8a Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Wed, 27 May 2026 11:28:14 +0200 Subject: [PATCH 1/7] erlaubte Entladeleistung ignorieren wenn aktive Speichersteuerung eingestellt wurde --- packages/control/bat_all.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/control/bat_all.py b/packages/control/bat_all.py index 990f9419fb..dc9b3fe2be 100644 --- a/packages/control/bat_all.py +++ b/packages/control/bat_all.py @@ -386,7 +386,9 @@ def _get_charging_power_left(self): # Speicher darf wegen Hysterese bis min_bat_soc entladen werden. else: if self.data.set.power_limit is None: - if config.bat_power_discharge_active: + active_bat_control = (self.data.config.bat_control_permitted and + self.data.config.bat_control_activated) + if config.bat_power_discharge_active and not active_bat_control: # Wenn der Speicher mit mehr als der erlaubten Entladeleistung entladen wird, muss das # vom Überschuss subtrahiert werden. charging_power_left = config.bat_power_discharge + self.data.get.power @@ -402,7 +404,9 @@ def _get_charging_power_left(self): else: self.data.set.hysteresis_discharge = True if self.data.set.power_limit is None: - if config.bat_power_discharge_active: + active_bat_control = (self.data.config.bat_control_permitted and + self.data.config.bat_control_activated) + if config.bat_power_discharge_active and not active_bat_control: # Wenn der Speicher mit mehr als der erlaubten Entladeleistung entladen wird, muss das # vom Überschuss subtrahiert werden. charging_power_left = config.bat_power_discharge + self.data.get.power From 21520ffb78f50c685bd0c8d9dbec41eca33d228f Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Wed, 27 May 2026 11:49:02 +0200 Subject: [PATCH 2/7] remove bat_control_permitted --- packages/control/bat_all.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/control/bat_all.py b/packages/control/bat_all.py index 180925f1ac..8455ef66f0 100644 --- a/packages/control/bat_all.py +++ b/packages/control/bat_all.py @@ -385,9 +385,7 @@ def _get_charging_power_left(self): # Speicher darf wegen Hysterese bis min_bat_soc entladen werden. else: if self.data.set.power_limit is None: - active_bat_control = (self.data.config.bat_control_permitted and - self.data.config.bat_control_activated) - if config.bat_power_discharge_active and not active_bat_control: + if config.bat_power_discharge_active and not self.data.config.bat_control_activated: # Wenn der Speicher mit mehr als der erlaubten Entladeleistung entladen wird, muss das # vom Überschuss subtrahiert werden. charging_power_left = config.bat_power_discharge + self.data.get.power @@ -403,9 +401,7 @@ def _get_charging_power_left(self): else: self.data.set.hysteresis_discharge = True if self.data.set.power_limit is None: - active_bat_control = (self.data.config.bat_control_permitted and - self.data.config.bat_control_activated) - if config.bat_power_discharge_active and not active_bat_control: + if config.bat_power_discharge_active and not self.data.config.bat_control_activated: # Wenn der Speicher mit mehr als der erlaubten Entladeleistung entladen wird, muss das # vom Überschuss subtrahiert werden. charging_power_left = config.bat_power_discharge + self.data.get.power From 2696fb27ca5dda46ce4dfc5622b1de43753bbab6 Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Fri, 29 May 2026 11:19:07 +0200 Subject: [PATCH 3/7] improve passive bat control --- packages/control/bat_all.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/control/bat_all.py b/packages/control/bat_all.py index 8455ef66f0..356a0834ae 100644 --- a/packages/control/bat_all.py +++ b/packages/control/bat_all.py @@ -385,7 +385,13 @@ def _get_charging_power_left(self): # Speicher darf wegen Hysterese bis min_bat_soc entladen werden. else: if self.data.set.power_limit is None: - if config.bat_power_discharge_active and not self.data.config.bat_control_activated: + # Aktive Steuerung nicht konfiguriert oder + # Aktive Steuerung + Preisgrenze aktiv + Grenze nicht unterschritten + # -> dann erlaubte Speicherentladeleistung addieren + power_discharge_allowed = (self.data.config.bat_control_activated is False or + (self.data.config.power_limit_condition == BatPowerLimitCondition.PRICE_LIMIT.value and + self.data.set.power_limit is None)) + if config.bat_power_discharge_active and power_discharge_allowed: # Wenn der Speicher mit mehr als der erlaubten Entladeleistung entladen wird, muss das # vom Überschuss subtrahiert werden. charging_power_left = config.bat_power_discharge + self.data.get.power @@ -401,7 +407,13 @@ def _get_charging_power_left(self): else: self.data.set.hysteresis_discharge = True if self.data.set.power_limit is None: - if config.bat_power_discharge_active and not self.data.config.bat_control_activated: + # Aktive Steuerung nicht konfiguriert oder + # Aktive Steuerung + Preisgrenze aktiv + Grenze nicht unterschritten + # -> dann erlaubte Speicherentladeleistung addieren + power_discharge_allowed = (self.data.config.bat_control_activated is False or + (self.data.config.power_limit_condition == BatPowerLimitCondition.PRICE_LIMIT.value and + self.data.set.power_limit is None)) + if config.bat_power_discharge_active and power_discharge_allowed: # Wenn der Speicher mit mehr als der erlaubten Entladeleistung entladen wird, muss das # vom Überschuss subtrahiert werden. charging_power_left = config.bat_power_discharge + self.data.get.power From 82dff28c59032b9c5bb0f0f6d843dab55a679bf5 Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Fri, 29 May 2026 11:24:04 +0200 Subject: [PATCH 4/7] fix identation --- packages/control/bat_all.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/control/bat_all.py b/packages/control/bat_all.py index 356a0834ae..cb87d95c1f 100644 --- a/packages/control/bat_all.py +++ b/packages/control/bat_all.py @@ -389,8 +389,9 @@ def _get_charging_power_left(self): # Aktive Steuerung + Preisgrenze aktiv + Grenze nicht unterschritten # -> dann erlaubte Speicherentladeleistung addieren power_discharge_allowed = (self.data.config.bat_control_activated is False or - (self.data.config.power_limit_condition == BatPowerLimitCondition.PRICE_LIMIT.value and - self.data.set.power_limit is None)) + (self.data.config.power_limit_condition == + BatPowerLimitCondition.PRICE_LIMIT.value and + self.data.set.power_limit is None)) if config.bat_power_discharge_active and power_discharge_allowed: # Wenn der Speicher mit mehr als der erlaubten Entladeleistung entladen wird, muss das # vom Überschuss subtrahiert werden. @@ -411,8 +412,9 @@ def _get_charging_power_left(self): # Aktive Steuerung + Preisgrenze aktiv + Grenze nicht unterschritten # -> dann erlaubte Speicherentladeleistung addieren power_discharge_allowed = (self.data.config.bat_control_activated is False or - (self.data.config.power_limit_condition == BatPowerLimitCondition.PRICE_LIMIT.value and - self.data.set.power_limit is None)) + (self.data.config.power_limit_condition == + BatPowerLimitCondition.PRICE_LIMIT.value and + self.data.set.power_limit is None)) if config.bat_power_discharge_active and power_discharge_allowed: # Wenn der Speicher mit mehr als der erlaubten Entladeleistung entladen wird, muss das # vom Überschuss subtrahiert werden. From 21d0ac3dceb81b83acde3050956677b6516de56f Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Tue, 2 Jun 2026 15:38:00 +0200 Subject: [PATCH 5/7] better pv handling --- packages/control/bat_all.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/control/bat_all.py b/packages/control/bat_all.py index cb87d95c1f..475f62f3bd 100644 --- a/packages/control/bat_all.py +++ b/packages/control/bat_all.py @@ -351,7 +351,13 @@ def _get_charging_power_left(self): # ev wird nach Speicher geladen elif config.bat_mode == BatConsiderationMode.EV_MODE.value: # Speicher sollte weder ge- noch entladen werden. - charging_power_left = self.data.get.power + # wenn aktive Speichersteuerung in Höhe PV-Leistung lädt + # hat Speicher Priorität vor EV-Ladung + if (self.data.config.bat_control_activated and + self.data.config.power_limit_mode == BatPowerLimitMode.MODE_CHARGE_PV_PRODUCTION.value): + charging_power_left = 0 + else: + charging_power_left = self.data.get.power else: # Speicher soll geladen werden um min SoC zu erreichen if self.data.get.soc < config.min_bat_soc: @@ -385,6 +391,13 @@ def _get_charging_power_left(self): # Speicher darf wegen Hysterese bis min_bat_soc entladen werden. else: if self.data.set.power_limit is None: + # set allowed power + if (self.data.config.bat_control_activated and + self.data.config.power_limit_mode == BatPowerLimitMode.MODE_CHARGE_PV_PRODUCTION.value): + base_power = 0 + else: + base_power = self.data.get.power + # Aktive Steuerung nicht konfiguriert oder # Aktive Steuerung + Preisgrenze aktiv + Grenze nicht unterschritten # -> dann erlaubte Speicherentladeleistung addieren @@ -395,11 +408,11 @@ def _get_charging_power_left(self): if config.bat_power_discharge_active and power_discharge_allowed: # Wenn der Speicher mit mehr als der erlaubten Entladeleistung entladen wird, muss das # vom Überschuss subtrahiert werden. - charging_power_left = config.bat_power_discharge + self.data.get.power + charging_power_left = config.bat_power_discharge + base_power log.debug(f"Erlaubte Entlade-Leistung nutzen {charging_power_left}W") else: # Speicher sollte weder ge- noch entladen werden. - charging_power_left = self.data.get.power + charging_power_left = base_power else: log.debug("Keine erlaubte Entladeleistung freigeben, da der Speicher mit einer vorgegeben " "Leistung entladen wird.") From 8514c4764d67fb4211d24e36829cee52e601c432 Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Wed, 3 Jun 2026 10:56:45 +0200 Subject: [PATCH 6/7] fix identation --- packages/control/bat_all.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/control/bat_all.py b/packages/control/bat_all.py index 475f62f3bd..48f6bea3ce 100644 --- a/packages/control/bat_all.py +++ b/packages/control/bat_all.py @@ -354,7 +354,7 @@ def _get_charging_power_left(self): # wenn aktive Speichersteuerung in Höhe PV-Leistung lädt # hat Speicher Priorität vor EV-Ladung if (self.data.config.bat_control_activated and - self.data.config.power_limit_mode == BatPowerLimitMode.MODE_CHARGE_PV_PRODUCTION.value): + self.data.config.power_limit_mode == BatPowerLimitMode.MODE_CHARGE_PV_PRODUCTION.value): charging_power_left = 0 else: charging_power_left = self.data.get.power @@ -393,7 +393,7 @@ def _get_charging_power_left(self): if self.data.set.power_limit is None: # set allowed power if (self.data.config.bat_control_activated and - self.data.config.power_limit_mode == BatPowerLimitMode.MODE_CHARGE_PV_PRODUCTION.value): + self.data.config.power_limit_mode == BatPowerLimitMode.MODE_CHARGE_PV_PRODUCTION.value): base_power = 0 else: base_power = self.data.get.power From 33e9c20d23971018a56643a35b377a0ea494003d Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Wed, 3 Jun 2026 12:55:55 +0200 Subject: [PATCH 7/7] improve passive bat discharge while active bat control --- packages/control/bat_all.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/control/bat_all.py b/packages/control/bat_all.py index 48f6bea3ce..78a0a68f69 100644 --- a/packages/control/bat_all.py +++ b/packages/control/bat_all.py @@ -351,7 +351,7 @@ def _get_charging_power_left(self): # ev wird nach Speicher geladen elif config.bat_mode == BatConsiderationMode.EV_MODE.value: # Speicher sollte weder ge- noch entladen werden. - # wenn aktive Speichersteuerung in Höhe PV-Leistung lädt + # wenn aktive Speichersteuerung in Höhe PV-Leistung lädt # hat Speicher Priorität vor EV-Ladung if (self.data.config.bat_control_activated and self.data.config.power_limit_mode == BatPowerLimitMode.MODE_CHARGE_PV_PRODUCTION.value): @@ -393,11 +393,12 @@ def _get_charging_power_left(self): if self.data.set.power_limit is None: # set allowed power if (self.data.config.bat_control_activated and - self.data.config.power_limit_mode == BatPowerLimitMode.MODE_CHARGE_PV_PRODUCTION.value): + self.data.config.power_limit_mode == + BatPowerLimitMode.MODE_CHARGE_PV_PRODUCTION.value): base_power = 0 else: base_power = self.data.get.power - + # Aktive Steuerung nicht konfiguriert oder # Aktive Steuerung + Preisgrenze aktiv + Grenze nicht unterschritten # -> dann erlaubte Speicherentladeleistung addieren @@ -421,6 +422,13 @@ def _get_charging_power_left(self): else: self.data.set.hysteresis_discharge = True if self.data.set.power_limit is None: + # set allowed power + if (self.data.config.bat_control_activated and + self.data.config.power_limit_mode == BatPowerLimitMode.MODE_CHARGE_PV_PRODUCTION.value): + base_power = 0 + else: + base_power = self.data.get.power + # Aktive Steuerung nicht konfiguriert oder # Aktive Steuerung + Preisgrenze aktiv + Grenze nicht unterschritten # -> dann erlaubte Speicherentladeleistung addieren @@ -431,11 +439,11 @@ def _get_charging_power_left(self): if config.bat_power_discharge_active and power_discharge_allowed: # Wenn der Speicher mit mehr als der erlaubten Entladeleistung entladen wird, muss das # vom Überschuss subtrahiert werden. - charging_power_left = config.bat_power_discharge + self.data.get.power + charging_power_left = config.bat_power_discharge + base_power log.debug(f"Erlaubte Entlade-Leistung nutzen {charging_power_left}W") else: # Speicher sollte weder ge- noch entladen werden. - charging_power_left = self.data.get.power + charging_power_left = base_power else: log.debug("Keine erlaubte Entladeleistung freigeben, da der Speicher mit einer vorgegeben " "Leistung entladen wird.")