From c9ce41aed786cf5d8155fc0143053ec8027486a4 Mon Sep 17 00:00:00 2001 From: s0170071 Date: Sat, 25 Apr 2026 10:59:32 +0200 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20EVSE-Ruecklesen=20vor=20Phasenumscha?= =?UTF-8?q?ltung=20=E2=80=94=20Relais=20nur=20bei=200=20A=20schalten?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ersetzt den blinden 5s-Sleep in perform_phase_switch durch eine aktive Ruecklesung des EVSE-Registers (bis zu 20x alle 0,5s). Die Phasen- umschaltung wird abgebrochen wenn die EVSE nach 10s keinen Strom von 0 A bestaetigt. reraise=True verhindert dass ein fehlgeschlagener set_current(0) stillschweigend geschluckt wird. --- .../chargepoint_module.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/modules/internal_chargepoint_handler/chargepoint_module.py b/packages/modules/internal_chargepoint_handler/chargepoint_module.py index 77376312de..ab151eb62d 100644 --- a/packages/modules/internal_chargepoint_handler/chargepoint_module.py +++ b/packages/modules/internal_chargepoint_handler/chargepoint_module.py @@ -143,9 +143,19 @@ def store_state(chargepoint_state: ChargepointState) -> None: def perform_phase_switch(self, phases_to_use: int) -> None: gpio_cp, gpio_relay = self._client.get_pins_phase_switch(phases_to_use) - with SingleComponentUpdateContext(self.fault_state, update_always=False): - self._client.evse_client.set_current(0) - time.sleep(5) + evse = self._client.evse_client + with SingleComponentUpdateContext(self.fault_state, update_always=False, reraise=True): + evse.set_current(0) + for _ in range(20): # poll up to 10s (20 × 0.5s) for EVSE to confirm 0 A + _, _, evse_current = evse.get_plug_charge_state() + if evse_current == 0: + break + time.sleep(0.5) + evse.set_current(0) + else: + log.error("CP%d: EVSE did not reach 0 A within 10s — aborting phase switch.", + self.local_charge_point_num) + return GPIO.output(gpio_cp, GPIO.HIGH) # CP off GPIO.output(gpio_relay, GPIO.HIGH) # 3 on/off time.sleep(5) From c46d2d8d867d43a1fc49f2532bfae340b2a5faa7 Mon Sep 17 00:00:00 2001 From: s0170071 Date: Tue, 28 Apr 2026 22:32:22 +0200 Subject: [PATCH 2/2] fix: raise Exception statt log.error bei EVSE-Timeout (Review LKuemmel) --- .../internal_chargepoint_handler/chargepoint_module.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/modules/internal_chargepoint_handler/chargepoint_module.py b/packages/modules/internal_chargepoint_handler/chargepoint_module.py index ab151eb62d..5dea675284 100644 --- a/packages/modules/internal_chargepoint_handler/chargepoint_module.py +++ b/packages/modules/internal_chargepoint_handler/chargepoint_module.py @@ -153,9 +153,7 @@ def perform_phase_switch(self, phases_to_use: int) -> None: time.sleep(0.5) evse.set_current(0) else: - log.error("CP%d: EVSE did not reach 0 A within 10s — aborting phase switch.", - self.local_charge_point_num) - return + raise Exception("Ladung konnte nicht gestoppt werden - Phasenumschaltung abgebrochen.") GPIO.output(gpio_cp, GPIO.HIGH) # CP off GPIO.output(gpio_relay, GPIO.HIGH) # 3 on/off time.sleep(5)