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
13 changes: 9 additions & 4 deletions packages/modules/devices/kostal/kostal_plenticore/bat.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/usr/bin/env python3
import logging
from typing import TypedDict, Any
from pymodbus.constants import Endian

from modules.common.abstract_device import AbstractBat
from modules.common.component_state import BatState
Expand All @@ -17,6 +18,7 @@
class KwargsDict(TypedDict):
device_id: int
modbus_id: int
endianess: Endian
client: ModbusTcpClient_


Expand All @@ -28,18 +30,21 @@ def __init__(self, component_config: KostalPlenticoreBatSetup, **kwargs: Any) ->
def initialize(self) -> None:
self.__device_id: int = self.kwargs['device_id']
self.modbus_id: int = self.kwargs['modbus_id']
self.endianess: Endian = self.kwargs['endianess']
self.client: ModbusTcpClient_ = self.kwargs['client']
self.store = get_bat_value_store(self.component_config.id)
self.fault_state = FaultState(ComponentInfo.from_component_config(self.component_config))
self.sim_counter = SimCounter(self.__device_id, self.component_config.id, prefix="speicher")

def update(self) -> None:
power = self.client.read_holding_registers(582, ModbusDataType.INT_16, unit=self.modbus_id) * -1
soc = self.client.read_holding_registers(514, ModbusDataType.INT_16, unit=self.modbus_id)
power = self.client.read_holding_registers(
582, ModbusDataType.INT_16, unit=self.modbus_id, wordorder=self.endianess) * -1
soc = self.client.read_holding_registers(
514, ModbusDataType.INT_16, unit=self.modbus_id, wordorder=self.endianess)
if power < 0:
power = self.client.read_holding_registers(106, ModbusDataType.FLOAT_32, unit=self.modbus_id) * -1
power = self.client.read_holding_registers(
106, ModbusDataType.FLOAT_32, unit=self.modbus_id, wordorder=self.endianess) * -1
imported, exported = self.sim_counter.sim_count(power)
log.debug("raw bat power "+str(power))

bat_state = BatState(
power=power,
Expand Down
18 changes: 12 additions & 6 deletions packages/modules/devices/kostal/kostal_plenticore/counter.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#!/usr/bin/env python3
from typing import TypedDict, Any
from pymodbus.constants import Endian

from modules.common.abstract_device import AbstractCounter
from modules.common.component_state import CounterState
Expand All @@ -14,6 +15,7 @@
class KwargsDict(TypedDict):
device_id: int
modbus_id: int
endianess: Endian
client: ModbusTcpClient_


Expand All @@ -25,22 +27,26 @@ def __init__(self, component_config: KostalPlenticoreCounterSetup, **kwargs: Any
def initialize(self) -> None:
self.__device_id: int = self.kwargs['device_id']
self.modbus_id: int = self.kwargs['modbus_id']
self.endianess: Endian = self.kwargs['endianess']
self.client: ModbusTcpClient_ = self.kwargs['client']
self.store = get_counter_value_store(self.component_config.id)
self.fault_state = FaultState(ComponentInfo.from_component_config(self.component_config))
self.sim_counter = SimCounter(self.__device_id, self.component_config.id, prefix="bezug")

def update(self) -> None:
power = self.client.read_holding_registers(252, ModbusDataType.FLOAT_32, unit=self.modbus_id)
power = self.client.read_holding_registers(
252, ModbusDataType.FLOAT_32, unit=self.modbus_id, wordorder=self.endianess)
imported, exported = self.sim_counter.sim_count(power)
power_factor = self.client.read_holding_registers(150, ModbusDataType.FLOAT_32, unit=self.modbus_id)
power_factor = self.client.read_holding_registers(
150, ModbusDataType.FLOAT_32, unit=self.modbus_id, wordorder=self.endianess)
currents = [self.client.read_holding_registers(
reg, ModbusDataType.FLOAT_32, unit=self.modbus_id) for reg in [222, 232, 242]]
reg, ModbusDataType.FLOAT_32, unit=self.modbus_id, wordorder=self.endianess) for reg in [222, 232, 242]]
voltages = [self.client.read_holding_registers(
reg, ModbusDataType.FLOAT_32, unit=self.modbus_id) for reg in [230, 240, 250]]
reg, ModbusDataType.FLOAT_32, unit=self.modbus_id, wordorder=self.endianess) for reg in [230, 240, 250]]
powers = [self.client.read_holding_registers(
reg, ModbusDataType.FLOAT_32, unit=self.modbus_id) for reg in [224, 234, 244]]
frequency = self.client.read_holding_registers(220, ModbusDataType.FLOAT_32, unit=self.modbus_id)
reg, ModbusDataType.FLOAT_32, unit=self.modbus_id, wordorder=self.endianess) for reg in [224, 234, 244]]
frequency = self.client.read_holding_registers(
220, ModbusDataType.FLOAT_32, unit=self.modbus_id, wordorder=self.endianess)

counter_state = CounterState(
powers=powers,
Expand Down
11 changes: 9 additions & 2 deletions packages/modules/devices/kostal/kostal_plenticore/device.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
#!/usr/bin/env python3
import logging
from typing import Iterable, Union
from pymodbus.constants import Endian

from modules.common.abstract_device import DeviceDescriptor
from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater
from modules.common.modbus import ModbusTcpClient_
from modules.common.modbus import ModbusDataType, ModbusTcpClient_
from modules.devices.kostal.kostal_plenticore.bat import KostalPlenticoreBat
from modules.devices.kostal.kostal_plenticore.counter import KostalPlenticoreCounter
from modules.devices.kostal.kostal_plenticore.inverter import KostalPlenticoreInverter
Expand All @@ -16,26 +17,30 @@

def create_device(device_config: KostalPlenticore):
client = None
endianess = None

def create_bat_component(component_config: KostalPlenticoreBatSetup):
nonlocal client
return KostalPlenticoreBat(component_config,
device_id=device_config.id,
modbus_id=device_config.configuration.modbus_id,
endianess=endianess,
client=client)

def create_counter_component(component_config: KostalPlenticoreCounterSetup):
nonlocal client
return KostalPlenticoreCounter(component_config,
device_id=device_config.id,
modbus_id=device_config.configuration.modbus_id,
endianess=endianess,
client=client)

def create_inverter_component(component_config: KostalPlenticoreInverterSetup):
nonlocal client
return KostalPlenticoreInverter(component_config,
device_id=device_config.id,
modbus_id=device_config.configuration.modbus_id,
endianess=endianess,
client=client)

def update_components(
Expand All @@ -46,8 +51,10 @@ def update_components(
component.update()

def initializer():
nonlocal client
nonlocal client, endianess
client = ModbusTcpClient_(device_config.configuration.ip_address, device_config.configuration.port)
endianess = Endian.Big if client.read_holding_registers(
5, ModbusDataType.UINT_16, unit=device_config.configuration.modbus_id) else Endian.Little

return ConfigurableDevice(
device_config=device_config,
Expand Down
9 changes: 7 additions & 2 deletions packages/modules/devices/kostal/kostal_plenticore/inverter.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#!/usr/bin/env python3
from typing import TypedDict, Any
from pymodbus.constants import Endian

from modules.common.abstract_device import AbstractInverter
from modules.common.component_state import InverterState
Expand All @@ -14,6 +15,7 @@
class KwargsDict(TypedDict):
device_id: int
modbus_id: int
endianess: Endian
client: ModbusTcpClient_


Expand All @@ -25,14 +27,17 @@ def __init__(self, component_config: KostalPlenticoreInverterSetup, **kwargs: An
def initialize(self) -> None:
self.__device_id: int = self.kwargs['device_id']
self.modbus_id: int = self.kwargs['modbus_id']
self.endianess: Endian = self.kwargs['endianess']
self.client: ModbusTcpClient_ = self.kwargs['client']
self.store = get_inverter_value_store(self.component_config.id)
self.fault_state = FaultState(ComponentInfo.from_component_config(self.component_config))
self.sim_counter = SimCounter(self.__device_id, self.component_config.id, prefix="pv")

def update(self) -> None:
power = self.client.read_holding_registers(575, ModbusDataType.INT_16, unit=self.modbus_id) * -1
exported = self.client.read_holding_registers(320, ModbusDataType.FLOAT_32, unit=self.modbus_id)
power = self.client.read_holding_registers(
575, ModbusDataType.INT_16, unit=self.modbus_id, wordorder=self.endianess) * -1
exported = self.client.read_holding_registers(
320, ModbusDataType.FLOAT_32, unit=self.modbus_id, wordorder=self.endianess)

inverter_state = InverterState(
power=power,
Expand Down