Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
e3a74b7
inititaliser & error handler
LKuemmel Nov 27, 2024
f34579b
alpha
LKuemmel Dec 6, 2024
65b2ffd
sample
LKuemmel Dec 6, 2024
9a7ca32
samples
LKuemmel Dec 6, 2024
1511958
azzurro - e3dc untested
LKuemmel Dec 6, 2024
62ea284
fix, bis openwb
LKuemmel Dec 6, 2024
627883c
ammend
LKuemmel Dec 6, 2024
0f5a581
untested
LKuemmel Dec 6, 2024
8dd2e6e
ammend
LKuemmel Dec 6, 2024
a0df3d3
problem with single component updater
LKuemmel Dec 17, 2024
15916c2
remove powers from azzurro
LKuemmel Jan 15, 2025
1bdf775
ammend
LKuemmel Jan 15, 2025
90238b9
fix
LKuemmel Jan 15, 2025
207df44
fix
LKuemmel Jan 15, 2025
e17f844
catch error
LKuemmel Feb 6, 2025
70ebe1a
rename initialiser to initializer
LKuemmel Feb 6, 2025
7f6c4da
fix
LKuemmel Feb 7, 2025
d917ee7
component intitialiser
LKuemmel Feb 3, 2025
7f0b349
draft
LKuemmel Feb 3, 2025
ab0031f
counter & inverter ampere
LKuemmel Feb 5, 2025
cfa02ff
naming
LKuemmel Feb 6, 2025
031de5c
aplahess. ampere, fems
LKuemmel Feb 6, 2025
31ec22b
azzurro, batterx
LKuemmel Feb 7, 2025
64ab122
byd
LKuemmel Feb 7, 2025
1ef31a2
carlo gavazzi - enphase
LKuemmel Feb 7, 2025
6eea086
fixes
LKuemmel Feb 7, 2025
75a1b84
fox ess - growatt
LKuemmel Feb 7, 2025
d912290
huawei-janitza
LKuemmel Feb 14, 2025
30d210f
pytest
LKuemmel Feb 14, 2025
5c487aa
kostal
LKuemmel Feb 17, 2025
61308bf
lg
LKuemmel Feb 17, 2025
11bf058
mtec-openwb
LKuemmel Feb 18, 2025
d3803e9
powerdog
LKuemmel Feb 19, 2025
a897dd5
powerfox
LKuemmel Feb 19, 2025
b7a1293
qcells-rct
LKuemmel Feb 19, 2025
b45de6e
saxpower-sigenergy
LKuemmel Feb 21, 2025
dbcfb8c
shelly-sma webbox
LKuemmel Feb 21, 2025
38fac3c
smartme-solaredge
LKuemmel Feb 21, 2025
044dd18
solarmax-studer
LKuemmel Feb 24, 2025
201c5a4
sungrow-youless
LKuemmel Feb 24, 2025
83d7bce
fix openwb
LKuemmel Feb 24, 2025
fd8be8c
fixes
LKuemmel Mar 4, 2025
9a2d480
fix nested context managers
LKuemmel Mar 4, 2025
eb62585
fix pytest
LKuemmel Mar 4, 2025
2f9f4eb
fixes
LKuemmel Mar 4, 2025
e8145d7
don't overwrite initialize()-error
LKuemmel Mar 4, 2025
1e16ee5
fixes
LKuemmel Mar 4, 2025
7106c8d
fixes
LKuemmel Mar 5, 2025
5dffa59
update samples
LKuemmel Mar 10, 2025
3d5d548
update samples
LKuemmel Mar 10, 2025
438f1a8
update samples
LKuemmel Mar 10, 2025
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
80 changes: 0 additions & 80 deletions docs/samples/sample_modbus/device.py

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,27 +1,36 @@
#!/usr/bin/env python3
from typing import Optional
from dataclass_utils import dataclass_from_dict
from typing import Optional, TypedDict, Any
from modules.common.abstract_device import AbstractBat
from modules.common.component_state import BatState
from modules.common.component_type import ComponentDescriptor
from modules.common.fault_state import ComponentInfo, FaultState
from modules.common.modbus import ModbusDataType, ModbusTcpClient_
from modules.common.simcount import SimCounter
from modules.common.store import get_bat_value_store
from modules.devices.sample_modbus.config import SampleBatSetup
from modules.devices.sample_modbus.sample_modbus.config import SampleBatSetup


class KwargsDict(TypedDict):
device_id: int
client: ModbusTcpClient_


class SampleBat(AbstractBat):
def __init__(self, device_id: int, component_config: SampleBatSetup, client: ModbusTcpClient_) -> None:
self.__device_id = device_id
self.component_config = dataclass_from_dict(SampleBatSetup, component_config)
def __init__(self, component_config: SampleBatSetup, **kwargs: Any) -> None:
self.component_config = component_config
self.kwargs: KwargsDict = kwargs

def initialize(self) -> None:
self.__device_id: int = self.kwargs['device_id']
self.client: ModbusTcpClient_ = self.kwargs['client']
self.sim_counter = SimCounter(self.__device_id, self.component_config.id, prefix="speicher")
self.store = get_bat_value_store(self.component_config.id)
self.fault_state = FaultState(ComponentInfo.from_component_config(self.component_config))
self.client = client

def update(self) -> None:
unit = self.component_config.configuration.modbus_id
power = self.client.read_holding_registers(reg, ModbusDataType.INT_32, unit=unit)
soc = self.client.read_holding_registers(reg, ModbusDataType.INT_32, unit=unit)
imported, exported = self.sim_counter.sim_count(power)

bat_state = BatState(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@

@auto_str
class SampleConfiguration:
def __init__(self, ip_address: Optional[str] = None):
def __init__(self, ip_address: Optional[str] = None, port: int = 502):
self.ip_address = ip_address
self.port = port


@auto_str
Expand All @@ -24,8 +25,8 @@ def __init__(self,

@auto_str
class SampleBatConfiguration:
def __init__(self):
pass
def __init__(self, modbus_id: int = 1):
self.modbus_id = modbus_id


@auto_str
Expand All @@ -40,8 +41,8 @@ def __init__(self,

@auto_str
class SampleCounterConfiguration:
def __init__(self):
pass
def __init__(self, modbus_id: int = 1):
self.modbus_id = modbus_id


@auto_str
Expand All @@ -56,8 +57,8 @@ def __init__(self,

@auto_str
class SampleInverterConfiguration:
def __init__(self):
pass
def __init__(self, modbus_id: int = 1):
self.modbus_id = modbus_id


@auto_str
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,31 @@
#!/usr/bin/env python3
from dataclass_utils import dataclass_from_dict
from typing import TypedDict, Any
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, ModbusTcpClient_
from modules.common.simcount import SimCounter
from modules.common.store import get_counter_value_store
from modules.devices.sample_modbus.config import SampleCounterSetup
from modules.devices.sample_modbus.sample_modbus.config import SampleCounterSetup


class KwargsDict(TypedDict):
device_id: int
client: ModbusTcpClient_


class SampleCounter(AbstractCounter):
def __init__(self, device_id: int, component_config: SampleCounterSetup, client: ModbusTcpClient_) -> None:
self.__device_id = device_id
self.component_config = dataclass_from_dict(SampleCounterSetup, component_config)
def __init__(self, component_config: SampleCounterSetup, **kwargs: Any) -> None:
self.component_config = component_config
self.kwargs: KwargsDict = kwargs

def initialize(self) -> None:
self.__device_id: int = self.kwargs['device_id']
self.client: ModbusTcpClient_ = self.kwargs['client']
self.sim_counter = SimCounter(self.__device_id, self.component_config.id, prefix="bezug")
self.store = get_counter_value_store(self.component_config.id)
self.fault_state = FaultState(ComponentInfo.from_component_config(self.component_config))
self.client = client

def update(self):
power = self.client.read_holding_registers(reg, ModbusDataType.INT_32, unit=unit)
Expand Down
52 changes: 52 additions & 0 deletions docs/samples/sample_modbus/sample_modbus/device.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#!/usr/bin/env python3
import logging
from typing import Iterable, Union

from modules.common.abstract_device import DeviceDescriptor
from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater
from modules.common.modbus import ModbusTcpClient_
from modules.devices.sample_modbus.sample_modbus.bat import SampleBat
from modules.devices.sample_modbus.sample_modbus.config import Sample, SampleBatSetup, SampleCounterSetup, SampleInverterSetup
from modules.devices.sample_modbus.sample_modbus.counter import SampleCounter
from modules.devices.sample_modbus.sample_modbus.inverter import SampleInverter

log = logging.getLogger(__name__)


def create_device(device_config: Sample):
client = None

def create_bat_component(component_config: SampleBatSetup):
nonlocal client
return SampleBat(component_config, device_id=device_config.id, client=client)

def create_counter_component(component_config: SampleCounterSetup):
nonlocal client
return SampleCounter(component_config, device_id=device_config.id, client=client)

def create_inverter_component(component_config: SampleInverterSetup):
nonlocal client
return SampleInverter(component_config, device_id=device_config.id, client=client)

def update_components(components: Iterable[Union[SampleBat, SampleCounter, SampleInverter]]):
with client:
for component in components:
component.update()

def initializer():
nonlocal client
client = ModbusTcpClient_(device_config.configuration.ip_address, device_config.configuration.port)

return ConfigurableDevice(
device_config=device_config,
initializer=initializer,
component_factory=ComponentFactoryByType(
bat=create_bat_component,
counter=create_counter_component,
inverter=create_inverter_component,
),
component_updater=MultiComponentUpdater(update_components)
)


device_descriptor = DeviceDescriptor(configuration_factory=Sample)
Original file line number Diff line number Diff line change
@@ -1,23 +1,31 @@
#!/usr/bin/env python3
from dataclass_utils import dataclass_from_dict
from typing import TypedDict, Any
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, ModbusTcpClient_
from modules.common.simcount import SimCounter
from modules.common.store import get_inverter_value_store
from modules.devices.sample_modbus.config import SampleInverterSetup
from modules.devices.sample_modbus.sample_modbus.config import SampleInverterSetup


class KwargsDict(TypedDict):
device_id: int
client: ModbusTcpClient_


class SampleInverter(AbstractInverter):
def __init__(self, device_id: int, component_config: SampleInverterSetup, client: ModbusTcpClient_) -> None:
self.__device_id = device_id
self.component_config = dataclass_from_dict(SampleInverterSetup, component_config)
def __init__(self, component_config: SampleInverterSetup, **kwargs: Any) -> None:
self.component_config = component_config
self.kwargs: KwargsDict = kwargs

def initialize(self) -> None:
self.__device_id: int = self.kwargs['device_id']
self.client: ModbusTcpClient_ = self.kwargs['client']
self.sim_counter = SimCounter(self.__device_id, self.component_config.id, prefix="pv")
self.store = get_inverter_value_store(self.component_config.id)
self.fault_state = FaultState(ComponentInfo.from_component_config(self.component_config))
self.client = client

def update(self) -> None:
power = self.client.read_holding_registers(reg, ModbusDataType.INT_32, unit=unit)
Expand Down
14 changes: 14 additions & 0 deletions docs/samples/sample_modbus/vendor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from pathlib import Path

from modules.common.abstract_device import DeviceDescriptor
from modules.devices.vendors import VendorGroup


class Vendor:
def __init__(self):
self.type = Path(__file__).parent.name
self.vendor = "Sample"
self.group = VendorGroup.VENDORS.value


vendor_descriptor = DeviceDescriptor(configuration_factory=Vendor)
68 changes: 0 additions & 68 deletions docs/samples/sample_request_by_component/device.py

This file was deleted.

Loading
Loading