From 09ec8cb57ec3d2698d88aad9463982cd70fb1a2b Mon Sep 17 00:00:00 2001 From: mekrapp <158028484+mekrapp@users.noreply.github.com> Date: Sun, 23 Nov 2025 10:43:04 +0100 Subject: [PATCH 01/14] Create folder "solakon" incl. __init__.py --- packages/modules/devices/solakon/__init__.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 packages/modules/devices/solakon/__init__.py diff --git a/packages/modules/devices/solakon/__init__.py b/packages/modules/devices/solakon/__init__.py new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/packages/modules/devices/solakon/__init__.py @@ -0,0 +1 @@ + From 33e7cbd3ace461918073c8d4449337804d583a38 Mon Sep 17 00:00:00 2001 From: mekrapp <158028484+mekrapp@users.noreply.github.com> Date: Sun, 23 Nov 2025 10:44:36 +0100 Subject: [PATCH 02/14] Create folder "solakon" incl. __init__.py --- packages/modules/devices/solakon/solakon/__init__.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 packages/modules/devices/solakon/solakon/__init__.py diff --git a/packages/modules/devices/solakon/solakon/__init__.py b/packages/modules/devices/solakon/solakon/__init__.py new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/packages/modules/devices/solakon/solakon/__init__.py @@ -0,0 +1 @@ + From 3484ab7b8675606323df25ec0c0bcc3697cc3144 Mon Sep 17 00:00:00 2001 From: mekrapp <158028484+mekrapp@users.noreply.github.com> Date: Sun, 23 Nov 2025 19:16:24 +0100 Subject: [PATCH 03/14] Delete packages/modules/devices/solakon/solakon directory --- packages/modules/devices/solakon/solakon/__init__.py | 1 - 1 file changed, 1 deletion(-) delete mode 100644 packages/modules/devices/solakon/solakon/__init__.py diff --git a/packages/modules/devices/solakon/solakon/__init__.py b/packages/modules/devices/solakon/solakon/__init__.py deleted file mode 100644 index 8b13789179..0000000000 --- a/packages/modules/devices/solakon/solakon/__init__.py +++ /dev/null @@ -1 +0,0 @@ - From 3259cde3d9c46cb1decb6bd0d6ba6da83d084ce2 Mon Sep 17 00:00:00 2001 From: mekrapp <158028484+mekrapp@users.noreply.github.com> Date: Sun, 23 Nov 2025 19:17:36 +0100 Subject: [PATCH 04/14] Create __init__.py --- packages/modules/devices/solakon/solakon_one/__init__.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 packages/modules/devices/solakon/solakon_one/__init__.py diff --git a/packages/modules/devices/solakon/solakon_one/__init__.py b/packages/modules/devices/solakon/solakon_one/__init__.py new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/packages/modules/devices/solakon/solakon_one/__init__.py @@ -0,0 +1 @@ + From e57bcbbbe8e4494e3e75fa610adac98b17e5724f Mon Sep 17 00:00:00 2001 From: mekrapp <158028484+mekrapp@users.noreply.github.com> Date: Sun, 23 Nov 2025 19:18:48 +0100 Subject: [PATCH 05/14] Update __init__.py From 578d1ff0d63adde87846d343f0cc7df4c102bd81 Mon Sep 17 00:00:00 2001 From: mekrapp <158028484+mekrapp@users.noreply.github.com> Date: Sun, 23 Nov 2025 19:19:27 +0100 Subject: [PATCH 06/14] Update __init__.py From 4772f2661929f31fef19569536c2d34376e9340c Mon Sep 17 00:00:00 2001 From: mekrapp <158028484+mekrapp@users.noreply.github.com> Date: Mon, 24 Nov 2025 09:51:10 +0100 Subject: [PATCH 07/14] remove obsolete line --- packages/modules/devices/solakon/__init__.py | 1 - packages/modules/devices/solakon/solakon_one/__init__.py | 1 - 2 files changed, 2 deletions(-) diff --git a/packages/modules/devices/solakon/__init__.py b/packages/modules/devices/solakon/__init__.py index 8b13789179..e69de29bb2 100644 --- a/packages/modules/devices/solakon/__init__.py +++ b/packages/modules/devices/solakon/__init__.py @@ -1 +0,0 @@ - diff --git a/packages/modules/devices/solakon/solakon_one/__init__.py b/packages/modules/devices/solakon/solakon_one/__init__.py index 8b13789179..e69de29bb2 100644 --- a/packages/modules/devices/solakon/solakon_one/__init__.py +++ b/packages/modules/devices/solakon/solakon_one/__init__.py @@ -1 +0,0 @@ - From debe0b24f88592025eb9b2874c5c2480133b9c30 Mon Sep 17 00:00:00 2001 From: mekrapp <158028484+mekrapp@users.noreply.github.com> Date: Tue, 25 Nov 2025 18:44:26 +0100 Subject: [PATCH 08/14] Add vendor.py for vendor Solakon --- packages/modules/devices/solakon/vendor.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 packages/modules/devices/solakon/vendor.py diff --git a/packages/modules/devices/solakon/vendor.py b/packages/modules/devices/solakon/vendor.py new file mode 100644 index 0000000000..a2e2d9c374 --- /dev/null +++ b/packages/modules/devices/solakon/vendor.py @@ -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 = "Solakon" + self.group = VendorGroup.VENDORS.value + + +vendor_descriptor = DeviceDescriptor(configuration_factory=Vendor) From 4388a565ca7bae4aa6d679067f38627b008a020a Mon Sep 17 00:00:00 2001 From: mekrapp <158028484+mekrapp@users.noreply.github.com> Date: Sun, 30 Nov 2025 21:49:16 +0100 Subject: [PATCH 09/14] Upload modules for Solakon One This modules can read the battery power and soc as well as the total PV power of a Solakon One --- .../devices/solakon/solakon_one/bat.py | 48 +++++++++++++++ .../devices/solakon/solakon_one/config.py | 58 +++++++++++++++++++ .../devices/solakon/solakon_one/device.py | 49 ++++++++++++++++ .../devices/solakon/solakon_one/inverter.py | 41 +++++++++++++ 4 files changed, 196 insertions(+) create mode 100644 packages/modules/devices/solakon/solakon_one/bat.py create mode 100644 packages/modules/devices/solakon/solakon_one/config.py create mode 100644 packages/modules/devices/solakon/solakon_one/device.py create mode 100644 packages/modules/devices/solakon/solakon_one/inverter.py diff --git a/packages/modules/devices/solakon/solakon_one/bat.py b/packages/modules/devices/solakon/solakon_one/bat.py new file mode 100644 index 0000000000..d721dac98e --- /dev/null +++ b/packages/modules/devices/solakon/solakon_one/bat.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 +import logging +from typing import 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.store import get_bat_value_store +from modules.devices.solakon.solakon_one.config import SolakonOneBatSetup + +log = logging.getLogger(__name__) + + +class KwargsDict(TypedDict): + client: ModbusTcpClient_ + + +class SolakonOneBat(AbstractBat): + def __init__(self, component_config: SolakonOneBatSetup, **kwargs: Any) -> None: + self.component_config = component_config + self.kwargs: KwargsDict = kwargs + + def initialize(self) -> None: + 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)) + + def update(self) -> None: + unit = self.component_config.configuration.modbus_id + + power = self.client.read_holding_registers(39134, ModbusDataType.INT_32, unit=unit) * -1 + soc = self.client.read_holding_registers(39424, ModbusDataType.INT_16, unit=unit) + # Geladen in kWh * 0,1 + # imported = self.client.read_holding_registers(32003, ModbusDataType.UINT_32, unit=unit) * 100 + # Entladen in kWh * 0,1 + # exported = self.client.read_holding_registers(32006, ModbusDataType.UINT_32, unit=unit) * 100 + + bat_state = BatState( + power=power, + soc=soc, + # imported=imported, + # exported=exported + ) + self.store.set(bat_state) + + +component_descriptor = ComponentDescriptor(configuration_factory=SolakonOneBatSetup) diff --git a/packages/modules/devices/solakon/solakon_one/config.py b/packages/modules/devices/solakon/solakon_one/config.py new file mode 100644 index 0000000000..bdcb9f4db9 --- /dev/null +++ b/packages/modules/devices/solakon/solakon_one/config.py @@ -0,0 +1,58 @@ +from typing import Optional + +from helpermodules.auto_str import auto_str +from modules.common.component_setup import ComponentSetup +from ..vendor import vendor_descriptor + + +class SolakonOneConfiguration: + def __init__(self, + ip_address: Optional[str] = None, + port: int = 502): + self.ip_address = ip_address + self.port = port + + +class SolakonOne: + def __init__(self, + name: str = "Solakon One", + type: str = "solakon_one", + id: int = 0, + configuration: SolakonOneConfiguration = None) -> None: + self.name = name + self.type = type + self.vendor = vendor_descriptor.configuration_factory().type + self.id = id + self.configuration = configuration or SolakonOneConfiguration() + + +@auto_str +class SolakonOneBatConfiguration: + def __init__(self, modbus_id: int = 1): + self.modbus_id = modbus_id + + +@auto_str +class SolakonOneBatSetup(ComponentSetup[SolakonOneBatConfiguration]): + def __init__(self, + name: str = "Solakon One Speicher", + type: str = "bat", + id: int = 0, + configuration: SolakonOneBatConfiguration = None) -> None: + super().__init__(name, type, id, configuration or SolakonOneBatConfiguration()) + + +@auto_str +class SolakonOneInverterConfiguration: + def __init__(self, modbus_id: int = 1): + self.modbus_id = modbus_id + + +@auto_str +class SolakonOneInverterSetup(ComponentSetup[SolakonOneInverterConfiguration]): + def __init__(self, + name: str = "Solakon One Wechselrichter", + type: str = "inverter", + id: int = 0, + configuration: SolakonOneInverterConfiguration = None) -> None: + super().__init__(name, type, id, configuration or SolakonOneInverterConfiguration()) diff --git a/packages/modules/devices/solakon/solakon_one/device.py b/packages/modules/devices/solakon/solakon_one/device.py new file mode 100644 index 0000000000..fcc8c2ca57 --- /dev/null +++ b/packages/modules/devices/solakon/solakon_one/device.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 +import logging +from typing import Iterable, Union + +from modules.common.abstract_device import DeviceDescriptor +from modules.common.component_context import SingleComponentUpdateContext +from modules.common.configurable_device import ConfigurableDevice, ComponentFactoryByType, MultiComponentUpdater +from modules.common.modbus import ModbusTcpClient_ +from modules.devices.solakon.solakon_one.bat import SolakonOneBat +from modules.devices.solakon.solakon_one.inverter import SolakonOneInverter +from modules.devices.solakon.solakon_one.config import SolakonOne, SolakonOneBatSetup, SolakonOneInverterSetup + +log = logging.getLogger(__name__) + + +def create_device(device_config: SolakonOne): + client = None + + def create_bat_component(component_config: SolakonOneBatSetup): + nonlocal client + return SolakonOneBat(component_config=component_config, client=client) + + def create_inverter_component(component_config: SolakonOneInverterSetup): + nonlocal client + return SolakonOneInverter(component_config=component_config, client=client) + + def update_components(components: Iterable[Union[SolakonOneBat, SolakonOneInverter]]): + nonlocal client + with client: + for component in components: + with SingleComponentUpdateContext(component.fault_state): + 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, + inverter=create_inverter_component, + ), + component_updater=MultiComponentUpdater(update_components) + ) + + +device_descriptor = DeviceDescriptor(configuration_factory=SolakonOne) diff --git a/packages/modules/devices/solakon/solakon_one/inverter.py b/packages/modules/devices/solakon/solakon_one/inverter.py new file mode 100644 index 0000000000..b98c240c8c --- /dev/null +++ b/packages/modules/devices/solakon/solakon_one/inverter.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 +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.store import get_inverter_value_store +from modules.devices.solakon.solakon_one.config import SolakonOneInverterSetup + + +class KwargsDict(TypedDict): + client: ModbusTcpClient_ + + +class SolakonOneInverter(AbstractInverter): + def __init__(self, component_config: SolakonOneInverterSetup, **kwargs: Any) -> None: + self.component_config = component_config + self.kwargs: KwargsDict = kwargs + + def initialize(self) -> None: + 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)) + + def update(self) -> None: + unit = self.component_config.configuration.modbus_id + # Gesamt PV Leistung + power = self.client.read_holding_registers(39118, ModbusDataType.INT_32, unit=unit) #* -1 + # Gesamt Produktion Wechselrichter unsigned integer in kWh * 0,1 + # exported = self.client.read_holding_registers(32000, ModbusDataType.UINT_32, unit=unit) * 100 + + inverter_state = InverterState( + power=power, + # exported=exported, + ) + self.store.set(inverter_state) + + +component_descriptor = ComponentDescriptor(configuration_factory=SolakonOneInverterSetup) From f6babea6d6fb68f60607e26e25fbe5980ae3515f Mon Sep 17 00:00:00 2001 From: mekrapp <158028484+mekrapp@users.noreply.github.com> Date: Thu, 4 Dec 2025 08:30:35 +0100 Subject: [PATCH 10/14] Update bat.py Im- and export of DC energy in Wh added (charging / discharging of battery pack) --- .../modules/devices/solakon/solakon_one/bat.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/modules/devices/solakon/solakon_one/bat.py b/packages/modules/devices/solakon/solakon_one/bat.py index d721dac98e..b14a36cfa5 100644 --- a/packages/modules/devices/solakon/solakon_one/bat.py +++ b/packages/modules/devices/solakon/solakon_one/bat.py @@ -29,18 +29,20 @@ def initialize(self) -> None: def update(self) -> None: unit = self.component_config.configuration.modbus_id + # AC Leistung am Stecker, Batterie aus dem Netz aufladen hat positive Werte, + # Leistung aus der Batterie und/oder aus PV ins Netz abgeben hat negative Werte power = self.client.read_holding_registers(39134, ModbusDataType.INT_32, unit=unit) * -1 soc = self.client.read_holding_registers(39424, ModbusDataType.INT_16, unit=unit) - # Geladen in kWh * 0,1 - # imported = self.client.read_holding_registers(32003, ModbusDataType.UINT_32, unit=unit) * 100 - # Entladen in kWh * 0,1 - # exported = self.client.read_holding_registers(32006, ModbusDataType.UINT_32, unit=unit) * 100 + # tägliche DC Ladung der Batterie in Wh + imported = self.client.read_holding_registers(39607, ModbusDataType.UINT_32, unit=unit) * 10 + # tägliche DC Entladung der Batterie in Wh + exported = self.client.read_holding_registers(39611, ModbusDataType.UINT_32, unit=unit) * 10 bat_state = BatState( power=power, soc=soc, - # imported=imported, - # exported=exported + imported=imported, + exported=exported ) self.store.set(bat_state) From 621569450fa988b10afa534478768e97c313b6cd Mon Sep 17 00:00:00 2001 From: mekrapp <158028484+mekrapp@users.noreply.github.com> Date: Thu, 4 Dec 2025 11:56:44 +0100 Subject: [PATCH 11/14] Update inverter.py Daily DC PV production added --- packages/modules/devices/solakon/solakon_one/inverter.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/modules/devices/solakon/solakon_one/inverter.py b/packages/modules/devices/solakon/solakon_one/inverter.py index b98c240c8c..b5c902f3b4 100644 --- a/packages/modules/devices/solakon/solakon_one/inverter.py +++ b/packages/modules/devices/solakon/solakon_one/inverter.py @@ -26,14 +26,14 @@ def initialize(self) -> None: def update(self) -> None: unit = self.component_config.configuration.modbus_id - # Gesamt PV Leistung + # Gesamte DC PV Leistung aller vier MPPT in W power = self.client.read_holding_registers(39118, ModbusDataType.INT_32, unit=unit) #* -1 - # Gesamt Produktion Wechselrichter unsigned integer in kWh * 0,1 - # exported = self.client.read_holding_registers(32000, ModbusDataType.UINT_32, unit=unit) * 100 + # Gesamte DC PV Tagesproduktion kWh * 0,1 + exported = self.client.read_holding_registers(39603, ModbusDataType.UINT_32, unit=unit) * 10 inverter_state = InverterState( power=power, - # exported=exported, + exported=exported ) self.store.set(inverter_state) From d4115eb511fbb20f64559a63c457216c0a9a1f98 Mon Sep 17 00:00:00 2001 From: mekrapp <158028484+mekrapp@users.noreply.github.com> Date: Thu, 4 Dec 2025 17:27:09 +0100 Subject: [PATCH 12/14] edit comments --- packages/modules/devices/solakon/solakon_one/bat.py | 2 +- packages/modules/devices/solakon/solakon_one/inverter.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/modules/devices/solakon/solakon_one/bat.py b/packages/modules/devices/solakon/solakon_one/bat.py index b14a36cfa5..9923c268c9 100644 --- a/packages/modules/devices/solakon/solakon_one/bat.py +++ b/packages/modules/devices/solakon/solakon_one/bat.py @@ -29,7 +29,7 @@ def initialize(self) -> None: def update(self) -> None: unit = self.component_config.configuration.modbus_id - # AC Leistung am Stecker, Batterie aus dem Netz aufladen hat positive Werte, + # AC Leistung am Stecker, Batterie aus dem Netz aufladen hat positive Werte, # Leistung aus der Batterie und/oder aus PV ins Netz abgeben hat negative Werte power = self.client.read_holding_registers(39134, ModbusDataType.INT_32, unit=unit) * -1 soc = self.client.read_holding_registers(39424, ModbusDataType.INT_16, unit=unit) diff --git a/packages/modules/devices/solakon/solakon_one/inverter.py b/packages/modules/devices/solakon/solakon_one/inverter.py index b5c902f3b4..6cc51a3dfd 100644 --- a/packages/modules/devices/solakon/solakon_one/inverter.py +++ b/packages/modules/devices/solakon/solakon_one/inverter.py @@ -27,8 +27,8 @@ def initialize(self) -> None: def update(self) -> None: unit = self.component_config.configuration.modbus_id # Gesamte DC PV Leistung aller vier MPPT in W - power = self.client.read_holding_registers(39118, ModbusDataType.INT_32, unit=unit) #* -1 - # Gesamte DC PV Tagesproduktion kWh * 0,1 + power = self.client.read_holding_registers(39118, ModbusDataType.INT_32, unit=unit) + # Gesamte DC PV Tagesproduktion in Wh exported = self.client.read_holding_registers(39603, ModbusDataType.UINT_32, unit=unit) * 10 inverter_state = InverterState( From a731b0415b0e6d231bc13e535386c8e966a67265 Mon Sep 17 00:00:00 2001 From: mekrapp <158028484+mekrapp@users.noreply.github.com> Date: Thu, 4 Dec 2025 22:41:26 +0100 Subject: [PATCH 13/14] Update bat.py obsolete spaces removed --- packages/modules/devices/solakon/solakon_one/bat.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/modules/devices/solakon/solakon_one/bat.py b/packages/modules/devices/solakon/solakon_one/bat.py index 9923c268c9..64a6e85e5b 100644 --- a/packages/modules/devices/solakon/solakon_one/bat.py +++ b/packages/modules/devices/solakon/solakon_one/bat.py @@ -32,7 +32,7 @@ def update(self) -> None: # AC Leistung am Stecker, Batterie aus dem Netz aufladen hat positive Werte, # Leistung aus der Batterie und/oder aus PV ins Netz abgeben hat negative Werte power = self.client.read_holding_registers(39134, ModbusDataType.INT_32, unit=unit) * -1 - soc = self.client.read_holding_registers(39424, ModbusDataType.INT_16, unit=unit) + soc = self.client.read_holding_registers(39424, ModbusDataType.INT_16, unit=unit) # tägliche DC Ladung der Batterie in Wh imported = self.client.read_holding_registers(39607, ModbusDataType.UINT_32, unit=unit) * 10 # tägliche DC Entladung der Batterie in Wh From 4287f747900dd7386dbb3726a8fcefb278ab16fb Mon Sep 17 00:00:00 2001 From: mekrapp <158028484+mekrapp@users.noreply.github.com> Date: Fri, 5 Dec 2025 19:13:48 +0100 Subject: [PATCH 14/14] Modbus registers changed from daily to total counter values --- packages/modules/devices/solakon/solakon_one/bat.py | 9 +++++---- packages/modules/devices/solakon/solakon_one/inverter.py | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/modules/devices/solakon/solakon_one/bat.py b/packages/modules/devices/solakon/solakon_one/bat.py index 64a6e85e5b..4d8d2c5342 100644 --- a/packages/modules/devices/solakon/solakon_one/bat.py +++ b/packages/modules/devices/solakon/solakon_one/bat.py @@ -32,11 +32,12 @@ def update(self) -> None: # AC Leistung am Stecker, Batterie aus dem Netz aufladen hat positive Werte, # Leistung aus der Batterie und/oder aus PV ins Netz abgeben hat negative Werte power = self.client.read_holding_registers(39134, ModbusDataType.INT_32, unit=unit) * -1 + # SoC Ladezustand der Batterie in % soc = self.client.read_holding_registers(39424, ModbusDataType.INT_16, unit=unit) - # tägliche DC Ladung der Batterie in Wh - imported = self.client.read_holding_registers(39607, ModbusDataType.UINT_32, unit=unit) * 10 - # tägliche DC Entladung der Batterie in Wh - exported = self.client.read_holding_registers(39611, ModbusDataType.UINT_32, unit=unit) * 10 + # gesamte DC Ladung der Batterie in Wh + imported = self.client.read_holding_registers(39605, ModbusDataType.UINT_32, unit=unit) * 10 + # gesamte DC Entladung der Batterie in Wh + exported = self.client.read_holding_registers(39609, ModbusDataType.UINT_32, unit=unit) * 10 bat_state = BatState( power=power, diff --git a/packages/modules/devices/solakon/solakon_one/inverter.py b/packages/modules/devices/solakon/solakon_one/inverter.py index 6cc51a3dfd..130bb10e1b 100644 --- a/packages/modules/devices/solakon/solakon_one/inverter.py +++ b/packages/modules/devices/solakon/solakon_one/inverter.py @@ -28,8 +28,8 @@ def update(self) -> None: unit = self.component_config.configuration.modbus_id # Gesamte DC PV Leistung aller vier MPPT in W power = self.client.read_holding_registers(39118, ModbusDataType.INT_32, unit=unit) - # Gesamte DC PV Tagesproduktion in Wh - exported = self.client.read_holding_registers(39603, ModbusDataType.UINT_32, unit=unit) * 10 + # Gesamte DC PV Produktion in Wh + exported = self.client.read_holding_registers(39601, ModbusDataType.UINT_32, unit=unit) * 10 inverter_state = InverterState( power=power,