From 2f4c496fe2f65e9e595df71b49d0eaa9e296be75 Mon Sep 17 00:00:00 2001 From: Marco Bungalski Date: Tue, 3 Mar 2026 16:28:32 +0100 Subject: [PATCH] =?UTF-8?q?Beim=20Auslesen=20der=20EVSE=20via=20Modbus=20w?= =?UTF-8?q?ird=20im=20Fehlerfall=20(keine/falsche=20Antwort=20der=20EVSE)?= =?UTF-8?q?=20bis=20zu=20zwei=20Mal=20nach=20einer=20Pause=20von=20300ms?= =?UTF-8?q?=20wiederholt,=20bevor=20eine=20entsprechende=20Fehlermeldung?= =?UTF-8?q?=20"Auslesen=20der=20EVSE=20nicht=20m=C3=B6glich.=20Vermutlich?= =?UTF-8?q?=20ist=20die=20EVSE=20defekt=20oder=20hat=20eine=20unbekannte?= =?UTF-8?q?=20Modbus-ID."=20ins=20Log=20geschrieben=20wird.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/modules/common/hardware_check.py | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/packages/modules/common/hardware_check.py b/packages/modules/common/hardware_check.py index 104e11c376..b0edec2ea7 100644 --- a/packages/modules/common/hardware_check.py +++ b/packages/modules/common/hardware_check.py @@ -1,4 +1,5 @@ import logging +import time import pymodbus from typing import Any, Optional, Protocol, Tuple, Union @@ -80,12 +81,22 @@ def handle_exception(self: ClientHandlerProtocol, exception: Exception): def request_and_check_hardware(self: ClientHandlerProtocol, fault_state: FaultState) -> Tuple[EvseState, CounterState]: - try: - with self.client: - evse_state = self.evse_client.get_evse_state() - evse_check_passed = True - except Exception as e: - evse_check_passed = self.handle_exception(e) + evse_check_passed = False + evse_state: EvseState + # 2x Retry bei EVSE-Auslesen vor dem Absetzen einer Fehlermeldung + for attempt in (1, 2, 3): + try: + with self.client: + evse_state = self.evse_client.get_evse_state() + evse_check_passed = True + break + except Exception as e: + evse_check_passed = self.handle_exception(e) + # Wenn nicht "handled" -> maximal zwei Wiederholungen + if attempt < 3 and evse_check_passed is False: + time.sleep(0.3) + continue + break meter_check_passed, meter_error_msg, counter_state = self.check_meter() if meter_check_passed is False and evse_check_passed is False: if isinstance(self.client, ModbusTcpClient_):