From f9ae2cd308234df7bb0010a06da0558ae3834ecb Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 2 Sep 2025 15:34:40 +0200 Subject: [PATCH 1/3] fix control parameter phases if phase switch is not supported --- packages/control/chargepoint/chargepoint.py | 23 +++++++++---------- .../control/chargepoint/get_phases_test.py | 2 +- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/packages/control/chargepoint/chargepoint.py b/packages/control/chargepoint/chargepoint.py index f06e68960a..1261ffa653 100644 --- a/packages/control/chargepoint/chargepoint.py +++ b/packages/control/chargepoint/chargepoint.py @@ -576,18 +576,17 @@ def set_phases(self, phases: int, template_phases: int) -> int: if phases != self.data.get.phases_in_use: # Wenn noch kein Eintrag im Protokoll erstellt wurde, wurde noch nicht geladen und die Phase kann noch # umgeschaltet werden. - if self.data.set.log.imported_since_plugged != 0: - if charging_ev.ev_template.data.prevent_phase_switch: - log.info(f"Phasenumschaltung an Ladepunkt {self.num} nicht möglich, da bei EV" - f"{charging_ev.num} nach Ladestart nicht mehr umgeschaltet werden darf.") - if self.data.get.phases_in_use != 0: - phases = self.data.get.phases_in_use - else: - phases = self.data.control_parameter.phases - elif self.hw_supports_phase_switch() is False: - # sonst passt die Phasenzahl nicht bei Autos, die eine Phase weg schalten. - log.info(f"Phasenumschaltung an Ladepunkt {self.num} wird durch die Hardware nicht unterstützt.") - phases = phases + if self.data.set.log.imported_since_plugged != 0 and charging_ev.ev_template.data.prevent_phase_switch: + log.info(f"Phasenumschaltung an Ladepunkt {self.num} nicht möglich, da bei EV" + f"{charging_ev.num} nach Ladestart nicht mehr umgeschaltet werden darf.") + if self.data.get.phases_in_use != 0: + phases = self.data.get.phases_in_use + else: + phases = self.data.control_parameter.phases + elif self.hw_supports_phase_switch() is False: + # sonst passt die Phasenzahl nicht bei Autos, die eine Phase weg schalten. + log.info(f"Phasenumschaltung an Ladepunkt {self.num} wird durch die Hardware nicht unterstützt.") + phases = self.data.get.phases_in_use if phases != self.data.control_parameter.phases: self.data.control_parameter.phases = phases self.data.control_parameter.template_phases = template_phases diff --git a/packages/control/chargepoint/get_phases_test.py b/packages/control/chargepoint/get_phases_test.py index 41d32943e2..fe0facecc3 100644 --- a/packages/control/chargepoint/get_phases_test.py +++ b/packages/control/chargepoint/get_phases_test.py @@ -152,7 +152,7 @@ def __init__(self, SetPhasesParams(name="Switch phases", phases=1, phases_in_use=3, prevent_phase_switch=False, imported_since_plugged=1, phase_switch_supported=True, expected_phases=1), SetPhasesParams(name="Phase switch not supported by cp", phases=1, phases_in_use=3, prevent_phase_switch=False, - imported_since_plugged=1, phase_switch_supported=False, expected_phases=1) + imported_since_plugged=1, phase_switch_supported=False, expected_phases=3) ] From c1987ec0d900797bcbc8d37c5ee67e2da88e5fca Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 9 Sep 2025 10:12:18 +0200 Subject: [PATCH 2/3] condition for charging ist charge_state --- packages/control/algorithm/filter_chargepoints.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/control/algorithm/filter_chargepoints.py b/packages/control/algorithm/filter_chargepoints.py index 5b519ad42d..593b0674cd 100644 --- a/packages/control/algorithm/filter_chargepoints.py +++ b/packages/control/algorithm/filter_chargepoints.py @@ -44,7 +44,7 @@ def get_preferenced_chargepoint_charging( log.info( f"LP {cp.num}: Keine Zuteilung des Mindeststroms, daher keine weitere Berücksichtigung") preferenced_chargepoints_without_set_current.append(cp) - elif max(cp.data.get.currents) == 0: + elif cp.data.get.charge_state is False: log.info( f"LP {cp.num}: Lädt nicht, daher keine weitere Berücksichtigung") preferenced_chargepoints_without_set_current.append(cp) From f360732f7c877d30c40e69c3e88203147d2fae9d Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 9 Sep 2025 10:47:46 +0200 Subject: [PATCH 3/3] pytest --- packages/control/algorithm/common_test.py | 1 + .../algorithm/integration_test/instant_charging_test.py | 2 ++ .../control/algorithm/integration_test/pv_charging_test.py | 3 +++ packages/control/algorithm/surplus_controlled_test.py | 1 + 4 files changed, 7 insertions(+) diff --git a/packages/control/algorithm/common_test.py b/packages/control/algorithm/common_test.py index 2ae8679e98..707d88c0a2 100644 --- a/packages/control/algorithm/common_test.py +++ b/packages/control/algorithm/common_test.py @@ -51,6 +51,7 @@ def test_set_current_counterdiff(diff: float, cp.data.control_parameter.required_currents = required_currents cp.data.set.charging_ev_data = ev cp.data.set.current = 6 + cp.data.get.charge_state = True cp.data.get.currents = [10]*3 get_counters_to_check_mock = Mock(return_value=["cp0", "cp6"]) monkeypatch.setattr(CounterAll, "get_counters_to_check", get_counters_to_check_mock) diff --git a/packages/control/algorithm/integration_test/instant_charging_test.py b/packages/control/algorithm/integration_test/instant_charging_test.py index 0042910933..afc9b23551 100644 --- a/packages/control/algorithm/integration_test/instant_charging_test.py +++ b/packages/control/algorithm/integration_test/instant_charging_test.py @@ -29,6 +29,7 @@ def all_cp_charging_1p(): for i in range(3, 6): data.data.cp_data[f"cp{i}"].data.get.currents = [0]*3 data.data.cp_data[f"cp{i}"].data.get.currents[i-3] = 16 + data.data.cp_data[f"cp{i}"].data.get.charge_state = True @pytest.fixture() @@ -40,6 +41,7 @@ def all_cp_instant_charging_3p(): control_parameter.required_currents = [16]*3 control_parameter.required_current = 16 control_parameter.chargemode = Chargemode.INSTANT_CHARGING + data.data.cp_data[f"cp{i}"].data.get.charge_state = True data.data.cp_data[f"cp{i}"].data.get.currents = [16]*3 diff --git a/packages/control/algorithm/integration_test/pv_charging_test.py b/packages/control/algorithm/integration_test/pv_charging_test.py index aa7c6e25fd..105e421470 100644 --- a/packages/control/algorithm/integration_test/pv_charging_test.py +++ b/packages/control/algorithm/integration_test/pv_charging_test.py @@ -295,10 +295,13 @@ def test_phase_switch_1p_3p(all_cp_pv_charging_1p, monkeypatch): data.data.counter_data["counter0"].data.set.raw_power_left = cases_phase_switch[1].raw_power_left data.data.counter_data["counter0"].data.set.raw_currents_left = cases_phase_switch[1].raw_currents_left_counter0 data.data.counter_data["counter6"].data.set.raw_currents_left = cases_phase_switch[1].raw_currents_left_counter6 + data.data.cp_data["cp3"].data.get.charge_state = True data.data.cp_data["cp3"].data.get.currents = [32, 0, 0] data.data.cp_data["cp3"].data.get.power = 7360 data.data.cp_data["cp3"].data.control_parameter.timestamp_last_phase_switch = 1652682252 + data.data.cp_data["cp4"].data.get.charge_state = False data.data.cp_data["cp4"].data.get.currents = [0, 0, 0] + data.data.cp_data["cp5"].data.get.charge_state = False data.data.cp_data["cp5"].data.get.currents = [0, 0, 0] for i in range(3, 6): data.data.cp_data[f"cp{i}"].data.control_parameter.template_phases = 0 diff --git a/packages/control/algorithm/surplus_controlled_test.py b/packages/control/algorithm/surplus_controlled_test.py index 5963e6d491..e13e827542 100644 --- a/packages/control/algorithm/surplus_controlled_test.py +++ b/packages/control/algorithm/surplus_controlled_test.py @@ -115,6 +115,7 @@ def test_add_unused_evse_current(evse_current: float, expected_current: float): # setup c = Chargepoint(0, None) + c.data.get.charge_state = True c.data.get.currents = [13]*3 c.data.get.evse_current = evse_current c.data.control_parameter.required_current = 16