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..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() @@ -57,6 +58,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={"id": 5, "type": "pv", "children": []}) + 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