Skip to content

Commit 15c9419

Browse files
authored
fix secondary mqtt (#2380)
* fix secondary * fix
1 parent 6c89c59 commit 15c9419

2 files changed

Lines changed: 77 additions & 0 deletions

File tree

packages/helpermodules/update_config.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,32 @@ class UpdateConfig:
251251
"^openWB/internal_chargepoint/[0-1]/data/set_current$",
252252
"^openWB/internal_chargepoint/[0-1]/data/phases_to_use$",
253253
"^openWB/internal_chargepoint/[0-1]/data/parent_cp$",
254+
"^openWB/internal_chargepoint/[0-1]/get/charge_state$",
255+
"^openWB/internal_chargepoint/[0-1]/get/currents$",
256+
"^openWB/internal_chargepoint/[0-1]/get/current_branch$",
257+
"^openWB/internal_chargepoint/[0-1]/get/current_commit$",
258+
"^openWB/internal_chargepoint/[0-1]/get/evse_current$",
259+
"^openWB/internal_chargepoint/[0-1]/get/fault_state$",
260+
"^openWB/internal_chargepoint/[0-1]/get/fault_str$",
261+
"^openWB/internal_chargepoint/[0-1]/get/frequency$",
262+
"^openWB/internal_chargepoint/[0-1]/get/max_evse_current$",
263+
"^openWB/internal_chargepoint/[0-1]/get/plug_state$",
264+
"^openWB/internal_chargepoint/[0-1]/get/phases_in_use$",
265+
"^openWB/internal_chargepoint/[0-1]/get/exported$",
266+
"^openWB/internal_chargepoint/[0-1]/get/imported$",
267+
"^openWB/internal_chargepoint/[0-1]/get/power$",
268+
"^openWB/internal_chargepoint/[0-1]/get/powers$",
269+
"^openWB/internal_chargepoint/[0-1]/get/power_factors$",
270+
"^openWB/internal_chargepoint/[0-1]/get/vehicle_id$",
271+
"^openWB/internal_chargepoint/[0-1]/get/version$",
272+
"^openWB/internal_chargepoint/[0-1]/get/voltages$",
273+
"^openWB/internal_chargepoint/[0-1]/get/serial_number$",
274+
"^openWB/internal_chargepoint/[0-1]/get/soc$",
275+
"^openWB/internal_chargepoint/[0-1]/get/soc_timestamp$",
276+
"^openWB/internal_chargepoint/[0-1]/get/simulation$",
277+
"^openWB/internal_chargepoint/[0-1]/get/state_str$",
278+
"^openWB/internal_chargepoint/[0-1]/get/rfid$",
279+
"^openWB/internal_chargepoint/[0-1]/get/rfid_timestamp$",
254280

255281
"^openWB/io/states/[0-9]+/get/digital_input$",
256282
"^openWB/io/states/[0-9]+/get/analog_input$",

packages/modules/chargepoints/external_openwb/chargepoint_module.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
1+
import logging
12
import time
23

34
from control import data
45
from helpermodules import pub, timecheck
6+
from helpermodules.broker import BrokerClient
57
from helpermodules.utils.error_handling import CP_ERROR, ErrorTimerContext
8+
from helpermodules.utils.topic_parser import decode_payload
69
from modules.chargepoints.external_openwb.config import OpenWBSeries
710
from modules.common.abstract_chargepoint import AbstractChargepoint
811
from modules.common.abstract_device import DeviceDescriptor
912
from modules.common.component_context import SingleComponentUpdateContext
13+
from modules.common.component_state import ChargepointState
1014
from modules.common.fault_state import ComponentInfo, FaultState
15+
from modules.common.store._chargepoint import get_chargepoint_value_store
16+
17+
log = logging.getLogger(__name__)
1118

1219

1320
class ChargepointModule(AbstractChargepoint):
@@ -18,6 +25,7 @@ def __init__(self, config: OpenWBSeries) -> None:
1825
"Ladepunkt", "chargepoint"))
1926
self.client_error_context = ErrorTimerContext(
2027
f"openWB/set/chargepoint/{self.config.id}/get/error_timestamp", CP_ERROR, hide_exception=True)
28+
self.store = get_chargepoint_value_store(self.config.id)
2129

2230
def set_current(self, current: float) -> None:
2331
if self.client_error_context.error_counter_exceeded():
@@ -56,6 +64,49 @@ def get_values(self) -> None:
5664
else:
5765
pub.pub_single("openWB/set/internal_chargepoint/0/data/parent_cp", str(num), hostname=ip_address)
5866
pub.pub_single("openWB/set/isss/parentCPlp1", str(num), hostname=ip_address)
67+
68+
def on_connect(client, userdata, flags, rc):
69+
client.subscribe(f"openWB/internal_chargepoint/{self.config.configuration.duo_num}/get/#")
70+
71+
def on_message(client, userdata, message):
72+
received_topics.update({message.topic: decode_payload(message.payload)})
73+
74+
received_topics = {}
75+
BrokerClient(f"subscribeSeriesChargepoint{self.config.id}",
76+
on_connect,
77+
on_message,
78+
host=self.config.configuration.ip_address,
79+
port=1883).start_finite_loop()
80+
81+
if received_topics:
82+
log.debug(f"Empfange MQTT Daten für Ladepunkt {self.config.id}: {received_topics}")
83+
topic_prefix = f"openWB/internal_chargepoint/{self.config.configuration.duo_num}/get/"
84+
chargepoint_state = ChargepointState(
85+
power=received_topics.get(f"{topic_prefix}power"),
86+
phases_in_use=received_topics.get(f"{topic_prefix}phases_in_use"),
87+
imported=received_topics.get(f"{topic_prefix}imported"),
88+
exported=received_topics.get(f"{topic_prefix}exported"),
89+
serial_number=received_topics.get(f"{topic_prefix}serial_number"),
90+
powers=received_topics.get(f"{topic_prefix}powers"),
91+
voltages=received_topics.get(f"{topic_prefix}voltages"),
92+
currents=received_topics.get(f"{topic_prefix}currents"),
93+
power_factors=received_topics.get(f"{topic_prefix}power_factors"),
94+
plug_state=received_topics.get(f"{topic_prefix}plug_state"),
95+
charge_state=received_topics.get(f"{topic_prefix}charge_state"),
96+
rfid=received_topics.get(f"{topic_prefix}rfid"),
97+
rfid_timestamp=received_topics.get(f"{topic_prefix}rfid_timestamp"),
98+
frequency=received_topics.get(f"{topic_prefix}frequency"),
99+
soc=received_topics.get(f"{topic_prefix}soc"),
100+
soc_timestamp=received_topics.get(f"{topic_prefix}soc_timestamp"),
101+
vehicle_id=received_topics.get(f"{topic_prefix}vehicle_id"),
102+
evse_current=received_topics.get(f"{topic_prefix}evse_current"),
103+
max_evse_current=received_topics.get(f"{topic_prefix}max_evse_current"),
104+
)
105+
self.store.set(chargepoint_state)
106+
else:
107+
self.fault_state.warning(f"Keine MQTT-Daten für Ladepunkt {self.config.name} empfangen. Noch keine "
108+
"Daten nach dem Start oder Ladepunkt nicht erreichbar.")
109+
59110
self.client_error_context.reset_error_counter()
60111

61112
def switch_phases(self, phases_to_use: int, duration: int) -> None:

0 commit comments

Comments
 (0)