From 923942c10363a3c456e18fb83a2108d5d23c3c90 Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Wed, 26 Feb 2025 11:20:08 +0100 Subject: [PATCH 1/4] add Janitza inverter --- .../modules/devices/janitza/janitza/config.py | 14 ++++++ .../modules/devices/janitza/janitza/device.py | 8 +++- .../devices/janitza/janitza/inverter.py | 43 +++++++++++++++++++ 3 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 packages/modules/devices/janitza/janitza/inverter.py diff --git a/packages/modules/devices/janitza/janitza/config.py b/packages/modules/devices/janitza/janitza/config.py index ba63b0e06d..79abba28c0 100644 --- a/packages/modules/devices/janitza/janitza/config.py +++ b/packages/modules/devices/janitza/janitza/config.py @@ -36,3 +36,17 @@ def __init__(self, id: int = 0, configuration: JanitzaCounterConfiguration = None) -> None: super().__init__(name, type, id, configuration or JanitzaCounterConfiguration()) + + +class JanitzaInverterConfiguration: + def __init__(self): + pass + + +class JanitzaInverterSetup(ComponentSetup[JanitzaInverterConfiguration]): + def __init__(self, + name: str = "Janitza PV-Zähler", + type: str = "inverter", + id: int = 0, + configuration: JanitzaInverterConfiguration = None) -> None: + super().__init__(name, type, id, configuration or JanitzaInverterConfiguration()) diff --git a/packages/modules/devices/janitza/janitza/device.py b/packages/modules/devices/janitza/janitza/device.py index f3b268be94..666863fefd 100644 --- a/packages/modules/devices/janitza/janitza/device.py +++ b/packages/modules/devices/janitza/janitza/device.py @@ -6,8 +6,8 @@ from modules.common import modbus from modules.common.abstract_device import DeviceDescriptor from modules.common.component_context import SingleComponentUpdateContext -from modules.devices.janitza.janitza import counter -from modules.devices.janitza.janitza.config import Janitza, JanitzaCounterSetup +from modules.devices.janitza.janitza import counter, inverter +from modules.devices.janitza.janitza.config import Janitza, JanitzaCounterSetup, JanitzaInverterSetup log = logging.getLogger(__name__) @@ -17,6 +17,10 @@ def create_counter_component(component_config: JanitzaCounterSetup): return counter.JanitzaCounter(device_config.id, component_config, client, device_config.configuration.modbus_id) + def create_inverter_component(component_config: JanitzaInverterSetup): + return inverter.JanitzaInverter(device_config.id, component_config, client, + device_config.configuration.modbus_id) + def update_components(components: Iterable[counter.JanitzaCounter]): with client: for component in components: diff --git a/packages/modules/devices/janitza/janitza/inverter.py b/packages/modules/devices/janitza/janitza/inverter.py new file mode 100644 index 0000000000..13f37e9250 --- /dev/null +++ b/packages/modules/devices/janitza/janitza/inverter.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 +from typing import Dict, Union + +from dataclass_utils import dataclass_from_dict +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.modbus import ModbusDataType +from modules.common.simcount import SimCounter +from modules.common.store import get_counter_value_store +from modules.devices.janitza.janitza.config import JanitzaInverterSetup + + +class JanitzaCounter(AbstractCounter): + def __init__(self, + device_id: int, + component_config: Union[Dict, JanitzaInverterSetup], + tcp_client: modbus.ModbusTcpClient_, + modbus_id: int) -> None: + self.__device_id = device_id + self.component_config = dataclass_from_dict(JanitzaInverterSetup, component_config) + self.__tcp_client = tcp_client + self.__modbus_id = modbus_id + self.sim_counter = SimCounter(self.__device_id, self.component_config.id, prefix="pv") + self.store = get_counter_value_store(self.component_config.id) + self.fault_state = FaultState(ComponentInfo.from_component_config(self.component_config)) + + def update(self): + with self.__tcp_client: + power = self.__tcp_client.read_holding_registers(19026, ModbusDataType.FLOAT_32, unit=self.__modbus_id) * -1 + + _, exported = self.sim_counter.sim_count(power) + + counter_state = CounterState( + power=power, + exported=exported + ) + self.store.set(counter_state) + + +component_descriptor = ComponentDescriptor(configuration_factory=JanitzaInverterSetup) From b5421ca8da18aa3e55161870121db7cfb2d88a06 Mon Sep 17 00:00:00 2001 From: benderl Date: Tue, 18 Mar 2025 08:39:21 +0100 Subject: [PATCH 2/4] Update packages/modules/devices/janitza/janitza/inverter.py Co-authored-by: LKuemmel <76958050+LKuemmel@users.noreply.github.com> --- packages/modules/devices/janitza/janitza/inverter.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/modules/devices/janitza/janitza/inverter.py b/packages/modules/devices/janitza/janitza/inverter.py index 13f37e9250..45b938a0e8 100644 --- a/packages/modules/devices/janitza/janitza/inverter.py +++ b/packages/modules/devices/janitza/janitza/inverter.py @@ -28,8 +28,7 @@ def __init__(self, self.fault_state = FaultState(ComponentInfo.from_component_config(self.component_config)) def update(self): - with self.__tcp_client: - power = self.__tcp_client.read_holding_registers(19026, ModbusDataType.FLOAT_32, unit=self.__modbus_id) * -1 + power = self.__tcp_client.read_holding_registers(19026, ModbusDataType.FLOAT_32, unit=self.__modbus_id) * -1 _, exported = self.sim_counter.sim_count(power) From 9e42af14d69792ff974704c2c0958ac7088ee690 Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Wed, 19 Mar 2025 08:13:30 +0100 Subject: [PATCH 3/4] inverter fix --- .../modules/devices/janitza/janitza/device.py | 16 +++++++++------- .../modules/devices/janitza/janitza/inverter.py | 11 +++++------ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/packages/modules/devices/janitza/janitza/device.py b/packages/modules/devices/janitza/janitza/device.py index 666863fefd..e9a586fe91 100644 --- a/packages/modules/devices/janitza/janitza/device.py +++ b/packages/modules/devices/janitza/janitza/device.py @@ -1,12 +1,13 @@ #!/usr/bin/env python3 import logging -from typing import Iterable +from typing import Iterable, Union from modules.common.configurable_device import ComponentFactoryByType, ConfigurableDevice, MultiComponentUpdater from modules.common import modbus from modules.common.abstract_device import DeviceDescriptor from modules.common.component_context import SingleComponentUpdateContext -from modules.devices.janitza.janitza import counter, inverter +from modules.devices.janitza.janitza.counter import JanitzaCounter +from modules.devices.janitza.janitza.inverter import JanitzaInverter from modules.devices.janitza.janitza.config import Janitza, JanitzaCounterSetup, JanitzaInverterSetup log = logging.getLogger(__name__) @@ -14,14 +15,14 @@ def create_device(device_config: Janitza): def create_counter_component(component_config: JanitzaCounterSetup): - return counter.JanitzaCounter(device_config.id, component_config, client, - device_config.configuration.modbus_id) + return JanitzaCounter(device_config.id, component_config, client, + device_config.configuration.modbus_id) def create_inverter_component(component_config: JanitzaInverterSetup): - return inverter.JanitzaInverter(device_config.id, component_config, client, - device_config.configuration.modbus_id) + return JanitzaInverter(device_config.id, component_config, client, + device_config.configuration.modbus_id) - def update_components(components: Iterable[counter.JanitzaCounter]): + def update_components(components: Iterable[Union[JanitzaCounter, JanitzaInverter]]): with client: for component in components: with SingleComponentUpdateContext(component.fault_state): @@ -35,6 +36,7 @@ def update_components(components: Iterable[counter.JanitzaCounter]): device_config=device_config, component_factory=ComponentFactoryByType( counter=create_counter_component, + counter=create_inverter_component ), component_updater=MultiComponentUpdater(update_components) ) diff --git a/packages/modules/devices/janitza/janitza/inverter.py b/packages/modules/devices/janitza/janitza/inverter.py index 45b938a0e8..9b439206b5 100644 --- a/packages/modules/devices/janitza/janitza/inverter.py +++ b/packages/modules/devices/janitza/janitza/inverter.py @@ -3,8 +3,8 @@ from dataclass_utils import dataclass_from_dict from modules.common import modbus -from modules.common.abstract_device import AbstractCounter -from modules.common.component_state import CounterState +from modules.common.abstract_device import AbstractInverter +from modules.common.component_state import InverterState from modules.common.component_type import ComponentDescriptor from modules.common.fault_state import ComponentInfo, FaultState from modules.common.modbus import ModbusDataType @@ -13,7 +13,7 @@ from modules.devices.janitza.janitza.config import JanitzaInverterSetup -class JanitzaCounter(AbstractCounter): +class JanitzaInverter(AbstractInverter): def __init__(self, device_id: int, component_config: Union[Dict, JanitzaInverterSetup], @@ -29,14 +29,13 @@ def __init__(self, def update(self): power = self.__tcp_client.read_holding_registers(19026, ModbusDataType.FLOAT_32, unit=self.__modbus_id) * -1 - _, exported = self.sim_counter.sim_count(power) - counter_state = CounterState( + inverter_state = InverterState( power=power, exported=exported ) - self.store.set(counter_state) + self.store.set(inverter_state) component_descriptor = ComponentDescriptor(configuration_factory=JanitzaInverterSetup) From 89144c3efd4c663bb504c790faee74af878f5268 Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Wed, 19 Mar 2025 08:20:18 +0100 Subject: [PATCH 4/4] fix inverter variable name --- packages/modules/devices/janitza/janitza/device.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/modules/devices/janitza/janitza/device.py b/packages/modules/devices/janitza/janitza/device.py index e9a586fe91..6233324279 100644 --- a/packages/modules/devices/janitza/janitza/device.py +++ b/packages/modules/devices/janitza/janitza/device.py @@ -36,7 +36,7 @@ def update_components(components: Iterable[Union[JanitzaCounter, JanitzaInverter device_config=device_config, component_factory=ComponentFactoryByType( counter=create_counter_component, - counter=create_inverter_component + inverter=create_inverter_component ), component_updater=MultiComponentUpdater(update_components) )