From 6d8f8ce648b3ef5cb43542e9d00e4d9b7a978417 Mon Sep 17 00:00:00 2001 From: Thomas Papendieck <14850347+tpd-opitz@users.noreply.github.com> Date: Wed, 12 Feb 2025 13:11:18 +0100 Subject: [PATCH 1/6] fix: read PV counter from device instead of calculation BA_KOSTAL-Interface-description-MODBUS-TCP_SunSpec_Hybrid-1.pdf (20) -> 0x420 1056 Total DC PV energy (sum of all PV inputs) Wh Float 2 RO 0x03 --- .../devices/kostal/kostal_plenticore/counter.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/modules/devices/kostal/kostal_plenticore/counter.py b/packages/modules/devices/kostal/kostal_plenticore/counter.py index a3950a6fe4..ae6277747b 100644 --- a/packages/modules/devices/kostal/kostal_plenticore/counter.py +++ b/packages/modules/devices/kostal/kostal_plenticore/counter.py @@ -26,6 +26,7 @@ def get_values(self, reader: Callable[[int, ModbusDataType], Any]) -> CounterSta powers = [reader(register, ModbusDataType.FLOAT_32) for register in [224, 234, 244]] power = reader(252, ModbusDataType.FLOAT_32) frequency = reader(220, ModbusDataType.FLOAT_32) + exported = reader(1056, ModbusDataType.FLOAT_32) return CounterState( powers=powers, @@ -33,15 +34,13 @@ def get_values(self, reader: Callable[[int, ModbusDataType], Any]) -> CounterSta voltages=voltages, power=power, power_factors=[power_factor]*3, - frequency=frequency + frequency=frequency, + exported=exported, + imported=0 ) - def update_imported_exported(self, state: CounterState) -> CounterState: - state.imported, state.exported = self.sim_counter.sim_count(state.power) - return state - def update(self, reader: Callable[[int, ModbusDataType], Any]): - self.store.set(self.update_imported_exported(self.get_values(reader))) + self.store.set(self.get_values(reader)) component_descriptor = ComponentDescriptor(configuration_factory=KostalPlenticoreCounterSetup) From f479e6c5d99cb95207c489536d078af2f5beb2f2 Mon Sep 17 00:00:00 2001 From: Thomas Papendieck <14850347+tpd-opitz@users.noreply.github.com> Date: Wed, 12 Feb 2025 13:28:01 +0100 Subject: [PATCH 2/6] remove trailing whitespace --- packages/modules/devices/kostal/kostal_plenticore/counter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/modules/devices/kostal/kostal_plenticore/counter.py b/packages/modules/devices/kostal/kostal_plenticore/counter.py index ae6277747b..9597dd1a67 100644 --- a/packages/modules/devices/kostal/kostal_plenticore/counter.py +++ b/packages/modules/devices/kostal/kostal_plenticore/counter.py @@ -26,7 +26,7 @@ def get_values(self, reader: Callable[[int, ModbusDataType], Any]) -> CounterSta powers = [reader(register, ModbusDataType.FLOAT_32) for register in [224, 234, 244]] power = reader(252, ModbusDataType.FLOAT_32) frequency = reader(220, ModbusDataType.FLOAT_32) - exported = reader(1056, ModbusDataType.FLOAT_32) + exported = reader(1056, ModbusDataType.FLOAT_32) return CounterState( powers=powers, From 5a114ecd8abeafe54a1d9b1df0ef7478a357cce8 Mon Sep 17 00:00:00 2001 From: Thomas Papendieck <14850347+tpd-opitz@users.noreply.github.com> Date: Wed, 12 Feb 2025 13:32:28 +0100 Subject: [PATCH 3/6] read battery total counters from kostal device --- packages/modules/devices/kostal/kostal_plenticore/bat.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/modules/devices/kostal/kostal_plenticore/bat.py b/packages/modules/devices/kostal/kostal_plenticore/bat.py index 2296969127..ffee968ced 100644 --- a/packages/modules/devices/kostal/kostal_plenticore/bat.py +++ b/packages/modules/devices/kostal/kostal_plenticore/bat.py @@ -25,7 +25,8 @@ def __init__(self, def read_state(self, reader: Callable[[int, ModbusDataType], Any]) -> BatState: power = reader(582, ModbusDataType.INT_16) * -1 soc = reader(514, ModbusDataType.INT_16) - imported, exported = self.sim_counter.sim_count(power) + imported = reader(1046, ModbusDataType.FLOAT_32) + exported = reader(1048, ModbusDataType.FLOAT_32) log.debug("raw bat power "+str(power)) # Speicherladung muss durch Wandlungsverluste und internen Verbrauch korrigiert werden, sonst # wird ein falscher Hausverbrauch berechnet. Die Verluste fallen hier unter den Tisch. From 3614389d457c698a35131f5a8de2baeb016ee26f Mon Sep 17 00:00:00 2001 From: Thomas Papendieck <14850347+tpd-opitz@users.noreply.github.com> Date: Wed, 12 Feb 2025 15:04:20 +0100 Subject: [PATCH 4/6] fix: costal PV export counts energy from battery twice --- packages/modules/devices/kostal/kostal_plenticore/counter.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/modules/devices/kostal/kostal_plenticore/counter.py b/packages/modules/devices/kostal/kostal_plenticore/counter.py index 9597dd1a67..c5fdb70e01 100644 --- a/packages/modules/devices/kostal/kostal_plenticore/counter.py +++ b/packages/modules/devices/kostal/kostal_plenticore/counter.py @@ -26,7 +26,8 @@ def get_values(self, reader: Callable[[int, ModbusDataType], Any]) -> CounterSta powers = [reader(register, ModbusDataType.FLOAT_32) for register in [224, 234, 244]] power = reader(252, ModbusDataType.FLOAT_32) frequency = reader(220, ModbusDataType.FLOAT_32) - exported = reader(1056, ModbusDataType.FLOAT_32) + exported_all = reader(1056, ModbusDataType.FLOAT_32) + exported_bat = reader(1048, ModbusDataType.FLOAT_32) return CounterState( powers=powers, @@ -35,7 +36,7 @@ def get_values(self, reader: Callable[[int, ModbusDataType], Any]) -> CounterSta power=power, power_factors=[power_factor]*3, frequency=frequency, - exported=exported, + exported=exported_all-exported_bat, imported=0 ) From b519ef72ce55f826f5431245381fd5349d79d4fa Mon Sep 17 00:00:00 2001 From: Thomas Papendieck <14850347+tpd-opitz@users.noreply.github.com> Date: Wed, 12 Feb 2025 15:15:56 +0100 Subject: [PATCH 5/6] fix: PV counter must contain battery charge energy because it is substracted later as PV import --- .../modules/devices/kostal/kostal_plenticore/counter.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/modules/devices/kostal/kostal_plenticore/counter.py b/packages/modules/devices/kostal/kostal_plenticore/counter.py index c5fdb70e01..b1feb85acf 100644 --- a/packages/modules/devices/kostal/kostal_plenticore/counter.py +++ b/packages/modules/devices/kostal/kostal_plenticore/counter.py @@ -27,7 +27,7 @@ def get_values(self, reader: Callable[[int, ModbusDataType], Any]) -> CounterSta power = reader(252, ModbusDataType.FLOAT_32) frequency = reader(220, ModbusDataType.FLOAT_32) exported_all = reader(1056, ModbusDataType.FLOAT_32) - exported_bat = reader(1048, ModbusDataType.FLOAT_32) + imported_bat = reader(1046, ModbusDataType.FLOAT_32) return CounterState( powers=powers, @@ -36,8 +36,8 @@ def get_values(self, reader: Callable[[int, ModbusDataType], Any]) -> CounterSta power=power, power_factors=[power_factor]*3, frequency=frequency, - exported=exported_all-exported_bat, - imported=0 + exported=exported_all, + imported=imported_bat ) def update(self, reader: Callable[[int, ModbusDataType], Any]): From ea169e5e5ad451f7b3ee4467f142807e6bde94b3 Mon Sep 17 00:00:00 2001 From: Thomas Papendieck <14850347+tpd-opitz@users.noreply.github.com> Date: Wed, 12 Feb 2025 18:22:25 +0100 Subject: [PATCH 6/6] set AC from grit to battery as import counter --- packages/modules/devices/kostal/kostal_plenticore/counter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/modules/devices/kostal/kostal_plenticore/counter.py b/packages/modules/devices/kostal/kostal_plenticore/counter.py index b1feb85acf..d31e3e751f 100644 --- a/packages/modules/devices/kostal/kostal_plenticore/counter.py +++ b/packages/modules/devices/kostal/kostal_plenticore/counter.py @@ -27,7 +27,7 @@ def get_values(self, reader: Callable[[int, ModbusDataType], Any]) -> CounterSta power = reader(252, ModbusDataType.FLOAT_32) frequency = reader(220, ModbusDataType.FLOAT_32) exported_all = reader(1056, ModbusDataType.FLOAT_32) - imported_bat = reader(1046, ModbusDataType.FLOAT_32) + imported_bat = reader(1050, ModbusDataType.FLOAT_32) return CounterState( powers=powers,