diff --git a/packages/helpermodules/subdata.py b/packages/helpermodules/subdata.py index 6ed8592708..dce64e761f 100644 --- a/packages/helpermodules/subdata.py +++ b/packages/helpermodules/subdata.py @@ -146,7 +146,14 @@ def on_connect(self, client: mqtt.Client, userdata, flags: dict, rc: int): ("openWB/internal_io/#", 2), ("openWB/optional/#", 2), ("openWB/counter/#", 2), - ("openWB/consumer/#", 2), + ("openWB/consumer/get/#", 2), + ("openWB/consumer/+/config", 2), + ("openWB/consumer/+/extra_meter", 2), + ("openWB/consumer/+/module", 2), + ("openWB/consumer/+/usage", 2), + ("openWB/consumer/+/get/#", 2), + ("openWB/consumer/+/set/#", 2), + ("openWB/consumer/+/control_parameter/#", 2), ("openWB/command/command_completed", 2), ("openWB/internal_chargepoint/#", 2), # MQTT Bridge Topics vor "openWB/system/+" abonnieren, damit sie auch vor @@ -1261,6 +1268,9 @@ def process_consumer_topic(self, client: mqtt.Client, var: Dict[str, Consumer], con.device_descriptor.configuration_factory, consumer_config) var["consumer"+index].module = con.create_consumer(config) var["consumer"+index].data.module = config + client.subscribe(f"openWB/consumer/{index}/module/simulation", 2) + self.processing_counter.add_task() + Pub().pub("openWB/system/subdata_initialized", True) except Exception: fault_str = ( f"Verbraucher {index}: Modul für " @@ -1270,6 +1280,9 @@ def process_consumer_topic(self, client: mqtt.Client, var: Dict[str, Consumer], var["consumer"+index].data.get.fault_state = 2 var["consumer"+index].data.get.fault_str = fault_str pub_system_message({}, fault_str, MessageType.ERROR) + elif re.search("openWB/consumer/[0-9]+/module/simulation$", msg.topic) is not None: + var["consumer"+index].module.sim_counter.data = dataclass_from_dict( + SimCounterState, decode_payload(msg.payload)) elif re.search("openWB/consumer/[0-9]+/config", msg.topic) is not None: self.set_json_payload_class(var["consumer"+index].data.config, msg) elif re.search("openWB/consumer/[0-9]+/get", msg.topic) is not None: diff --git a/packages/modules/common/configurable_consumer.py b/packages/modules/common/configurable_consumer.py index f1d4113ddf..bc056e40fd 100644 --- a/packages/modules/common/configurable_consumer.py +++ b/packages/modules/common/configurable_consumer.py @@ -5,7 +5,6 @@ from helpermodules import timecheck from helpermodules.pub import Pub from modules.common.abstract_consumer import CurrentValues -from modules.common.abstract_device import AbstractCounter from modules.common.component_context import SingleComponentUpdateContext from modules.common.component_state import ConsumerState from modules.common.component_type import ComponentType @@ -79,10 +78,15 @@ def update(self): imported, exported = self.peak_filter.check_values( consumer_state.power, consumer_state.imported, - consumer_state.exported if consumer_state.exported is not None else 0) - if imported != consumer_state.imported or exported != consumer_state.exported: - consumer_state.imported = imported - consumer_state.exported = exported + consumer_state.exported) + if consumer_state.imported is None or consumer_state.exported is None: + simulated_imported, simulated_exported = self.sim_counter.sim_count(consumer_state.power) + if consumer_state.imported is None: + imported = simulated_imported + if consumer_state.exported is None: + exported = simulated_exported + consumer_state.imported = imported + consumer_state.exported = exported self.store.set(consumer_state) def set_power_limit(self, power_limit: float, data: SetLimitData) -> None: @@ -100,10 +104,3 @@ def switch_off(self) -> None: def send_values(self, values: CurrentValues) -> None: with SingleComponentUpdateContext(self.fault_state): self.module_send_values(values) - - -def dependency_injection_devices_components(component: AbstractCounter): - component.sim_counter.component_type = ComponentType.CONSUMER.value - component.store = get_component_value_store(ComponentType.CONSUMER.value, component.component_config.id) - component.fault_state.component_info.type = ComponentType.CONSUMER.value - return component diff --git a/packages/modules/common/simcount/_simcounter.py b/packages/modules/common/simcount/_simcounter.py index 6606ef5658..8729db05ef 100644 --- a/packages/modules/common/simcount/_simcounter.py +++ b/packages/modules/common/simcount/_simcounter.py @@ -1,4 +1,4 @@ -from typing import Tuple, Optional +from typing import Optional, Tuple from modules.common.component_type import ComponentType, special_to_general_type_mapping from modules.common.simcount._simcount import sim_count diff --git a/packages/modules/common/simcount/_simcounter_store.py b/packages/modules/common/simcount/_simcounter_store.py index 144bed19f4..97c74c07e4 100644 --- a/packages/modules/common/simcount/_simcounter_store.py +++ b/packages/modules/common/simcount/_simcounter_store.py @@ -3,7 +3,7 @@ from control import data from helpermodules import pub -from helpermodules.utils.topic_parser import get_second_index +from helpermodules.utils.topic_parser import get_index, get_second_index from modules.common.component_type import ComponentType, type_to_topic_mapping from modules.common.simcount.simcounter_state import SimCounterState @@ -29,8 +29,11 @@ def save(self, topic: str, state: SimCounterState): def restore_last_energy(topic: str, value: str, component_type: ComponentType): try: - module_type = type_to_topic_mapping(component_type.value) - module = getattr(data.data, f"{module_type}_data")[f"{module_type}{get_second_index(topic)}"].data.get + if component_type == ComponentType.CONSUMER: + module = data.data.consumer_data[f"consumer{get_index(topic)}"].data.get + else: + module_type = type_to_topic_mapping(component_type.value) + module = getattr(data.data, f"{module_type}_data")[f"{module_type}{get_second_index(topic)}"].data.get return getattr(module, value) except AttributeError: if (value == "imported" and component_type == ComponentType.INVERTER): diff --git a/packages/modules/common/simcount/_simcounter_store_test.py b/packages/modules/common/simcount/_simcounter_store_test.py new file mode 100644 index 0000000000..37728ec69a --- /dev/null +++ b/packages/modules/common/simcount/_simcounter_store_test.py @@ -0,0 +1,17 @@ +from types import SimpleNamespace + +import pytest + +from control import data +from modules.common.component_type import ComponentType +from modules.common.simcount._simcounter_store import restore_last_energy + + +@pytest.mark.parametrize(("value", "expected"), [("imported", 1200), ("exported", 25)]) +def test_restore_last_energy_reads_consumer_state(monkeypatch, value, expected): + consumer = SimpleNamespace(data=SimpleNamespace(get=SimpleNamespace(imported=1200, exported=25))) + monkeypatch.setattr(data, "data", SimpleNamespace(consumer_data={"consumer3": consumer})) + + actual = restore_last_energy("openWB/set/consumer/3/module/", value, ComponentType.CONSUMER) + + assert actual == expected diff --git a/packages/modules/consumers/askoma/askoheat/consumer.py b/packages/modules/consumers/askoma/askoheat/consumer.py index 8ec2495e4b..fa448f6e56 100644 --- a/packages/modules/consumers/askoma/askoheat/consumer.py +++ b/packages/modules/consumers/askoma/askoheat/consumer.py @@ -3,10 +3,8 @@ from typing import Optional 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.modbus import ModbusDataType, ModbusTcpClient_ -from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.askoma.askoheat.config import Askoheat log = logging.getLogger(__name__) @@ -14,23 +12,18 @@ def create_consumer(config: Askoheat): client: Optional[ModbusTcpClient_] = None - sim_counter: Optional[SimCounterConsumer] = None def initializer(): - nonlocal client, sim_counter + nonlocal client client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) def error_handler() -> None: initializer() def update() -> ConsumerState: power = client.read_input_registers(110, ModbusDataType.INT_16, unit=config.configuration.modbus_id) - imported, exported = sim_counter.sim_count(power) return ConsumerState( power=power, - imported=imported, - exported=exported, temperatures=[client.read_input_registers(638, ModbusDataType.INT_16, unit=config.configuration.modbus_id)] ) diff --git a/packages/modules/consumers/daikin/daikin_homehub_altherma/consumer.py b/packages/modules/consumers/daikin/daikin_homehub_altherma/consumer.py index 31ac5ebe9b..ea739736f4 100644 --- a/packages/modules/consumers/daikin/daikin_homehub_altherma/consumer.py +++ b/packages/modules/consumers/daikin/daikin_homehub_altherma/consumer.py @@ -4,10 +4,8 @@ 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.modbus import ModbusDataType, ModbusTcpClient_ -from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.daikin.daikin_homehub_altherma.config import DaikinAltherma log = logging.getLogger(__name__) @@ -15,19 +13,16 @@ def create_consumer(config: DaikinAltherma): client: Optional[ModbusTcpClient_] = None - sim_counter: Optional[SimCounterConsumer] = None def initializer(): - nonlocal client, sim_counter + nonlocal client client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) def update() -> ConsumerState: # Reg 51: Stromverbrauch Wärmepumpe, Pow16 (raw = kW * 100) power = client.read_input_registers( 50, ModbusDataType.INT_16, unit=config.configuration.modbus_id) * 10 - imported, exported = sim_counter.sim_count(power) - return ConsumerState(power=power, imported=imported, exported=exported) + return ConsumerState(power=power) def switch_on() -> None: # Reg 56: Smart-Grid-Modus, 2 = Empfehlung ein (Boost) diff --git a/packages/modules/consumers/ego/ego/consumer.py b/packages/modules/consumers/ego/ego/consumer.py index cf84e0a683..376f9f8a65 100644 --- a/packages/modules/consumers/ego/ego/consumer.py +++ b/packages/modules/consumers/ego/ego/consumer.py @@ -5,10 +5,8 @@ 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.modbus import ModbusDataType, ModbusTcpClient_ -from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.ego.ego.config import Ego log = logging.getLogger(__name__) @@ -16,12 +14,10 @@ def create_consumer(config: Ego): client: Optional[ModbusTcpClient_] = None - sim_counter: Optional[SimCounterConsumer] = None def initializer(): - nonlocal client, sim_counter + nonlocal client client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) def send_values(values: CurrentValues) -> None: unit = config.configuration.modbus_id @@ -40,12 +36,9 @@ def update() -> ConsumerState: power += client.read_holding_registers(4128, ModbusDataType.UINT_16, unit=unit) if status & 0x04: power += client.read_holding_registers(4160, ModbusDataType.UINT_16, unit=unit) - imported, exported = sim_counter.sim_count(power) return ConsumerState( power=power, - imported=imported, - exported=exported ) def set_power_limit(power_limit: Optional[float], data: SetLimitData) -> None: diff --git a/packages/modules/consumers/ems_esp/ems_esp/consumer.py b/packages/modules/consumers/ems_esp/ems_esp/consumer.py index 802cbff11c..b19460b451 100644 --- a/packages/modules/consumers/ems_esp/ems_esp/consumer.py +++ b/packages/modules/consumers/ems_esp/ems_esp/consumer.py @@ -5,9 +5,7 @@ from modules.common import req 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.ems_esp.ems_esp.config import EmsEsp log = logging.getLogger(__name__) @@ -15,14 +13,12 @@ def create_consumer(config: EmsEsp): session: Optional[req.CustomSession] = None - sim_counter: Optional[SimCounterConsumer] = None base_url: str = "" headers: dict = {} def initializer(): - nonlocal session, sim_counter, base_url, headers + nonlocal session, base_url, headers session = req.get_http_session() - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) # "heatpump" ist der EMS-ESP-Gerätename für eine reine Wärmepumpe; Hybridanlagen mit # Gas-/Ölkessel laufen zB unter "boiler" (https://emsesp.org/All-Entities). base_url = f"http://{config.configuration.ip_address}/api/heatpump" @@ -48,13 +44,7 @@ def update() -> ConsumerState: f"Entity 'hpcurrpower' nicht in der Antwort von {base_url} enthalten - " f"vorhandene Werte: {list(values.keys())}") power = float(values["hpcurrpower"]) - imported, exported = sim_counter.sim_count(power) - - return ConsumerState( - power=power, - imported=imported, - exported=exported - ) + return ConsumerState(power=power) def set_power_limit(power_limit: Optional[float], data: SetLimitData) -> None: # pvmaxcomp wirkt nur bei aktivem SG-Ready-Boost (Eingang 4); bei SUSPENDABLE_TUNABLE ruft diff --git a/packages/modules/consumers/generic/dac/consumer.py b/packages/modules/consumers/generic/dac/consumer.py index 71a74988ae..5e71162336 100644 --- a/packages/modules/consumers/generic/dac/consumer.py +++ b/packages/modules/consumers/generic/dac/consumer.py @@ -2,10 +2,8 @@ import logging from typing import Optional from modules.common.abstract_device import DeviceDescriptor -from modules.common.component_type import ComponentType from modules.common.configurable_consumer import ConfigurableConsumer, SetLimitData from modules.common.modbus import ModbusTcpClient_ -from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.generic.dac.config import Dac from modules.consumers.generic.dac.model import Model @@ -14,12 +12,10 @@ def create_consumer(config: Dac): client: Optional[ModbusTcpClient_] = None - sim_counter: Optional[SimCounterConsumer] = None def initializer(): - nonlocal client, sim_counter + nonlocal client client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) def error_handler() -> None: initializer() diff --git a/packages/modules/consumers/generic/http/consumer.py b/packages/modules/consumers/generic/http/consumer.py index 2d97ce2262..72dcd4025c 100644 --- a/packages/modules/consumers/generic/http/consumer.py +++ b/packages/modules/consumers/generic/http/consumer.py @@ -5,9 +5,8 @@ from modules.common import req 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 helpermodules.utils._get_default import get_default from modules.consumers.generic.http.config import Http from modules.devices.generic.http.api import (create_post_function, create_request_function, create_request_function_array) @@ -16,7 +15,6 @@ def create_consumer(config: Http): session: Optional[req.CustomSession] = None - sim_counter: Optional[SimCounterConsumer] = None get_power: Optional[Callable] = None get_imported: Optional[Callable] = None get_exported: Optional[Callable] = None @@ -27,11 +25,10 @@ def create_consumer(config: Http): post_switch_off: Optional[Callable] = None def initializer(): - nonlocal session, sim_counter + nonlocal session nonlocal get_power, get_imported, get_exported, get_currents, get_temperatures nonlocal post_set_power_limit, post_switch_on, post_switch_off session = req.get_http_session() - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) get_power = create_request_function(config.configuration.url, config.configuration.power_path) get_imported = create_request_function(config.configuration.url, config.configuration.imported_path) @@ -46,14 +43,13 @@ def initializer(): post_switch_on = create_post_function(config.configuration.url, config.configuration.switch_on_path) post_switch_off = create_post_function(config.configuration.url, config.configuration.switch_off_path) - def update() -> None: + def update() -> ConsumerState: power = get_power(session) - exported = get_exported(session) - imported = get_imported(session) + exported = get_exported(session) if get_exported is not None else get_default(ConsumerState, "exported") + imported = get_imported(session) if get_imported is not None else get_default(ConsumerState, "imported") + currents = get_currents(session) temperatures = get_temperatures(session) - if imported is None or exported is None: - imported, exported = sim_counter.sim_count(power) return ConsumerState( power=power, currents=currents, diff --git a/packages/modules/consumers/generic/json/consumer.py b/packages/modules/consumers/generic/json/consumer.py index 0f816f06a1..ab9603aa2a 100644 --- a/packages/modules/consumers/generic/json/consumer.py +++ b/packages/modules/consumers/generic/json/consumer.py @@ -3,12 +3,11 @@ from typing import Callable, Optional import jq +from helpermodules.utils._get_default import get_default from modules.common import req 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.json.config import Json log = logging.getLogger(__name__) @@ -16,7 +15,6 @@ def create_consumer(config: Json): session: Optional[req.CustomSession] = None - sim_counter: Optional[SimCounterConsumer] = None jq_power = None jq_imported = None jq_exported = None @@ -45,10 +43,9 @@ def post_function(params: dict): return post_function def initializer(): - nonlocal session, sim_counter + nonlocal session nonlocal jq_set_power_limit, jq_switch_on, jq_switch_off session = req.get_http_session() - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) _compile_jq_filters() jq_set_power_limit = create_post_function(config.configuration.jq_set_power_limit) @@ -60,11 +57,10 @@ def update() -> ConsumerState: power = float(jq_power.input(response).first()) temperatures = float(jq_temperatures.input(response).first()) if jq_temperatures is not None else None currents = ([float(j.input(response).first()) for j in jq_currents] if jq_currents is not None else None) - if jq_imported is None or jq_exported is None: - imported, exported = sim_counter.sim_count(power) - else: - imported = float(jq_imported.input(response).first()) - exported = float(jq_exported.input(response).first()) + imported = float(jq_imported.input(response).first() + ) if jq_imported is not None else get_default(ConsumerState, "imported") + exported = float(jq_exported.input(response).first() + ) if jq_exported is not None else get_default(ConsumerState, "exported") return ConsumerState( power=power, diff --git a/packages/modules/consumers/generic/mqtt/consumer.py b/packages/modules/consumers/generic/mqtt/consumer.py index faad8f6d8f..811715aa0b 100644 --- a/packages/modules/consumers/generic/mqtt/consumer.py +++ b/packages/modules/consumers/generic/mqtt/consumer.py @@ -1,6 +1,5 @@ #!/usr/bin/env python3 import logging -from typing import Optional from helpermodules.broker import BrokerClient from helpermodules.pub import Pub @@ -9,21 +8,13 @@ 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)) @@ -44,9 +35,6 @@ def on_message(client, userdata, message): 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=power, imported=imported, @@ -77,7 +65,6 @@ 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, diff --git a/packages/modules/consumers/idm/idm/consumer.py b/packages/modules/consumers/idm/idm/consumer.py index f5f0650c82..510ed8dad6 100644 --- a/packages/modules/consumers/idm/idm/consumer.py +++ b/packages/modules/consumers/idm/idm/consumer.py @@ -6,10 +6,8 @@ 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.modbus import ModbusDataType, ModbusTcpClient_ -from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.idm.idm.config import Idm log = logging.getLogger(__name__) @@ -17,12 +15,10 @@ def create_consumer(config: Idm): client: Optional[ModbusTcpClient_] = None - sim_counter: Optional[SimCounterConsumer] = None def initializer(): - nonlocal client, sim_counter + nonlocal client client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) def error_handler() -> None: initializer() @@ -70,13 +66,7 @@ def update() -> ConsumerState: power = client.read_input_registers( 4122, ModbusDataType.FLOAT_32, unit=config.configuration.modbus_id) power *= 1000 - imported, exported = sim_counter.sim_count(power) - - return ConsumerState( - power=power, - imported=imported, - exported=exported - ) + return ConsumerState(power=power) def set_power_limit(power_limit: float, data: SetLimitData) -> None: # Schreibt den von openWB berechneten Überschuss in Register 74 (PV-Überschuss [kW]). diff --git a/packages/modules/consumers/kermi/kermi/consumer.py b/packages/modules/consumers/kermi/kermi/consumer.py index 82c9283ce5..7b2c4d9b30 100644 --- a/packages/modules/consumers/kermi/kermi/consumer.py +++ b/packages/modules/consumers/kermi/kermi/consumer.py @@ -4,10 +4,8 @@ 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.modbus import ModbusDataType, ModbusTcpClient_ -from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.kermi.kermi.config import Kermi log = logging.getLogger(__name__) @@ -15,24 +13,16 @@ def create_consumer(config: Kermi): client: Optional[ModbusTcpClient_] = None - sim_counter: Optional[SimCounterConsumer] = None def initializer(): - nonlocal client, sim_counter + nonlocal client client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) def update() -> ConsumerState: # Reg 108: aktuelle Leistungsaufnahme, Auflösung 100W power = client.read_holding_registers( 108, ModbusDataType.INT_16, unit=config.configuration.modbus_id) * 100 - imported, exported = sim_counter.sim_count(power) - - return ConsumerState( - power=power, - imported=imported, - exported=exported - ) + return ConsumerState(power=power) def set_power_limit(power_limit: Optional[float], data: SetLimitData) -> None: # Reg 301: PV-Überschussleistung, Auflösung 0,1W (raw = W * 10) diff --git a/packages/modules/consumers/lambda_/lambda_/consumer.py b/packages/modules/consumers/lambda_/lambda_/consumer.py index 6c8cf7ba0e..43b59c7fc3 100644 --- a/packages/modules/consumers/lambda_/lambda_/consumer.py +++ b/packages/modules/consumers/lambda_/lambda_/consumer.py @@ -6,10 +6,8 @@ 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.modbus import ModbusDataType, ModbusTcpClient_ -from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.lambda_.lambda_.config import Lambda log = logging.getLogger(__name__) @@ -17,12 +15,10 @@ def create_consumer(config: Lambda): client: Optional[ModbusTcpClient_] = None - sim_counter: Optional[SimCounterConsumer] = None def initializer(): - nonlocal client, sim_counter + nonlocal client client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) def error_handler() -> None: initializer() @@ -38,13 +34,7 @@ def send_values(values: CurrentValues) -> None: def update() -> ConsumerState: power = client.read_holding_registers( 103, ModbusDataType.INT_16, unit=config.configuration.modbus_id) - imported, exported = sim_counter.sim_count(power) - - return ConsumerState( - power=power, - imported=imported, - exported=exported - ) + return ConsumerState(power=power) def set_power_limit(power_limit: float, data: SetLimitData) -> None: # Schreibt den von openWB berechneten Überschuss in Register 102 (E-Manager Bezug/Einspeisung). diff --git a/packages/modules/consumers/lg_therma/lg_therma/consumer.py b/packages/modules/consumers/lg_therma/lg_therma/consumer.py index 2eaccafe4d..3025a43351 100644 --- a/packages/modules/consumers/lg_therma/lg_therma/consumer.py +++ b/packages/modules/consumers/lg_therma/lg_therma/consumer.py @@ -4,10 +4,8 @@ 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 from modules.common.modbus import ModbusDataType, ModbusTcpClient_ -from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.lg_therma.lg_therma.config import LgTherma log = logging.getLogger(__name__) @@ -15,12 +13,10 @@ def create_consumer(config: LgTherma): client: Optional[ModbusTcpClient_] = None - sim_counter: Optional[SimCounterConsumer] = None def initializer(): - nonlocal client, sim_counter + nonlocal client client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) def switch_on() -> None: # Reg 9: Energy State, 3 = Ein-Empfehlung (Boost) @@ -33,13 +29,7 @@ def switch_off() -> None: def update() -> ConsumerState: # Reg 35: elektrische Leistungsaufnahme [W] power = client.read_input_registers(35, ModbusDataType.UINT_16, unit=config.configuration.modbus_id) - imported, exported = sim_counter.sim_count(power) - - return ConsumerState( - power=power, - imported=imported, - exported=exported - ) + return ConsumerState(power=power) return ConfigurableConsumer(consumer_config=config, initializer=initializer, diff --git a/packages/modules/consumers/luxtronik/luxtronik/consumer.py b/packages/modules/consumers/luxtronik/luxtronik/consumer.py index 2b662938c3..8080a8ac98 100644 --- a/packages/modules/consumers/luxtronik/luxtronik/consumer.py +++ b/packages/modules/consumers/luxtronik/luxtronik/consumer.py @@ -4,10 +4,8 @@ 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 from modules.common.modbus import ModbusDataType, ModbusTcpClient_ -from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.luxtronik.luxtronik.config import Luxtronik log = logging.getLogger(__name__) @@ -15,12 +13,10 @@ def create_consumer(config: Luxtronik): client: Optional[ModbusTcpClient_] = None - sim_counter: Optional[SimCounterConsumer] = None def initializer(): - nonlocal client, sim_counter + nonlocal client client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) def switch_on() -> None: unit = config.configuration.modbus_id @@ -43,13 +39,7 @@ def update() -> ConsumerState: # Reg 10301: el. Leistungsaufnahme, Auflösung 100W (kW x0.1) power = client.read_input_registers( 10301, ModbusDataType.UINT_16, unit=config.configuration.modbus_id) * 100 - imported, exported = sim_counter.sim_count(power) - - return ConsumerState( - power=power, - imported=imported, - exported=exported - ) + return ConsumerState(power=power) return ConfigurableConsumer(consumer_config=config, initializer=initializer, diff --git a/packages/modules/consumers/mtec/mtec/consumer.py b/packages/modules/consumers/mtec/mtec/consumer.py index 277c18dc57..ee36bb2369 100644 --- a/packages/modules/consumers/mtec/mtec/consumer.py +++ b/packages/modules/consumers/mtec/mtec/consumer.py @@ -4,10 +4,8 @@ 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.modbus import ModbusDataType, ModbusTcpClient_ -from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.mtec.mtec.config import Mtec log = logging.getLogger(__name__) @@ -15,23 +13,15 @@ def create_consumer(config: Mtec): client: Optional[ModbusTcpClient_] = None - sim_counter: Optional[SimCounterConsumer] = None def initializer(): - nonlocal client, sim_counter + nonlocal client client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) def update() -> ConsumerState: # Reg 707: elektrische Leistungsaufnahme [W] power = client.read_holding_registers(707, ModbusDataType.INT_16, unit=config.configuration.modbus_id) - imported, exported = sim_counter.sim_count(power) - - return ConsumerState( - power=power, - imported=imported, - exported=exported - ) + return ConsumerState(power=power) def set_power_limit(power_limit: Optional[float], data: SetLimitData) -> None: # Reg 1000: PV-Überschussleistung [W] diff --git a/packages/modules/consumers/my_pv/acthor/consumer.py b/packages/modules/consumers/my_pv/acthor/consumer.py index f7fe9384e7..1873e06e99 100644 --- a/packages/modules/consumers/my_pv/acthor/consumer.py +++ b/packages/modules/consumers/my_pv/acthor/consumer.py @@ -4,10 +4,8 @@ from typing import Optional 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.modbus import ModbusDataType, ModbusTcpClient_ -from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.my_pv.acthor.config import Acthor log = logging.getLogger(__name__) @@ -40,12 +38,10 @@ class Register(IntEnum): def create_consumer(config: Acthor): client: Optional[ModbusTcpClient_] = None - sim_counter: Optional[SimCounterConsumer] = None def initializer(): - nonlocal client, sim_counter + nonlocal client client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) def error_handler() -> None: initializer() @@ -54,11 +50,8 @@ def update() -> ConsumerState: resp = client.read_holding_registers_bulk( Register.POWER, 35, mapping=REG_MAPPING, unit=config.configuration.modbus_id) power = resp[Register.POWER] - imported, exported = sim_counter.sim_count(power) return ConsumerState( power=power, - imported=imported, - exported=exported, temperatures=[resp[Register.TEMP0]/10, resp[Register.TEMP1]/10, resp[Register.TEMP2]/10] ) diff --git a/packages/modules/consumers/my_pv/elwa_e/consumer.py b/packages/modules/consumers/my_pv/elwa_e/consumer.py index 048ecc3404..709d44a38e 100644 --- a/packages/modules/consumers/my_pv/elwa_e/consumer.py +++ b/packages/modules/consumers/my_pv/elwa_e/consumer.py @@ -4,10 +4,8 @@ from modules.common.abstract_device import DeviceDescriptor from typing import Optional 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.modbus import ModbusDataType, ModbusTcpClient_ -from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.my_pv.elwa_e.config import Elwa log = logging.getLogger(__name__) @@ -43,14 +41,12 @@ def create_consumer(config: Elwa): client: Optional[ModbusTcpClient_] = None fuse = 1 power = 0 - sim_counter: Optional[SimCounterConsumer] = None state = None def initializer(): - nonlocal client, fuse, sim_counter + nonlocal client, fuse client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) fuse = client.read_input_registers(1014, ModbusDataType.INT_16, unit=config.configuration.modbus_id) - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) def error_handler() -> None: initializer() @@ -63,11 +59,8 @@ def update() -> ConsumerState: state = resp[Register.STATE] if state > 200: raise Exception(f"Elwa-E meldet einen Fehler-Status: {STATE_MAPPING.get(state, 'Unknown fault state')}") - imported, exported = sim_counter.sim_count(power) return ConsumerState( power=power, - imported=imported, - exported=exported, temperatures=[resp[Register.TEMP0]/10] ) diff --git a/packages/modules/consumers/mystrom/mystrom/consumer.py b/packages/modules/consumers/mystrom/mystrom/consumer.py index 4d7ab16166..54f136a27a 100644 --- a/packages/modules/consumers/mystrom/mystrom/consumer.py +++ b/packages/modules/consumers/mystrom/mystrom/consumer.py @@ -4,9 +4,7 @@ from typing import Optional 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 -from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.mystrom.mystrom.config import MyStrom log = logging.getLogger(__name__) @@ -14,12 +12,10 @@ def create_consumer(config: MyStrom): session: Optional[req.CustomSession] = None - sim_counter: Optional[SimCounterConsumer] = None def initializer(): - nonlocal session, sim_counter + nonlocal session session = req.get_http_session() - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) def error_handler() -> None: initializer() @@ -29,11 +25,8 @@ def update() -> ConsumerState: power = resp["power"] relais = resp["relay"] temp = float(resp["temperature"]) - imported, exported = sim_counter.sim_count(power) return ConsumerState( power=power, - imported=imported, - exported=exported, temperatures=[temp], state=relais ) diff --git a/packages/modules/consumers/nibe/nibe_s_series/consumer.py b/packages/modules/consumers/nibe/nibe_s_series/consumer.py index 8357cff01f..d3b8012999 100644 --- a/packages/modules/consumers/nibe/nibe_s_series/consumer.py +++ b/packages/modules/consumers/nibe/nibe_s_series/consumer.py @@ -3,10 +3,8 @@ from typing import Optional 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 from modules.common.modbus import ModbusDataType, ModbusTcpClient_ -from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.nibe.nibe_s_series.config import Nibe log = logging.getLogger(__name__) @@ -14,12 +12,10 @@ def create_consumer(config: Nibe): client: Optional[ModbusTcpClient_] = None - sim_counter: Optional[SimCounterConsumer] = None def initializer(): - nonlocal client, sim_counter + nonlocal client client = ModbusTcpClient_(config.configuration.ip_address, 502) - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) def error_handler() -> None: initializer() @@ -27,12 +23,7 @@ def error_handler() -> None: def update() -> ConsumerState: power = client.read_input_registers(2166, ModbusDataType.UINT_32, unit=config.configuration.modbus_id) # / 10 lt Doku? - imported, exported = sim_counter.sim_count(power) - return ConsumerState( - power=power, - imported=imported, - exported=exported - ) + return ConsumerState(power=power) return ConfigurableConsumer(consumer_config=config, initializer=initializer, diff --git a/packages/modules/consumers/ovum/ovum/consumer.py b/packages/modules/consumers/ovum/ovum/consumer.py index 34299c457f..f63e04a766 100644 --- a/packages/modules/consumers/ovum/ovum/consumer.py +++ b/packages/modules/consumers/ovum/ovum/consumer.py @@ -5,10 +5,8 @@ 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.modbus import ModbusDataType, ModbusTcpClient_ -from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.ovum.ovum.config import Ovum log = logging.getLogger(__name__) @@ -16,12 +14,10 @@ def create_consumer(config: Ovum): client: Optional[ModbusTcpClient_] = None - sim_counter: Optional[SimCounterConsumer] = None def initializer(): - nonlocal client, sim_counter + nonlocal client client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) def error_handler() -> None: initializer() @@ -46,13 +42,7 @@ def update() -> ConsumerState: # Reg 708: elektrische Leistungsaufnahme Wärmepumpe [kW]*100 -> Watt = Rohwert * 10 power = client.read_holding_registers(708, ModbusDataType.INT_16, unit=config.configuration.modbus_id) * 10 - imported, exported = sim_counter.sim_count(power) - - return ConsumerState( - power=power, - imported=imported, - exported=exported - ) + return ConsumerState(power=power) def set_power_limit(power_limit: Optional[float], data: SetLimitData) -> None: # ConsumerUsage.SUSPENDABLE_TUNABLE: externe Leistungsvorgabe. Ist-Modus wird vor dem diff --git a/packages/modules/consumers/ratiotherm/ratiotherm/consumer.py b/packages/modules/consumers/ratiotherm/ratiotherm/consumer.py index fd35d4410b..37c1f3cb32 100644 --- a/packages/modules/consumers/ratiotherm/ratiotherm/consumer.py +++ b/packages/modules/consumers/ratiotherm/ratiotherm/consumer.py @@ -2,10 +2,8 @@ import logging from typing import Optional from modules.common.abstract_device import DeviceDescriptor -from modules.common.component_type import ComponentType from modules.common.configurable_consumer import ConfigurableConsumer, SetLimitData from modules.common.modbus import ModbusDataType, ModbusTcpClient_ -from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.ratiotherm.ratiotherm.config import Ratiotherm log = logging.getLogger(__name__) @@ -13,12 +11,10 @@ def create_consumer(config: Ratiotherm): client: Optional[ModbusTcpClient_] = None - sim_counter: Optional[SimCounterConsumer] = None def initializer(): - nonlocal client, sim_counter + nonlocal client client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) def error_handler() -> None: initializer() diff --git a/packages/modules/consumers/shelly/shelly_em/consumer.py b/packages/modules/consumers/shelly/shelly_em/consumer.py index 001dcec6af..cc36cd877c 100644 --- a/packages/modules/consumers/shelly/shelly_em/consumer.py +++ b/packages/modules/consumers/shelly/shelly_em/consumer.py @@ -1,21 +1,16 @@ #!/usr/bin/env python3 from modules.common.abstract_device import DeviceDescriptor -from typing import Optional from modules.common.component_state import ConsumerState -from modules.common.component_type import ComponentType from modules.common.configurable_consumer import ConfigurableConsumer -from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.shelly.shelly_em.config import ShellyEM from modules.devices.shelly.shelly.status_handler import get_generation, request_status, parse_data def create_consumer(config: ShellyEM): - sim_counter: Optional[SimCounterConsumer] = None generation: int = 1 def initializer(): - nonlocal sim_counter, generation - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) + nonlocal generation generation, _ = get_generation(config.configuration.ip_address) def error_handler() -> None: @@ -24,11 +19,8 @@ def error_handler() -> None: def update() -> ConsumerState: status = request_status(config.configuration.ip_address, generation) powers, voltages, currents, _, power, _ = parse_data(1, config.configuration.factor, status) - imported, exported = sim_counter.sim_count(power) consumer_state = ConsumerState( power=power, - imported=imported, - exported=exported, powers=powers, ) if voltages is not None: diff --git a/packages/modules/consumers/shelly/shelly_pm/consumer.py b/packages/modules/consumers/shelly/shelly_pm/consumer.py index e1bd62c5c9..26c4035965 100644 --- a/packages/modules/consumers/shelly/shelly_pm/consumer.py +++ b/packages/modules/consumers/shelly/shelly_pm/consumer.py @@ -3,21 +3,17 @@ from typing import Optional 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 -from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.shelly.shelly_pm.config import ShellyPM from modules.devices.shelly.shelly.status_handler import get_generation, request_status, parse_data def create_consumer(config: ShellyPM): - sim_counter: Optional[SimCounterConsumer] = None model: Optional[str] = None generation: int = 1 def initializer(): - nonlocal sim_counter, generation, model - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) + nonlocal generation, model generation, model = get_generation(config.configuration.ip_address) def error_handler() -> None: @@ -62,11 +58,8 @@ def switch_off() -> None: def update() -> ConsumerState: status = request_status(config.configuration.ip_address, generation) powers, voltages, currents, _, power, _ = parse_data(1, config.configuration.factor, status) - imported, exported = sim_counter.sim_count(power) return ConsumerState( power=power, - imported=imported, - exported=exported, voltages=voltages, currents=currents, powers=powers, diff --git a/packages/modules/consumers/solarfocus/vampair/consumer.py b/packages/modules/consumers/solarfocus/vampair/consumer.py index a8fc735f15..40006ca199 100644 --- a/packages/modules/consumers/solarfocus/vampair/consumer.py +++ b/packages/modules/consumers/solarfocus/vampair/consumer.py @@ -3,33 +3,24 @@ 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.modbus import ModbusDataType, ModbusTcpClient_ -from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.solarfocus.vampair.config import Vampair def create_consumer(config: Vampair): client: Optional[ModbusTcpClient_] = None - sim_counter: Optional[SimCounterConsumer] = None def initializer(): - nonlocal client, sim_counter + nonlocal client client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) def error_handler() -> None: initializer() def update() -> ConsumerState: power = client.read_holding_registers(2322, ModbusDataType.INT_16, unit=config.configuration.modbus_id) - imported, exported = sim_counter.sim_count(power) - return ConsumerState( - power=power, - imported=imported, - exported=exported - ) + return ConsumerState(power=power) def set_power_limit(power_limit: float, data: SetLimitData) -> None: # Elektrische Sollleistung HEMS (PV) diff --git a/packages/modules/consumers/solvis/solvis/consumer.py b/packages/modules/consumers/solvis/solvis/consumer.py index 00d976092c..4c2cce4f6e 100644 --- a/packages/modules/consumers/solvis/solvis/consumer.py +++ b/packages/modules/consumers/solvis/solvis/consumer.py @@ -2,33 +2,24 @@ from typing import Optional 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 from modules.common.modbus import ModbusDataType, ModbusTcpClient_ -from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.solvis.solvis.config import SolvisHeatPump def create_consumer(config: SolvisHeatPump): client: Optional[ModbusTcpClient_] = None - sim_counter: Optional[SimCounterConsumer] = None def initializer(): - nonlocal client, sim_counter + nonlocal client client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) def error_handler() -> None: initializer() def update() -> ConsumerState: power = client.read_input_registers(33545, ModbusDataType.INT_16, unit=config.configuration.modbus_id) * 100 - imported, exported = sim_counter.sim_count(power) - return ConsumerState( - power=power, - imported=imported, - exported=exported - ) + return ConsumerState(power=power) return ConfigurableConsumer(consumer_config=config, initializer=initializer, diff --git a/packages/modules/consumers/stiebel/stiebel/consumer.py b/packages/modules/consumers/stiebel/stiebel/consumer.py index 59ee1b3323..a2700049ec 100644 --- a/packages/modules/consumers/stiebel/stiebel/consumer.py +++ b/packages/modules/consumers/stiebel/stiebel/consumer.py @@ -2,10 +2,8 @@ import logging from typing import Optional from modules.common.abstract_device import DeviceDescriptor -from modules.common.component_type import ComponentType from modules.common.configurable_consumer import ConfigurableConsumer from modules.common.modbus import ModbusDataType, ModbusTcpClient_ -from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.stiebel.stiebel.config import Stiebel log = logging.getLogger(__name__) @@ -13,12 +11,10 @@ def create_consumer(config: Stiebel): client: Optional[ModbusTcpClient_] = None - sim_counter: Optional[SimCounterConsumer] = None def initializer(): - nonlocal client, sim_counter + nonlocal client client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) def error_handler() -> None: initializer() diff --git a/packages/modules/consumers/xtherma/xtherma/consumer.py b/packages/modules/consumers/xtherma/xtherma/consumer.py index e1456fd1d4..763639b120 100644 --- a/packages/modules/consumers/xtherma/xtherma/consumer.py +++ b/packages/modules/consumers/xtherma/xtherma/consumer.py @@ -5,10 +5,8 @@ from helpermodules import timecheck 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.modbus import ModbusDataType, ModbusTcpClient_ -from modules.common.simcount._simcounter import SimCounterConsumer from modules.consumers.xtherma.xtherma.config import Xtherma log = logging.getLogger(__name__) @@ -16,26 +14,18 @@ def create_consumer(config: Xtherma): client: Optional[ModbusTcpClient_] = None - sim_counter: Optional[SimCounterConsumer] = None last_write: Optional[float] = None last_sgready_write: Optional[float] = None def initializer(): - nonlocal client, sim_counter + nonlocal client client = ModbusTcpClient_(config.configuration.ip_address, config.configuration.port) - sim_counter = SimCounterConsumer(config.id, ComponentType.CONSUMER) def update() -> ConsumerState: # Reg 177 (in_total): elektrische Leistungsaufnahme, Auflösung 10W power = client.read_holding_registers( 177, ModbusDataType.UINT_16, unit=config.configuration.modbus_id) * 10 - imported, exported = sim_counter.sim_count(power) - - return ConsumerState( - power=power, - imported=imported, - exported=exported - ) + return ConsumerState(power=power) def set_power_limit(power_limit: Optional[float], data: SetLimitData) -> None: # Reg 70/71 dürfen laut Xtherma-Protokoll höchstens 1x/min beschrieben werden.