diff --git a/packages/control/counter.py b/packages/control/counter.py index 146db1d345..b3e6fcddf0 100644 --- a/packages/control/counter.py +++ b/packages/control/counter.py @@ -66,6 +66,7 @@ class Get: fault_state: int = field(default=0, metadata={"topic": "get/fault_state"}) fault_str: str = field(default=NO_ERROR, metadata={"topic": "get/fault_str"}) power: float = field(default=0, metadata={"topic": "get/power"}) + serial_number: Optional[str] = field(default=None, metadata={"topic": "get/serial_number"}) def get_factory() -> Get: diff --git a/packages/helpermodules/setdata.py b/packages/helpermodules/setdata.py index 067ede9af8..1454527dba 100644 --- a/packages/helpermodules/setdata.py +++ b/packages/helpermodules/setdata.py @@ -627,7 +627,8 @@ def process_pv_topic(self, msg: mqtt.MQTTMessage): elif subdata.SubData.pv_data.get(f"pv{get_index(msg.topic)}"): if "/get/fault_state" in msg.topic: self._validate_value(msg, int, [(0, 2)]) - elif "/get/fault_str" in msg.topic: + elif ("/get/fault_str" in msg.topic or + "/get/serial_number" in msg.topic): self._validate_value(msg, str) elif ("/get/daily_exported" in msg.topic or "/get/monthly_exported" in msg.topic or @@ -696,7 +697,8 @@ def process_bat_topic(self, msg: mqtt.MQTTMessage): self._validate_value(msg, float, [(0, 100)]) elif "/get/fault_state" in msg.topic: self._validate_value(msg, int, [(0, 2)]) - elif "/get/fault_str" in msg.topic: + elif ("/get/fault_str" in msg.topic or + "/get/serial_number" in msg.topic): self._validate_value(msg, str) elif "/set/power_limit_controllable" in msg.topic: self._validate_value(msg, bool) @@ -948,7 +950,8 @@ def process_counter_topic(self, msg: mqtt.MQTTMessage): self._validate_value(msg, int, [(0, 2)]) elif "/set/error_timer" in msg.topic: self._validate_value(msg, float, [(0, float("inf"))]) - elif "/get/fault_str" in msg.topic: + elif ("/get/fault_str" in msg.topic or + "/get/serial_number" in msg.topic): self._validate_value(msg, str) elif "/get/power" in msg.topic: self._validate_value( diff --git a/packages/modules/common/component_state.py b/packages/modules/common/component_state.py index ce5b687d10..d483111ed8 100644 --- a/packages/modules/common/component_state.py +++ b/packages/modules/common/component_state.py @@ -66,6 +66,7 @@ def __init__( power: float = 0, soc: float = 0, currents: Optional[List[float]] = None, + serial_number: Optional[str] = None, ): """Args: imported: total imported energy in Wh @@ -83,6 +84,7 @@ def __init__( if not check_currents_power_sign(currents, power): log.debug("currents sign wrong "+str(currents)) self.currents = currents + self.serial_number = serial_number @auto_str @@ -97,7 +99,7 @@ def __init__( powers: Optional[List[Optional[float]]] = None, power_factors: Optional[List[Optional[float]]] = None, frequency: float = 50, - serial_number: str = "", + serial_number: Optional[str] = None, ): """Args: imported: total imported energy in Wh @@ -128,7 +130,8 @@ def __init__( power: float, imported: float = 0, # simulated import counter to properly calculate PV energy when bat is charged from AC currents: Optional[List[Optional[float]]] = None, - dc_power: Optional[float] = None + dc_power: Optional[float] = None, + serial_number: Optional[str] = None, ): """Args: exported: total energy in Wh @@ -147,6 +150,7 @@ def __init__( self.exported = exported self.imported = imported self.dc_power = dc_power + self.serial_number = serial_number @auto_str diff --git a/packages/modules/common/store/_battery.py b/packages/modules/common/store/_battery.py index 41ded60c93..c8a60c2298 100644 --- a/packages/modules/common/store/_battery.py +++ b/packages/modules/common/store/_battery.py @@ -31,6 +31,8 @@ def update(self): if self.state.imported is not None and self.state.exported is not None: pub_to_broker("openWB/set/bat/"+str(self.num)+"/get/imported", self.state.imported, 2) pub_to_broker("openWB/set/bat/"+str(self.num)+"/get/exported", self.state.exported, 2) + if self.state.serial_number is not None: + pub_to_broker("openWB/set/bat/" + str(self.num) + "/get/serial_number", self.state.serial_number) class PurgeBatteryState: diff --git a/packages/modules/common/store/_counter.py b/packages/modules/common/store/_counter.py index 5e97045b6d..060acabe81 100644 --- a/packages/modules/common/store/_counter.py +++ b/packages/modules/common/store/_counter.py @@ -47,6 +47,8 @@ def update(self): pub_to_broker("openWB/set/counter/" + str(self.num) + "/get/exported", self.state.exported) pub_to_broker("openWB/set/counter/" + str(self.num) + "/get/power", self.state.power) pub_to_broker("openWB/set/counter/" + str(self.num) + "/get/frequency", self.state.frequency) + if self.state.serial_number is not None: + pub_to_broker("openWB/set/counter/" + str(self.num) + "/get/serial_number", self.state.serial_number) class PurgeCounterState: diff --git a/packages/modules/common/store/_inverter.py b/packages/modules/common/store/_inverter.py index 0cfab0a947..733ff460e2 100644 --- a/packages/modules/common/store/_inverter.py +++ b/packages/modules/common/store/_inverter.py @@ -38,6 +38,8 @@ def update(self): log.debug("Kein gültiger Zählerstand. Wert wird nicht aktualisiert.") if self.state.currents: pub_to_broker("openWB/set/pv/" + str(self.num) + "/get/currents", self.state.currents, 1) + if self.state.serial_number is not None: + pub_to_broker("openWB/set/pv/" + str(self.num) + "/get/serial_number", self.state.serial_number) class PurgeInverterState: diff --git a/packages/modules/devices/openwb/openwb_flex/bat.py b/packages/modules/devices/openwb/openwb_flex/bat.py index 06d927ca35..ffa7b5eae2 100644 --- a/packages/modules/devices/openwb/openwb_flex/bat.py +++ b/packages/modules/devices/openwb/openwb_flex/bat.py @@ -62,7 +62,8 @@ def update(self): currents=currents, imported=imported, exported=exported, - power=power + power=power, + serial_number=counter_state.serial_number, ) self.store.set(bat_state) diff --git a/packages/modules/devices/openwb/openwb_flex/consumption_counter.py b/packages/modules/devices/openwb/openwb_flex/consumption_counter.py index 01ec98933e..aa0327a120 100644 --- a/packages/modules/devices/openwb/openwb_flex/consumption_counter.py +++ b/packages/modules/devices/openwb/openwb_flex/consumption_counter.py @@ -3,7 +3,6 @@ from modules.common import modbus from modules.common.abstract_device import AbstractCounter -from modules.common.component_state import CounterState from modules.common.component_type import ComponentDescriptor from modules.common.fault_state import ComponentInfo, FaultState from modules.common.simcount import SimCounter @@ -34,27 +33,12 @@ def initialize(self) -> None: def update(self) -> None: with self.__tcp_client: - voltages = self.__client.get_voltages() - powers, power = self.__client.get_power() - frequency = self.__client.get_frequency() - power_factors = self.__client.get_power_factors() - imported = self.__client.get_imported() - currents = self.__client.get_currents() + counter_state = self.__client.get_counter_state() if self.component_config.configuration.type == "b23": - exported = self.__client.get_exported() + counter_state.exported = self.__client.get_exported() else: - exported = 0 - - counter_state = CounterState( - voltages=voltages, - currents=currents, - powers=powers, - power_factors=power_factors, - imported=imported, - exported=exported, - power=power, - frequency=frequency - ) + counter_state.exported = 0 + self.store.set(counter_state) diff --git a/packages/modules/devices/openwb/openwb_flex/inverter.py b/packages/modules/devices/openwb/openwb_flex/inverter.py index 1761cc01e6..ccceb7db50 100644 --- a/packages/modules/devices/openwb/openwb_flex/inverter.py +++ b/packages/modules/devices/openwb/openwb_flex/inverter.py @@ -54,7 +54,8 @@ def update(self) -> None: inverter_state = InverterState( power=power, exported=exported, - currents=counter_state.currents + currents=counter_state.currents, + serial_number=counter_state.serial_number ) self.store.set(inverter_state)