diff --git a/packages/control/algorithm/surplus_controlled.py b/packages/control/algorithm/surplus_controlled.py index d7239b9696..131201e01a 100644 --- a/packages/control/algorithm/surplus_controlled.py +++ b/packages/control/algorithm/surplus_controlled.py @@ -120,6 +120,7 @@ def _fix_deviating_evse_current(self, chargepoint: Chargepoint) -> float: evse_current = chargepoint.data.get.evse_current if evse_current and chargepoint.data.set.current != chargepoint.data.set.current_prev: offset = evse_current - get_medium_charging_current(chargepoint.data.get.currents) + offset = min(offset, chargepoint.data.set.charging_ev_data.ev_template.data.nominal_difference) current_with_offset = chargepoint.data.set.current + offset current = min(current_with_offset, chargepoint.data.control_parameter.required_current) if current != chargepoint.data.set.current: diff --git a/packages/control/algorithm/surplus_controlled_test.py b/packages/control/algorithm/surplus_controlled_test.py index 6251148004..946fb4f390 100644 --- a/packages/control/algorithm/surplus_controlled_test.py +++ b/packages/control/algorithm/surplus_controlled_test.py @@ -100,18 +100,24 @@ def test_set_required_current_to_max(phases: int, @pytest.mark.parametrize( - "evse_current, limited_current, expected_current", + "evse_current, limited_current, max_current_change, expected_current", [ - pytest.param(None, 6, 6, id="Kein Soll-Strom aus der EVSE ausgelesen"), - pytest.param(13, 13, 13, id="Auto lädt mit Soll-Stromstärke"), - pytest.param(12.5, 12.5, 12.0, id="Auto lädt mit 0.5A Abweichung von der Soll-Stromstärke"), - pytest.param(11.8, 11.8, 10.600000000000001, id="Auto lädt mit mehr als Soll-Stromstärke"), - pytest.param(14.2, 14.2, 15.399999999999999, id="Auto lädt mit weniger als Soll-Stromstärke"), - pytest.param(15, 15, 16, + pytest.param(None, 6, 2, 6, id="Kein Soll-Strom aus der EVSE ausgelesen"), + pytest.param(13, 13, 2, 13, id="Auto lädt mit Soll-Stromstärke"), + pytest.param(12.5, 12.5, 2, 12.0, id="Auto lädt mit 0.5A Abweichung von der Soll-Stromstärke"), + pytest.param(11.8, 11.8, 2, 10.600000000000001, id="Auto lädt mit mehr als Soll-Stromstärke"), + pytest.param(14.2, 14.2, 2, 15.399999999999999, + id="Auto lädt mit weniger als Soll-Stromstärke, " + "diff kleiner als max_current_change, aber EVSE-Begrenzung ist nicht erreicht."), + pytest.param(14.2, 14.2, 1, 15.2, + id="Auto lädt mit weniger als Soll-Stromstärke, " + "diff größer als max_current_change, aber EVSE-Begrenzung ist nicht erreicht."), + pytest.param(15, 15, 2, 16, id="Auto lädt mit weniger als Soll-Stromstärke, aber EVSE-Begrenzung ist erreicht.") ]) def test_add_unused_evse_current(evse_current: float, limited_current: float, + max_current_change: float, expected_current: float): # setup c = Chargepoint(0, None) @@ -120,6 +126,7 @@ def test_add_unused_evse_current(evse_current: float, c.data.get.evse_current = evse_current c.data.control_parameter.required_current = 16 c.data.set.current = limited_current + c.data.set.charging_ev_data.ev_template.data.nominal_difference = max_current_change # execution SurplusControlled()._fix_deviating_evse_current(c) @@ -145,7 +152,7 @@ def setup_cp(cp: Chargepoint, submode: str) -> Chargepoint: cp.data.control_parameter.submode = submode cp.data.control_parameter.required_current = 6 return cp - data.data.cp_data = {"cp1": setup_cp(mock_cp1, submode_1), + data.Data.cp_data = {"cp1": setup_cp(mock_cp1, submode_1), "cp2": setup_cp(mock_cp2, submode_2)} # evaluation