Skip to content
Merged
Show file tree
Hide file tree
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
14 changes: 14 additions & 0 deletions packages/modules/devices/janitza/janitza/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -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())
18 changes: 12 additions & 6 deletions packages/modules/devices/janitza/janitza/device.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,28 @@
#!/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
from modules.devices.janitza.janitza.config import Janitza, JanitzaCounterSetup
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__)


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 update_components(components: Iterable[counter.JanitzaCounter]):
def create_inverter_component(component_config: JanitzaInverterSetup):
return JanitzaInverter(device_config.id, component_config, client,
device_config.configuration.modbus_id)

def update_components(components: Iterable[Union[JanitzaCounter, JanitzaInverter]]):
with client:
for component in components:
with SingleComponentUpdateContext(component.fault_state):
Expand All @@ -31,6 +36,7 @@ def update_components(components: Iterable[counter.JanitzaCounter]):
device_config=device_config,
component_factory=ComponentFactoryByType(
counter=create_counter_component,
inverter=create_inverter_component
),
component_updater=MultiComponentUpdater(update_components)
)
Expand Down
41 changes: 41 additions & 0 deletions packages/modules/devices/janitza/janitza/inverter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#!/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 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
from modules.common.simcount import SimCounter
from modules.common.store import get_counter_value_store
from modules.devices.janitza.janitza.config import JanitzaInverterSetup


class JanitzaInverter(AbstractInverter):
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):
power = self.__tcp_client.read_holding_registers(19026, ModbusDataType.FLOAT_32, unit=self.__modbus_id) * -1
_, exported = self.sim_counter.sim_count(power)

inverter_state = InverterState(
power=power,
exported=exported
)
self.store.set(inverter_state)


component_descriptor = ComponentDescriptor(configuration_factory=JanitzaInverterSetup)