From fb8accab344a88003ad0be69366721b8b0ac1122 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Wed, 7 May 2025 12:42:47 +0200 Subject: [PATCH 1/2] fix secondary --- .../external_openwb/chargepoint_module.py | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/packages/modules/chargepoints/external_openwb/chargepoint_module.py b/packages/modules/chargepoints/external_openwb/chargepoint_module.py index e6258d0cdd..c0fbf51d31 100644 --- a/packages/modules/chargepoints/external_openwb/chargepoint_module.py +++ b/packages/modules/chargepoints/external_openwb/chargepoint_module.py @@ -1,13 +1,20 @@ +import logging import time from control import data +from control.chargepoint.chargepoint_state import ChargepointState from helpermodules import pub, timecheck +from helpermodules.broker import BrokerClient from helpermodules.utils.error_handling import CP_ERROR, ErrorTimerContext +from helpermodules.utils.topic_parser import decode_payload from modules.chargepoints.external_openwb.config import OpenWBSeries from modules.common.abstract_chargepoint import AbstractChargepoint from modules.common.abstract_device import DeviceDescriptor from modules.common.component_context import SingleComponentUpdateContext from modules.common.fault_state import ComponentInfo, FaultState +from modules.common.store._chargepoint import get_chargepoint_value_store + +log = logging.getLogger(__name__) class ChargepointModule(AbstractChargepoint): @@ -18,6 +25,7 @@ def __init__(self, config: OpenWBSeries) -> None: "Ladepunkt", "chargepoint")) self.client_error_context = ErrorTimerContext( f"openWB/set/chargepoint/{self.config.id}/get/error_timestamp", CP_ERROR, hide_exception=True) + self.store = get_chargepoint_value_store(self.config.id) def set_current(self, current: float) -> None: if self.client_error_context.error_counter_exceeded(): @@ -56,6 +64,47 @@ def get_values(self) -> None: else: pub.pub_single("openWB/set/internal_chargepoint/0/data/parent_cp", str(num), hostname=ip_address) pub.pub_single("openWB/set/isss/parentCPlp1", str(num), hostname=ip_address) + + def on_connect(client, userdata, flags, rc): + client.subscribe(f"openWB/internal_chargepoint/{self.config.configuration.duo_num}/get/#") + + def on_message(client, userdata, message): + received_topics.update({message.topic: decode_payload(message.payload)}) + + received_topics = {} + BrokerClient(f"subscribeSeriesChargepoint{self.config.id}", + on_connect, on_message, host=self.config.configuration.ip_address).start_finite_loop() + + if received_topics: + log.debug(f"Empfange MQTT Daten für Ladepunkt {self.config.id}: {received_topics}") + topic_prefix = f"openWB/internal_chargepoint/{self.config.configuration.duo_num}/get/" + chargepoint_state = ChargepointState( + power=received_topics.get(f"{topic_prefix}power"), + phases_in_use=received_topics.get(f"{topic_prefix}phases_in_use"), + imported=received_topics.get(f"{topic_prefix}imported"), + exported=received_topics.get(f"{topic_prefix}exported"), + serial_number=received_topics.get(f"{topic_prefix}serial_number"), + powers=received_topics.get(f"{topic_prefix}powers"), + voltages=received_topics.get(f"{topic_prefix}voltages"), + currents=received_topics.get(f"{topic_prefix}currents"), + power_factors=received_topics.get(f"{topic_prefix}power_factors"), + plug_state=received_topics.get(f"{topic_prefix}plug_state"), + charge_state=received_topics.get(f"{topic_prefix}charge_state"), + rfid=received_topics.get(f"{topic_prefix}rfid"), + rfid_timestamp=received_topics.get(f"{topic_prefix}rfid_timestamp"), + frequency=received_topics.get(f"{topic_prefix}frequency"), + soc=received_topics.get(f"{topic_prefix}soc"), + soc_timestamp=received_topics.get(f"{topic_prefix}soc_timestamp"), + vehicle_id=received_topics.get(f"{topic_prefix}vehicle_id"), + evse_current=received_topics.get(f"{topic_prefix}evse_current"), + max_evse_current=received_topics.get(f"{topic_prefix}max_evse_current") + ) + 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.") + self.client_error_context.reset_error_counter() def switch_phases(self, phases_to_use: int, duration: int) -> None: From d3981d30db6c46b443c2798c43f64beed18f2d66 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Wed, 7 May 2025 15:58:53 +0200 Subject: [PATCH 2/2] fix --- packages/helpermodules/update_config.py | 26 ++++++ .../external_openwb/chargepoint_module.py | 82 ++++++++++--------- 2 files changed, 68 insertions(+), 40 deletions(-) diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index bd82211382..5d436a7f51 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -251,6 +251,32 @@ class UpdateConfig: "^openWB/internal_chargepoint/[0-1]/data/set_current$", "^openWB/internal_chargepoint/[0-1]/data/phases_to_use$", "^openWB/internal_chargepoint/[0-1]/data/parent_cp$", + "^openWB/internal_chargepoint/[0-1]/get/charge_state$", + "^openWB/internal_chargepoint/[0-1]/get/currents$", + "^openWB/internal_chargepoint/[0-1]/get/current_branch$", + "^openWB/internal_chargepoint/[0-1]/get/current_commit$", + "^openWB/internal_chargepoint/[0-1]/get/evse_current$", + "^openWB/internal_chargepoint/[0-1]/get/fault_state$", + "^openWB/internal_chargepoint/[0-1]/get/fault_str$", + "^openWB/internal_chargepoint/[0-1]/get/frequency$", + "^openWB/internal_chargepoint/[0-1]/get/max_evse_current$", + "^openWB/internal_chargepoint/[0-1]/get/plug_state$", + "^openWB/internal_chargepoint/[0-1]/get/phases_in_use$", + "^openWB/internal_chargepoint/[0-1]/get/exported$", + "^openWB/internal_chargepoint/[0-1]/get/imported$", + "^openWB/internal_chargepoint/[0-1]/get/power$", + "^openWB/internal_chargepoint/[0-1]/get/powers$", + "^openWB/internal_chargepoint/[0-1]/get/power_factors$", + "^openWB/internal_chargepoint/[0-1]/get/vehicle_id$", + "^openWB/internal_chargepoint/[0-1]/get/version$", + "^openWB/internal_chargepoint/[0-1]/get/voltages$", + "^openWB/internal_chargepoint/[0-1]/get/serial_number$", + "^openWB/internal_chargepoint/[0-1]/get/soc$", + "^openWB/internal_chargepoint/[0-1]/get/soc_timestamp$", + "^openWB/internal_chargepoint/[0-1]/get/simulation$", + "^openWB/internal_chargepoint/[0-1]/get/state_str$", + "^openWB/internal_chargepoint/[0-1]/get/rfid$", + "^openWB/internal_chargepoint/[0-1]/get/rfid_timestamp$", "^openWB/io/states/[0-9]+/get/digital_input$", "^openWB/io/states/[0-9]+/get/analog_input$", diff --git a/packages/modules/chargepoints/external_openwb/chargepoint_module.py b/packages/modules/chargepoints/external_openwb/chargepoint_module.py index c0fbf51d31..186bd948ad 100644 --- a/packages/modules/chargepoints/external_openwb/chargepoint_module.py +++ b/packages/modules/chargepoints/external_openwb/chargepoint_module.py @@ -2,7 +2,6 @@ import time from control import data -from control.chargepoint.chargepoint_state import ChargepointState from helpermodules import pub, timecheck from helpermodules.broker import BrokerClient from helpermodules.utils.error_handling import CP_ERROR, ErrorTimerContext @@ -11,6 +10,7 @@ from modules.common.abstract_chargepoint import AbstractChargepoint from modules.common.abstract_device import DeviceDescriptor from modules.common.component_context import SingleComponentUpdateContext +from modules.common.component_state import ChargepointState from modules.common.fault_state import ComponentInfo, FaultState from modules.common.store._chargepoint import get_chargepoint_value_store @@ -65,45 +65,47 @@ def get_values(self) -> None: pub.pub_single("openWB/set/internal_chargepoint/0/data/parent_cp", str(num), hostname=ip_address) pub.pub_single("openWB/set/isss/parentCPlp1", str(num), hostname=ip_address) - def on_connect(client, userdata, flags, rc): - client.subscribe(f"openWB/internal_chargepoint/{self.config.configuration.duo_num}/get/#") - - def on_message(client, userdata, message): - received_topics.update({message.topic: decode_payload(message.payload)}) - - received_topics = {} - BrokerClient(f"subscribeSeriesChargepoint{self.config.id}", - on_connect, on_message, host=self.config.configuration.ip_address).start_finite_loop() - - if received_topics: - log.debug(f"Empfange MQTT Daten für Ladepunkt {self.config.id}: {received_topics}") - topic_prefix = f"openWB/internal_chargepoint/{self.config.configuration.duo_num}/get/" - chargepoint_state = ChargepointState( - power=received_topics.get(f"{topic_prefix}power"), - phases_in_use=received_topics.get(f"{topic_prefix}phases_in_use"), - imported=received_topics.get(f"{topic_prefix}imported"), - exported=received_topics.get(f"{topic_prefix}exported"), - serial_number=received_topics.get(f"{topic_prefix}serial_number"), - powers=received_topics.get(f"{topic_prefix}powers"), - voltages=received_topics.get(f"{topic_prefix}voltages"), - currents=received_topics.get(f"{topic_prefix}currents"), - power_factors=received_topics.get(f"{topic_prefix}power_factors"), - plug_state=received_topics.get(f"{topic_prefix}plug_state"), - charge_state=received_topics.get(f"{topic_prefix}charge_state"), - rfid=received_topics.get(f"{topic_prefix}rfid"), - rfid_timestamp=received_topics.get(f"{topic_prefix}rfid_timestamp"), - frequency=received_topics.get(f"{topic_prefix}frequency"), - soc=received_topics.get(f"{topic_prefix}soc"), - soc_timestamp=received_topics.get(f"{topic_prefix}soc_timestamp"), - vehicle_id=received_topics.get(f"{topic_prefix}vehicle_id"), - evse_current=received_topics.get(f"{topic_prefix}evse_current"), - max_evse_current=received_topics.get(f"{topic_prefix}max_evse_current") - ) - 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.") + def on_connect(client, userdata, flags, rc): + client.subscribe(f"openWB/internal_chargepoint/{self.config.configuration.duo_num}/get/#") + + def on_message(client, userdata, message): + received_topics.update({message.topic: decode_payload(message.payload)}) + + received_topics = {} + BrokerClient(f"subscribeSeriesChargepoint{self.config.id}", + on_connect, + on_message, + host=self.config.configuration.ip_address, + port=1883).start_finite_loop() + + if received_topics: + log.debug(f"Empfange MQTT Daten für Ladepunkt {self.config.id}: {received_topics}") + topic_prefix = f"openWB/internal_chargepoint/{self.config.configuration.duo_num}/get/" + chargepoint_state = ChargepointState( + power=received_topics.get(f"{topic_prefix}power"), + phases_in_use=received_topics.get(f"{topic_prefix}phases_in_use"), + imported=received_topics.get(f"{topic_prefix}imported"), + exported=received_topics.get(f"{topic_prefix}exported"), + serial_number=received_topics.get(f"{topic_prefix}serial_number"), + powers=received_topics.get(f"{topic_prefix}powers"), + voltages=received_topics.get(f"{topic_prefix}voltages"), + currents=received_topics.get(f"{topic_prefix}currents"), + power_factors=received_topics.get(f"{topic_prefix}power_factors"), + plug_state=received_topics.get(f"{topic_prefix}plug_state"), + charge_state=received_topics.get(f"{topic_prefix}charge_state"), + rfid=received_topics.get(f"{topic_prefix}rfid"), + rfid_timestamp=received_topics.get(f"{topic_prefix}rfid_timestamp"), + frequency=received_topics.get(f"{topic_prefix}frequency"), + soc=received_topics.get(f"{topic_prefix}soc"), + soc_timestamp=received_topics.get(f"{topic_prefix}soc_timestamp"), + vehicle_id=received_topics.get(f"{topic_prefix}vehicle_id"), + evse_current=received_topics.get(f"{topic_prefix}evse_current"), + max_evse_current=received_topics.get(f"{topic_prefix}max_evse_current"), + ) + self.store.set(chargepoint_state) + 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.") self.client_error_context.reset_error_counter()