Skip to content
Merged
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
22 changes: 19 additions & 3 deletions packages/modules/consumers/generic/mqtt/consumer.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#!/usr/bin/env python3
import logging
from typing import Optional

from helpermodules.broker import BrokerClient
from helpermodules.pub import Pub
Expand All @@ -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))
Expand All @@ -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"),
Expand All @@ -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,
Expand Down