From 0b5199a094198ef43b550d3de3b43ffd29fac55f Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 28 Jul 2026 16:23:39 +0200 Subject: [PATCH 1/2] max ac out: filter non hybrid inverters --- packages/control/bat_all.py | 2 ++ packages/control/bat_all_test.py | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/packages/control/bat_all.py b/packages/control/bat_all.py index 8b327d60c1..b3ad5851d2 100644 --- a/packages/control/bat_all.py +++ b/packages/control/bat_all.py @@ -217,6 +217,8 @@ def _limit_bat_power_discharge(self, required_power: float) -> float: remaining_inverter_ac_out_power = 0 for inverter in data.data.pv_data.values(): try: + if len(data.data.counter_all_data.get_entry_of_element(inverter.num)["children"]) == 0: + continue bat_power = self.get_bat_power_of_hybrid_system(inverter) inverter_power = max((inverter.data.get.power + bat_power) * -1, 0) remaining_inverter_ac_out_power += inverter.data.config.max_ac_out - inverter_power + bat_power * -1 diff --git a/packages/control/bat_all_test.py b/packages/control/bat_all_test.py index c9787d71d8..17fe650818 100644 --- a/packages/control/bat_all_test.py +++ b/packages/control/bat_all_test.py @@ -57,6 +57,26 @@ def test_limit_bat_power_discharge(bat_power: int, assert power == expected_power +def test_limit_bat_power_discharge_no_hybrid_system(monkeypatch: pytest.MonkeyPatch): + # setup + data.data.pv_data = {"pv2": Pv(2)} + data.data.pv_data["pv2"].data.get.power = -100 + data.data.pv_data["pv2"].data.config.max_ac_out = 5000 + data.data.bat_data["bat1"] = Bat(1) + data.data.bat_data["bat1"].data.get.power = -4900 + mock_entry_children = Mock(return_value={}) + monkeypatch.setattr(data.data.counter_all_data, "get_entry_of_element", mock_entry_children) + + b = BatAll() + b.data.get.power = -4900 + + # execution + power = b._limit_bat_power_discharge(5100) # pyright: ignore[reportPrivateUsage] + + # evaluation + assert power == 5100 + + @dataclass class Params: name: str From dd0c1444f0a02223cdff5c7ba3cae8ba2eb34160 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 28 Jul 2026 16:31:44 +0200 Subject: [PATCH 2/2] review --- packages/control/bat_all_test.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/control/bat_all_test.py b/packages/control/bat_all_test.py index 17fe650818..245a1f9917 100644 --- a/packages/control/bat_all_test.py +++ b/packages/control/bat_all_test.py @@ -44,7 +44,8 @@ def test_limit_bat_power_discharge(bat_power: int, data.data.pv_data["pv2"].data.config.max_ac_out = 5000 data.data.bat_data["bat1"] = Bat(1) data.data.bat_data["bat1"].data.get.power = bat_power - mock_entry_children = Mock(return_value={"children": [{"id": 1, "type": "bat"}]}) + mock_entry_children = Mock(return_value={"id": 5, "type": "pv", "children": [ + {"id": 1, "type": "bat", "children": []}]}) monkeypatch.setattr(data.data.counter_all_data, "get_entry_of_element", mock_entry_children) b = BatAll() @@ -64,7 +65,7 @@ def test_limit_bat_power_discharge_no_hybrid_system(monkeypatch: pytest.MonkeyPa data.data.pv_data["pv2"].data.config.max_ac_out = 5000 data.data.bat_data["bat1"] = Bat(1) data.data.bat_data["bat1"].data.get.power = -4900 - mock_entry_children = Mock(return_value={}) + mock_entry_children = Mock(return_value={"id": 5, "type": "pv", "children": []}) monkeypatch.setattr(data.data.counter_all_data, "get_entry_of_element", mock_entry_children) b = BatAll()