From f85b819ef8b58b47a9cd4d92f32d3224b81c9ab7 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Fri, 16 Oct 2026 14:21:25 +0200 Subject: [PATCH 1/3] IDM: fix self controlled --- packages/modules/consumers/idm/idm/consumer.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/modules/consumers/idm/idm/consumer.py b/packages/modules/consumers/idm/idm/consumer.py index 510ed8dad6..9e06141ad4 100644 --- a/packages/modules/consumers/idm/idm/consumer.py +++ b/packages/modules/consumers/idm/idm/consumer.py @@ -38,7 +38,9 @@ def send_values(values: CurrentValues) -> None: pv_power = max(-values.pv_power, 0) # Ladeleistung mit einrechnen, da diese sonst fälschlich als freier Überschuss an die # WP gemeldet würde, obwohl sie bereits von einer Fahrzeugladung verbraucht wird - surplus = max(pv_power - values.home_consumption - values.cp_power, 0) + chargepoint_consumption = max(values.cp_power, 0) + battery_charge = max(values.bat_power, 0) + surplus = max(pv_power - values.home_consumption - chargepoint_consumption - battery_charge, 0) battery_soc = int(values.bat_soc) if values.bat_soc is not None else -1 # Reg 74: Aktueller PV-Überschuss [kW] From dd52e8ed9c3435e26fb67731559fa52e760c2e94 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Fri, 16 Oct 2026 15:32:49 +0200 Subject: [PATCH 2/3] use evu power for surplus --- packages/modules/consumers/idm/idm/consumer.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/modules/consumers/idm/idm/consumer.py b/packages/modules/consumers/idm/idm/consumer.py index 9e06141ad4..50968512c6 100644 --- a/packages/modules/consumers/idm/idm/consumer.py +++ b/packages/modules/consumers/idm/idm/consumer.py @@ -38,9 +38,7 @@ def send_values(values: CurrentValues) -> None: pv_power = max(-values.pv_power, 0) # Ladeleistung mit einrechnen, da diese sonst fälschlich als freier Überschuss an die # WP gemeldet würde, obwohl sie bereits von einer Fahrzeugladung verbraucht wird - chargepoint_consumption = max(values.cp_power, 0) - battery_charge = max(values.bat_power, 0) - surplus = max(pv_power - values.home_consumption - chargepoint_consumption - battery_charge, 0) + surplus = max(-values.evu_power, 0) battery_soc = int(values.bat_soc) if values.bat_soc is not None else -1 # Reg 74: Aktueller PV-Überschuss [kW] From a1975a27400fa6a7757e465657ec89db4437ce72 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Mon, 19 Oct 2026 09:11:50 +0200 Subject: [PATCH 3/3] IDM home consumption --- packages/modules/consumers/idm/idm/consumer.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/modules/consumers/idm/idm/consumer.py b/packages/modules/consumers/idm/idm/consumer.py index 50968512c6..cfcb80291f 100644 --- a/packages/modules/consumers/idm/idm/consumer.py +++ b/packages/modules/consumers/idm/idm/consumer.py @@ -47,8 +47,11 @@ def send_values(values: CurrentValues) -> None: # Reg 78: Aktuelle PV-Produktion [kW] client.write_register(78, pv_power / 1000, data_type=ModbusDataType.FLOAT_32, wordorder=Endian.Little, unit=modbus_id) - # Reg 82: Hausverbrauch [kW], Default 0 - client.write_register(82, values.home_consumption / 1000, data_type=ModbusDataType.FLOAT_32, + + # Reg 82: Hausverbrauch [kW], Default 0 - aus PV/Netz/Speicher berechnet, damit jeder Verbraucher + # (auch die WP selbst) automatisch enthalten ist, unabhängig von der internen Hausverbrauchs-Berechnung + idm_home_consumption = max(pv_power + values.evu_power - values.bat_power, 0) + client.write_register(82, idm_home_consumption / 1000, data_type=ModbusDataType.FLOAT_32, wordorder=Endian.Little, unit=modbus_id) # Reg 84: Batterieentladung [kW], Default 0 (negativ = Ladung). values.bat_power kommt roh aus # process.py (negativ = Entladung, positiv = Ladung, gleiche Konvention wie z.B. bei Sungrow) ->