From 8362c4bedfe4687cfa7fb564765ff55e837c440f Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Thu, 5 Jun 2025 08:23:33 +0200 Subject: [PATCH] fix error handling pro causing negative chargelog entries --- packages/helpermodules/utils/error_handling.py | 5 ++++- .../openwb_pro/chargepoint_module.py | 16 +++++++++------- .../openwb_pro/chargepoint_module_test.py | 8 +++----- packages/modules/common/store/_chargepoint.py | 6 ++++-- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/packages/helpermodules/utils/error_handling.py b/packages/helpermodules/utils/error_handling.py index 45998fddd1..56e2a29bad 100644 --- a/packages/helpermodules/utils/error_handling.py +++ b/packages/helpermodules/utils/error_handling.py @@ -29,7 +29,10 @@ def __exit__(self, exception_type, exception, exception_traceback) -> bool: self.error_timestamp = timecheck.create_timestamp() Pub().pub(self.topic, self.error_timestamp) log.error(exception) - if self.hide_exception is False or timecheck.check_timestamp(self.error_timestamp, self.timeout) is False: + if (self.hide_exception is False or + timecheck.check_timestamp(self.error_timestamp, self.timeout + 10) is False): + # Fehlermeldung als abgelaufen markieren, bevor die Exception gesetzt wird, mit der Exception werden + # keine Werte mehr gepublished. return False return True diff --git a/packages/modules/chargepoints/openwb_pro/chargepoint_module.py b/packages/modules/chargepoints/openwb_pro/chargepoint_module.py index a567f21b81..d4c79c0007 100644 --- a/packages/modules/chargepoints/openwb_pro/chargepoint_module.py +++ b/packages/modules/chargepoints/openwb_pro/chargepoint_module.py @@ -29,7 +29,6 @@ def __init__(self, config: OpenWBPro) -> None: self.__session = req.get_http_session() self.client_error_context = ErrorTimerContext( f"openWB/set/chargepoint/{self.config.id}/get/error_timestamp", CP_ERROR, hide_exception=True) - self.old_chargepoint_state = ChargepointState() with SingleComponentUpdateContext(self.fault_state, update_always=False): with self.client_error_context: @@ -58,11 +57,12 @@ def set_current(self, current: float) -> None: def get_values(self) -> None: with SingleComponentUpdateContext(self.fault_state): chargepoint_state = self.request_values() - self.store.set(chargepoint_state) + if chargepoint_state is not None: + # bei Fehler, aber Fehlezähler noch nicht abgelaufen, keine Werte mehr publishen. + self.store.set(chargepoint_state) def request_values(self) -> ChargepointState: with self.client_error_context: - chargepoint_state = self.old_chargepoint_state ip_address = self.config.configuration.ip_address json_rsp = self.__session.get('http://'+ip_address+'/connect.php').json() @@ -97,15 +97,17 @@ def request_values(self) -> ChargepointState: chargepoint_state.rfid_timestamp = json_rsp["rfid_timestamp"] self.validate_values(chargepoint_state) - self.old_chargepoint_state = chargepoint_state self.client_error_context.reset_error_counter() + return chargepoint_state if self.client_error_context.error_counter_exceeded(): chargepoint_state = ChargepointState() chargepoint_state.plug_state = False chargepoint_state.charge_state = False - chargepoint_state.imported = self.old_chargepoint_state.imported - chargepoint_state.exported = self.old_chargepoint_state.exported - return chargepoint_state + chargepoint_state.imported = None # bei None werden keine Werte gepublished + chargepoint_state.exported = None + return chargepoint_state + else: + return None def validate_values(self, chargepoint_state: ChargepointState) -> None: if chargepoint_state.charge_state is False and max(chargepoint_state.currents) > 1: diff --git a/packages/modules/chargepoints/openwb_pro/chargepoint_module_test.py b/packages/modules/chargepoints/openwb_pro/chargepoint_module_test.py index 75e656525e..81a2e43b63 100644 --- a/packages/modules/chargepoints/openwb_pro/chargepoint_module_test.py +++ b/packages/modules/chargepoints/openwb_pro/chargepoint_module_test.py @@ -161,11 +161,10 @@ def sample_chargepoint_state_is_reset(): pytest.param(sample(), 1652683242, None, None, sample_chargepoint_state(), id="Timestamp gesetzt, kein Fehler aufgetreten"), pytest.param(sample_wrong_charge_state(), None, None, 1652683252, - sample_wrong_charge_state_chargepoint_state(), id="kein Timestamp gesetzt, Fehler aufgetreten"), - pytest.param(sample_wrong_charge_state(), 1652683242, None, 1652683242, - sample_wrong_charge_state_chargepoint_state(), + None, id="kein Timestamp gesetzt, Fehler aufgetreten"), + pytest.param(sample_wrong_charge_state(), 1652683242, None, 1652683242, None, id="Timestamp gesetzt, Fehler aufgetreten, Timestamp nicht abgelaufen"), - pytest.param(sample_wrong_charge_state(), 1652683182, ValueError, 1652683182, + pytest.param(sample_wrong_charge_state(), 1652683112, ValueError, 1652683112, sample_chargepoint_state_is_reset(), id="Timestamp gesetzt, Fehler aufgetreten, Timestamp abgelaufen"), ]) @@ -185,7 +184,6 @@ def test_error_timestamp(sample_state, cp = chargepoint_module.ChargepointModule(OpenWBPro(configuration=OpenWBProConfiguration(ip_address=SAMPLE_IP))) cp.client_error_context.error_timestamp = error_timestamp - cp.old_chargepoint_state = sample_chargepoint_state # evaluation if expected_exception is not None: diff --git a/packages/modules/common/store/_chargepoint.py b/packages/modules/common/store/_chargepoint.py index 478560bbd2..d630eb7b92 100644 --- a/packages/modules/common/store/_chargepoint.py +++ b/packages/modules/common/store/_chargepoint.py @@ -36,8 +36,10 @@ def update(self): pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/voltages", self.state.voltages, 2) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/currents", self.state.currents, 2) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/power_factors", self.state.power_factors, 2) - pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/imported", self.state.imported, 2) - pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/exported", self.state.exported, 2) + if self.state.imported is not None: + pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/imported", self.state.imported, 2) + if self.state.exported is not None: + pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/exported", self.state.exported, 2) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/power", self.state.power, 2) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/powers", self.state.powers, 2) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/frequency", self.state.frequency, 2)