diff --git a/packages/control/counter.py b/packages/control/counter.py index 0ed7e75910..6446cda804 100644 --- a/packages/control/counter.py +++ b/packages/control/counter.py @@ -78,6 +78,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"}) + local_power: float = field(default=0, metadata={"topic": "get/local_power"}) serial_number: Optional[str] = field(default=None, metadata={"topic": "get/serial_number"}) diff --git a/packages/control/counter_all/counter_all.py b/packages/control/counter_all/counter_all.py index 21db99a618..185b464424 100644 --- a/packages/control/counter_all/counter_all.py +++ b/packages/control/counter_all/counter_all.py @@ -135,6 +135,7 @@ def _calc_home_consumption_from_counter( home_consumption = 0.0 not_home_consumption = 0.0 local_power = self._get_local_power_from_counter(element) + data.data.counter_data[f"counter{element['id']}"].data.get.local_power = local_power counter = self._get_component(element) child_home_consumption = self._get_is_home_consumption(counter, parent_home_consumption) @@ -163,8 +164,12 @@ def _calc_home_consumption_from_counter( elif mode == CounterMode.NOT_HOME_CONSUMPTION.value: not_home_consumption += comp.data.get.power else: + if child["type"] == ComponentType.COUNTER.value: + # Bei einem fehlerhaften untergeordneten Zähler wird local_power auf 0 gesetzt, + # da der Zähler bei der Hausverbrauchsberechnung nicht berücksichtigt wird. + data.data.counter_data[f"counter{child['id']}"].data.get.local_power = 0 log.warning( - f"Komponente {element['type']}{comp.num} ist im Fehlerzustand und wird nicht berücksichtigt.") + f"Komponente {child['type']}{comp.num} ist im Fehlerzustand und wird nicht berücksichtigt.") return home_consumption, not_home_consumption diff --git a/packages/helpermodules/setdata.py b/packages/helpermodules/setdata.py index 532f094fab..a9c1e1123b 100644 --- a/packages/helpermodules/setdata.py +++ b/packages/helpermodules/setdata.py @@ -1002,7 +1002,8 @@ def process_counter_topic(self, msg: mqtt.MQTTMessage): 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: + elif ("/get/power" in msg.topic or + "/get/local_power" in msg.topic): self._validate_value( msg, float, [(float("-inf"), float("inf"))]) elif "/get/soc" in msg.topic: diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index 7b7fb3402d..e74d1e529d 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -259,6 +259,7 @@ class UpdateConfig: "^openWB/counter/set/daily_yield_home_consumption$", "^openWB/counter/set/simulation$", "^openWB/counter/[0-9]+/get/voltages$", + "^openWB/counter/[0-9]+/get/local_power$", "^openWB/counter/[0-9]+/get/power$", "^openWB/counter/[0-9]+/get/currents$", "^openWB/counter/[0-9]+/get/powers$",