From 6e28a777b48c8652d39bd59501bfbdba9f7d1e35 Mon Sep 17 00:00:00 2001 From: seaspotter Date: Thu, 17 Sep 2026 21:44:57 +0200 Subject: [PATCH] fix: external_openwb chargepoint crashes when fault_state topic is missing get_values() indexed received_topics[fault_state] directly, including inside its own KeyError handler - if the paired internal chargepoint hadn't published fault_state yet (startup, reconnect), the fallback crashed on the exact same missing key instead of handling it. --- .../external_openwb/chargepoint_module.py | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/modules/chargepoints/external_openwb/chargepoint_module.py b/packages/modules/chargepoints/external_openwb/chargepoint_module.py index c0b162e4c8..6c4ab63a42 100644 --- a/packages/modules/chargepoints/external_openwb/chargepoint_module.py +++ b/packages/modules/chargepoints/external_openwb/chargepoint_module.py @@ -101,16 +101,17 @@ def on_message(client, userdata, message): current_branch=parse_received_topics("current_branch"), current_commit=parse_received_topics("current_commit") ) - self.store.set(chargepoint_state) - if received_topics[f"{topic_prefix}fault_state"] == 2: - self.fault_state.error(received_topics[f"{topic_prefix}fault_str"]) - elif received_topics[f"{topic_prefix}fault_state"] == 1: - self.fault_state.warning(received_topics[f"{topic_prefix}fault_str"]) - except KeyError: - if received_topics[f"{topic_prefix}fault_state"] == 2: - self.fault_state.error(received_topics[f"{topic_prefix}fault_str"]) - else: - raise KeyError("Es wurden nicht alle notwendigen Daten empfangen.") + except KeyError as e: + raise KeyError(f"Es wurden nicht alle notwendigen Daten empfangen: {e}") + self.store.set(chargepoint_state) + + fault_state = received_topics.get(f"{topic_prefix}fault_state") + if fault_state == 2: + self.fault_state.error(received_topics.get( + f"{topic_prefix}fault_str", "Fehlerstatus vom internen Ladepunkt")) + elif fault_state == 1: + self.fault_state.warning(received_topics.get( + f"{topic_prefix}fault_str", "Warnung vom internen Ladepunkt")) else: self.fault_state.warning(f"Keine MQTT-Daten für Ladepunkt {self.config.name} empfangen. Noch keine " "Daten nach dem Start oder Ladepunkt nicht erreichbar.")