diff --git a/packages/control/algorithm/surplus_controlled.py b/packages/control/algorithm/surplus_controlled.py index 53a7b6529d..cb6b51669d 100644 --- a/packages/control/algorithm/surplus_controlled.py +++ b/packages/control/algorithm/surplus_controlled.py @@ -1,5 +1,5 @@ import logging -from typing import List, Optional, Tuple +from typing import List, Optional, Tuple, Final from control import data from control.algorithm import common @@ -20,6 +20,8 @@ log = logging.getLogger(__name__) +MAX_EVSE_CURRENT_CHANGE: Final[float] = 2 # Ampere + class SurplusControlled: @@ -120,6 +122,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, MAX_EVSE_CURRENT_CHANGE) 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..a77060c8b0 100644 --- a/packages/control/algorithm/surplus_controlled_test.py +++ b/packages/control/algorithm/surplus_controlled_test.py @@ -106,7 +106,12 @@ def test_set_required_current_to_max(phases: int, 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(14.2, 14.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.5, 14.2, 15.7, + 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, 16, id="Auto lädt mit weniger als Soll-Stromstärke, aber EVSE-Begrenzung ist erreicht.") ]) @@ -145,7 +150,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