From 8f54b4872a52291f8e50e13ad73671244c934cf5 Mon Sep 17 00:00:00 2001 From: seaspotter Date: Thu, 5 Nov 2026 18:57:16 +0100 Subject: [PATCH 1/2] Lambda consumer: encode EVU power as signed int16 to fix crash on negative (PV surplus) values --- packages/modules/consumers/lambda_/lambda_/consumer.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/modules/consumers/lambda_/lambda_/consumer.py b/packages/modules/consumers/lambda_/lambda_/consumer.py index 43b59c7fc3..2946e6cbfd 100644 --- a/packages/modules/consumers/lambda_/lambda_/consumer.py +++ b/packages/modules/consumers/lambda_/lambda_/consumer.py @@ -29,7 +29,8 @@ def send_values(values: CurrentValues) -> None: # Wärmepumpe selbst auf Datenquelle "Modbus Client" umgestellt werden (Kap. 4.3), # das kann openWB nicht per Modbus setzen. Wird vom Core automatisch aufgerufen, # solange dieser Verbraucher als ConsumerUsage.SELF_CONTROLLED konfiguriert ist. - client.write_register(102, values.evu_power, wordorder=Endian.Little, unit=config.configuration.modbus_id) + client.write_register(102, values.evu_power, data_type=ModbusDataType.INT_16, + wordorder=Endian.Little, unit=config.configuration.modbus_id) def update() -> ConsumerState: power = client.read_holding_registers( From 5b1e8a453c32043c40b9e0a462cd9fc3ac2662dd Mon Sep 17 00:00:00 2001 From: seaspotter Date: Thu, 5 Nov 2026 19:09:29 +0100 Subject: [PATCH 2/2] Lambda consumer: encode register 102 as signed int16, align set_power_limit sign with send_values --- packages/modules/consumers/lambda_/lambda_/consumer.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/modules/consumers/lambda_/lambda_/consumer.py b/packages/modules/consumers/lambda_/lambda_/consumer.py index 2946e6cbfd..beba8684bc 100644 --- a/packages/modules/consumers/lambda_/lambda_/consumer.py +++ b/packages/modules/consumers/lambda_/lambda_/consumer.py @@ -40,8 +40,12 @@ def update() -> ConsumerState: def set_power_limit(power_limit: float, data: SetLimitData) -> None: # Schreibt den von openWB berechneten Überschuss in Register 102 (E-Manager Bezug/Einspeisung). # Keine echte Leistungsvorgabe - die Wärmepumpe regelt weiterhin selbst anhand dieses Wertes. + # Negiert wie in send_values(), da der E-Manager auf "Neg. E-Überschuss" eingestellt sein muss + # (negativ = Überschuss) - ohne das Minus würde eine zugeteilte Leistung als Fehlbetrag + # missverstanden. client.write_register(102, - max(power_limit, 0), + -max(power_limit, 0), + data_type=ModbusDataType.INT_16, wordorder=Endian.Little, unit=config.configuration.modbus_id)