Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions packages/helpermodules/setdata.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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

Expand Down
21 changes: 18 additions & 3 deletions packages/modules/chargepoints/mqtt/chargepoint_module.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -62,9 +77,9 @@ 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)
Expand Down
3 changes: 2 additions & 1 deletion packages/modules/common/component_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
5 changes: 1 addition & 4 deletions packages/modules/common/fault_state.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
8 changes: 4 additions & 4 deletions packages/modules/devices/generic/mqtt/device.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down