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
26 changes: 26 additions & 0 deletions packages/helpermodules/update_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -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$",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,20 @@
import logging
import time

from control import data
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.component_state import ChargepointState
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):
Expand All @@ -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():
Expand Down Expand Up @@ -56,6 +64,49 @@ 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,
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()

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