diff --git a/packages/modules/consumers/generic/mqtt/consumer.py b/packages/modules/consumers/generic/mqtt/consumer.py index 4eb66275f4..faad8f6d8f 100644 --- a/packages/modules/consumers/generic/mqtt/consumer.py +++ b/packages/modules/consumers/generic/mqtt/consumer.py @@ -1,5 +1,6 @@ #!/usr/bin/env python3 import logging +from typing import Optional from helpermodules.broker import BrokerClient from helpermodules.pub import Pub @@ -8,13 +9,21 @@ from modules.common.abstract_consumer import CurrentValues from modules.common.abstract_device import DeviceDescriptor from modules.common.component_state import ConsumerState +from modules.common.component_type import ComponentType from modules.common.configurable_consumer import ConfigurableConsumer, SetLimitData +from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.generic.mqtt.config import Mqtt log = logging.getLogger(__name__) def create_consumer(config: Mqtt): + sim_counter: Optional[SimCounterConsumer] = None + + def initializer() -> None: + nonlocal sim_counter + sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) + def update() -> ConsumerState: def parse_received_topics(value: str): return received_topics.get(f"{topic_prefix}{value}", get_default(ConsumerState, value)) @@ -32,10 +41,16 @@ def on_message(client, userdata, message): log.debug(f"Empfange MQTT Daten für Verbraucher {config.id}: {received_topics}") topic_prefix = f"openWB/mqtt/consumer/{config.id}/get/" try: + power = received_topics[f"{topic_prefix}power"] + imported = parse_received_topics("imported") + exported = parse_received_topics("exported") + if imported is None or exported is None: + imported, exported = sim_counter.sim_count(power) + return ConsumerState( - power=received_topics[f"{topic_prefix}power"], - imported=parse_received_topics("imported"), - exported=parse_received_topics("exported"), + power=power, + imported=imported, + exported=exported, powers=parse_received_topics("powers"), voltages=parse_received_topics("voltages"), currents=parse_received_topics("currents"), @@ -62,6 +77,7 @@ def send_values(values: CurrentValues) -> None: Pub().pub(f"openWB/set/mqtt/consumer/{config.id}/set/pv_power", values.pv_power) return ConfigurableConsumer(consumer_config=config, + initializer=initializer, update=update, send_values=send_values, set_power_limit=set_power_limit,