From 83ecbc1cbccec59627c2b5385693c78422d16fb9 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Mon, 14 Apr 2025 11:44:47 +0200 Subject: [PATCH 1/4] fix --- packages/modules/devices/generic/mqtt/device.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/modules/devices/generic/mqtt/device.py b/packages/modules/devices/generic/mqtt/device.py index d6c5509bde..8407d2ebff 100644 --- a/packages/modules/devices/generic/mqtt/device.py +++ b/packages/modules/devices/generic/mqtt/device.py @@ -41,9 +41,8 @@ def on_message(client, userdata, message): component.update(received_topics) else: raise Exception( - f"Keine MQTT-Daten für Gerät {device_config.id} empfangen oder es werden veraltete Topics" - " verwendet. Diese funktionieren mit Einschränkungen trotz dieser Fehlermeldung. Bitte die Doku in " - "den Einstellungen beachten.") + f"Keine MQTT-Daten für Gerät {device_config.id} empfangen oder es werden veraltete legacy-Topics" + " verwendet. Bitte die Doku in den Einstellungen beachten.") return ConfigurableDevice( device_config=device_config, From e112a412f4434c5db32da96e0b779e947d42a530 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Mon, 14 Apr 2025 12:49:50 +0200 Subject: [PATCH 2/4] fix --- packages/modules/devices/generic/mqtt/device.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/modules/devices/generic/mqtt/device.py b/packages/modules/devices/generic/mqtt/device.py index 8407d2ebff..d6c5509bde 100644 --- a/packages/modules/devices/generic/mqtt/device.py +++ b/packages/modules/devices/generic/mqtt/device.py @@ -41,8 +41,9 @@ def on_message(client, userdata, message): component.update(received_topics) else: raise Exception( - f"Keine MQTT-Daten für Gerät {device_config.id} empfangen oder es werden veraltete legacy-Topics" - " verwendet. Bitte die Doku in den Einstellungen beachten.") + f"Keine MQTT-Daten für Gerät {device_config.id} empfangen oder es werden veraltete Topics" + " verwendet. Diese funktionieren mit Einschränkungen trotz dieser Fehlermeldung. Bitte die Doku in " + "den Einstellungen beachten.") return ConfigurableDevice( device_config=device_config, From c754289c726d9143eaf13530bf2aba412185c4d7 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 15 Apr 2025 10:16:12 +0200 Subject: [PATCH 3/4] fix legacy --- packages/modules/chargepoints/mqtt/chargepoint_module.py | 5 ++--- packages/modules/common/component_context.py | 3 ++- packages/modules/common/fault_state.py | 5 +---- packages/modules/devices/generic/mqtt/device.py | 8 ++++---- 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/packages/modules/chargepoints/mqtt/chargepoint_module.py b/packages/modules/chargepoints/mqtt/chargepoint_module.py index 8f865b29c3..d708daf64f 100644 --- a/packages/modules/chargepoints/mqtt/chargepoint_module.py +++ b/packages/modules/chargepoints/mqtt/chargepoint_module.py @@ -62,9 +62,8 @@ def on_message(client, userdata, message): ) self.store.set(chargepoint_state) else: - raise Exception(f"Keine MQTT Daten für Ladepunkt {self.config.name} empfangen oder es werden veraltete " - "Topics verwendet. Diese funktionieren mit Einschränkungen trotz dieser Fehlermeldung. " - "Bitte die Doku in den Einstellungen beachten.") + self.fault_state.warning(f"Keine MQTT-Daten für Ladepunkt {self.config.name} empfangen oder es werden " + "veraltete, abwärtskompatible Topics verwendet. Bitte die Doku in den Einstellungen beachten.") def switch_phases(self, phases_to_use: int, duration: int) -> None: Pub().pub(f"openWB/mqtt/chargepoint/{self.config.id}/set/phases_to_use", phases_to_use) diff --git a/packages/modules/common/component_context.py b/packages/modules/common/component_context.py index 5e67b018fb..270ea05504 100644 --- a/packages/modules/common/component_context.py +++ b/packages/modules/common/component_context.py @@ -74,7 +74,8 @@ def __exit__(self, exception_type, exception, exception_traceback) -> bool: for component in self.__device_components: fault_state = component.fault_state if fault_state not in self.__ignored_components: - fault_state.from_exception(exception) + if exception: + fault_state.from_exception(exception) fault_state.store_error() delattr(MultiComponentUpdateContext.__thread_local, "active_context") if isinstance(exception, Exception) and self.error_handler is not None: diff --git a/packages/modules/common/fault_state.py b/packages/modules/common/fault_state.py index c91bdffe45..eb92afa6e3 100644 --- a/packages/modules/common/fault_state.py +++ b/packages/modules/common/fault_state.py @@ -82,10 +82,7 @@ def no_error(self, message: Optional[str] = None) -> None: self.fault_state = FaultStateLevel.NO_ERROR def from_exception(self, exception: Optional[Exception] = None) -> None: - if exception is None: - self.fault_str = NO_ERROR - self.fault_state = FaultStateLevel.NO_ERROR - elif isinstance(exception, FaultState): + if isinstance(exception, FaultState): self.fault_str = exception.fault_str self.fault_state = exception.fault_state else: diff --git a/packages/modules/devices/generic/mqtt/device.py b/packages/modules/devices/generic/mqtt/device.py index d6c5509bde..b11787918e 100644 --- a/packages/modules/devices/generic/mqtt/device.py +++ b/packages/modules/devices/generic/mqtt/device.py @@ -40,10 +40,10 @@ def on_message(client, userdata, message): for component in components: component.update(received_topics) else: - raise Exception( - f"Keine MQTT-Daten für Gerät {device_config.id} empfangen oder es werden veraltete Topics" - " verwendet. Diese funktionieren mit Einschränkungen trotz dieser Fehlermeldung. Bitte die Doku in " - "den Einstellungen beachten.") + for component in components: + component.fault_state.warning( + f"Keine MQTT-Daten für Komponente {component.component_config.name} empfangen oder es werden veraltete, " + "abwärtskompatible Topics verwendet. Bitte die Doku in den Einstellungen beachten.") return ConfigurableDevice( device_config=device_config, From 04f2d76b117f7834d6805e3e053c6aae50f053f7 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 15 Apr 2025 13:31:56 +0200 Subject: [PATCH 4/4] improve mqtt topics --- packages/helpermodules/setdata.py | 12 ++++++++++++ .../chargepoints/mqtt/chargepoint_module.py | 18 +++++++++++++++++- .../modules/devices/generic/mqtt/device.py | 4 ++-- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/packages/helpermodules/setdata.py b/packages/helpermodules/setdata.py index a150ee283c..da6ec6ddc6 100644 --- a/packages/helpermodules/setdata.py +++ b/packages/helpermodules/setdata.py @@ -86,6 +86,8 @@ def on_message(self, client: mqtt.Client, userdata, msg: mqtt.MQTTMessage): self.process_general_topic(msg) elif ("openWB/set/io/" in msg.topic or "openWB/set/internal_io/" in msg.topic): self.process_io_topic(msg) + elif "openWB/set/mqtt/" in msg.topic: + self.process_mqtt_topic(msg) elif "openWB/set/optional/" in msg.topic: self.process_optional_topic(msg) elif "openWB/set/counter/" in msg.topic: @@ -867,6 +869,16 @@ def process_io_topic(self, msg: mqtt.MQTTMessage): except Exception: log.exception(f"Fehler im setdata-Modul: Topic {msg.topic}, Value: {msg.payload}") + def process_mqtt_topic(self, msg: mqtt.MQTTMessage): + if "openWB/set/mqtt/chargepoint/" in msg.topic: + self.process_chargepoint_get_topics(msg) + elif "openWB/set/mqtt/counter/" in msg.topic: + self.process_counter_topic(msg) + elif "openWB/set/mqtt/bat/" in msg.topic: + self.process_bat_topic(msg) + elif "openWB/set/mqtt/pv/" in msg.topic: + self.process_pv_topic(msg) + def process_optional_topic(self, msg: mqtt.MQTTMessage): """ Handler für die Optionalen-Topics diff --git a/packages/modules/chargepoints/mqtt/chargepoint_module.py b/packages/modules/chargepoints/mqtt/chargepoint_module.py index d708daf64f..9950dfe83e 100644 --- a/packages/modules/chargepoints/mqtt/chargepoint_module.py +++ b/packages/modules/chargepoints/mqtt/chargepoint_module.py @@ -21,6 +21,21 @@ def __init__(self, config: Mqtt) -> None: self.store = get_chargepoint_value_store(self.config.id) self.fault_state = FaultState(ComponentInfo(self.config.id, "Ladepunkt", "chargepoint")) + def on_connect(client, userdata, flags, rc): + client.subscribe(f"openWB/mqtt/chargepoint/{self.config.id}/#") + + def on_message(client, userdata, message): + received_topics.update({message.topic: decode_payload(message.payload)}) + + received_topics = {} + BrokerClient(f"subscribeMqttChargepointInit{self.config.id}", + on_connect, on_message).start_finite_loop() + for topic, value in received_topics.items(): + if "/set/phases_to_use" in topic: + break + else: + Pub().pub(f"openWB/mqtt/chargepoint/{self.config.id}/set/phases_to_use", 0) + def set_current(self, current: float) -> None: Pub().pub(f"openWB/mqtt/chargepoint/{self.config.id}/set/current", current) @@ -63,7 +78,8 @@ def on_message(client, userdata, message): self.store.set(chargepoint_state) else: self.fault_state.warning(f"Keine MQTT-Daten für Ladepunkt {self.config.name} empfangen oder es werden " - "veraltete, abwärtskompatible Topics verwendet. Bitte die Doku in den Einstellungen beachten.") + "veraltete, abwärtskompatible Topics verwendet. Bitte die Doku in den " + "Einstellungen beachten.") def switch_phases(self, phases_to_use: int, duration: int) -> None: Pub().pub(f"openWB/mqtt/chargepoint/{self.config.id}/set/phases_to_use", phases_to_use) diff --git a/packages/modules/devices/generic/mqtt/device.py b/packages/modules/devices/generic/mqtt/device.py index b11787918e..93ab4d5d42 100644 --- a/packages/modules/devices/generic/mqtt/device.py +++ b/packages/modules/devices/generic/mqtt/device.py @@ -42,8 +42,8 @@ def on_message(client, userdata, message): else: for component in components: component.fault_state.warning( - f"Keine MQTT-Daten für Komponente {component.component_config.name} empfangen oder es werden veraltete, " - "abwärtskompatible Topics verwendet. Bitte die Doku in den Einstellungen beachten.") + f"Keine MQTT-Daten für Komponente {component.component_config.name} empfangen oder es werden " + "veraltete, abwärtskompatible Topics verwendet. Bitte die Doku in den Einstellungen beachten.") return ConfigurableDevice( device_config=device_config,