From d295c415abe27fe6d97e56713b1856427076e0dc Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Mon, 14 Jul 2025 10:43:08 +0200 Subject: [PATCH 1/3] active bat control includes all chargemodes --- packages/control/algorithm/chargemodes.py | 1 + packages/control/bat_all.py | 13 +++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/control/algorithm/chargemodes.py b/packages/control/algorithm/chargemodes.py index 76bc9906a6..15036df58d 100644 --- a/packages/control/algorithm/chargemodes.py +++ b/packages/control/algorithm/chargemodes.py @@ -26,3 +26,4 @@ CONSIDERED_CHARGE_MODES_ADDITIONAL_CURRENT = CHARGEMODES[0:10] CONSIDERED_CHARGE_MODES_MIN_CURRENT = CHARGEMODES[0:-1] CONSIDERED_CHARGE_MODES_NO_CURRENT = CHARGEMODES[16:18] +CONSIDERED_CHARGE_MODES_CHARGING = CHARGEMODES[0:16] diff --git a/packages/control/bat_all.py b/packages/control/bat_all.py index 2d826a42c6..685326f61a 100644 --- a/packages/control/bat_all.py +++ b/packages/control/bat_all.py @@ -23,7 +23,7 @@ from typing import List from control import data -from control.algorithm.chargemodes import CONSIDERED_CHARGE_MODES_ADDITIONAL_CURRENT +from control.algorithm.chargemodes import CONSIDERED_CHARGE_MODES_CHARGING from control.algorithm.filter_chargepoints import get_chargepoints_by_chargemodes from control.pv import Pv from helpermodules.constants import NO_ERROR @@ -289,14 +289,15 @@ def set_power_limit_controllable(self): def get_power_limit(self): if self.data.config.bat_control_permitted is False: return - chargepoint_by_chagemodes = get_chargepoints_by_chargemodes(CONSIDERED_CHARGE_MODES_ADDITIONAL_CURRENT) + chargepoint_by_chargemodes = get_chargepoints_by_chargemodes(CONSIDERED_CHARGE_MODES_CHARGING) power_of_chargepoints_by_chagemodes = sum( - [cp.data.get.power for cp in chargepoint_by_chagemodes if cp.data.get.power is not None]) + [cp.data.get.power for cp in chargepoint_by_chargemodes if cp.data.get.power is not None]) + # Falls aktive Steuerung an und Fahrzeuge laden und kein Überschuss im System ist, + # dann Speichereistung begrenzen. if (self.data.config.power_limit_mode != BatPowerLimitMode.NO_LIMIT.value and - len(chargepoint_by_chagemodes) > 0 and + len(chargepoint_by_chargemodes) > 0 and power_of_chargepoints_by_chagemodes > 0 and self.data.get.power_limit_controllable and - # Nur wenn kein Überschuss im System ist, Speicherleistung begrenzen. self.data.get.power <= 0 and data.data.counter_all_data.get_evu_counter().data.get.power >= -100): if self.data.config.power_limit_mode == BatPowerLimitMode.LIMIT_STOP.value: @@ -309,7 +310,7 @@ def get_power_limit(self): control_range_low = data.data.general_data.data.chargemode_config.pv_charging.control_range[0] control_range_high = data.data.general_data.data.chargemode_config.pv_charging.control_range[1] control_range_center = control_range_high - (control_range_high - control_range_low) / 2 - if len(chargepoint_by_chagemodes) == 0: + if len(chargepoint_by_chargemodes) == 0: log.debug("Speicher-Leistung nicht begrenzen, " "da keine Ladepunkte in einem Lademodus mit Netzbezug sind.") elif power_of_chargepoints_by_chagemodes <= 0: From 78e9c128866e747fe5c8a5d08c1ec75773d25c40 Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Tue, 12 Aug 2025 13:18:06 +0200 Subject: [PATCH 2/3] check for cp power --- packages/control/bat_all.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/control/bat_all.py b/packages/control/bat_all.py index 8c780684cf..f38d55ecfe 100644 --- a/packages/control/bat_all.py +++ b/packages/control/bat_all.py @@ -289,13 +289,11 @@ def get_power_limit(self): if self.data.config.bat_control_permitted is False: return chargepoint_by_chargemodes = get_chargepoints_by_chargemodes(CONSIDERED_CHARGE_MODES_CHARGING) - power_of_chargepoints_by_chagemodes = sum( - [cp.data.get.power for cp in chargepoint_by_chargemodes if cp.data.get.power is not None]) # Falls aktive Steuerung an und Fahrzeuge laden und kein Überschuss im System ist, # dann Speichereistung begrenzen. if (self.data.config.power_limit_mode != BatPowerLimitMode.NO_LIMIT.value and len(chargepoint_by_chargemodes) > 0 and - power_of_chargepoints_by_chagemodes > 0 and + data.data.cp_all_data.data.get.power > 100 and self.data.get.power_limit_controllable and self.data.get.power <= 0 and data.data.counter_all_data.get_evu_counter().data.get.power >= -100): @@ -312,7 +310,7 @@ def get_power_limit(self): if len(chargepoint_by_chargemodes) == 0: log.debug("Speicher-Leistung nicht begrenzen, " "da keine Ladepunkte in einem Lademodus mit Netzbezug sind.") - elif power_of_chargepoints_by_chagemodes <= 0: + elif data.data.cp_all_data.data.get.power <= 100: log.debug("Speicher-Leistung nicht begrenzen, da kein Ladepunkt mit Netzubezug lädt.") elif self.data.get.power_limit_controllable is False: log.debug("Speicher-Leistung nicht begrenzen, da keine regelbaren Speicher vorhanden sind.") From 5a7c442496780bcc2d1211f259f1ea576e6dafc7 Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Tue, 12 Aug 2025 13:58:07 +0200 Subject: [PATCH 3/3] adjust test --- packages/control/bat_all_test.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/control/bat_all_test.py b/packages/control/bat_all_test.py index 39d8ff01b0..2256629529 100644 --- a/packages/control/bat_all_test.py +++ b/packages/control/bat_all_test.py @@ -132,7 +132,7 @@ class Params: @pytest.mark.parametrize("params", cases, ids=[c.name for c in cases]) -def test_get_charging_power_left(params: Params, caplog, data_fixture, monkeypatch): +def test_get_charging_power_left(params: Params, caplog, data_, monkeypatch): # setup b_all = BatAll() b_all.data.get.power = params.power @@ -195,6 +195,7 @@ def test_get_power_limit(params: PowerLimitParams, data_, monkeypatch): b_all.data.get.power = params.bat_power data.data.counter_all_data = hierarchy_standard() data.data.counter_all_data.data.set.home_consumption = 456 + data.data.cp_all_data.data.get.power = 1400 data.data.counter_data["counter0"].data.get.power = params.evu_power data.data.bat_all_data = b_all