From b6dc50cbb8bf50257f8ee6b36c05c0fa24fa099f Mon Sep 17 00:00:00 2001 From: Christian Koch <78686276+chilobo@users.noreply.github.com> Date: Tue, 23 Dec 2025 12:58:27 +0100 Subject: [PATCH] Updated and signed off version of Lambda Heat Pump (#19835) Signed-off-by: Christian Koch <78686276+chilobo@users.noreply.github.com> --- .../org.openhab.binding.modbus.lambda/README.md | 2 ++ .../lambda/internal/LambdaBindingConstants.java | 2 ++ .../modbus/lambda/internal/dto/HeatpumpBlock.java | 2 ++ .../lambda/internal/handler/HeatpumpHandler.java | 4 ++++ .../lambda/internal/parser/AbstractBaseParser.java | 9 +++++++++ .../internal/parser/HeatpumpBlockParser.java | 2 ++ .../main/resources/OH-INF/i18n/lambda.properties | 2 ++ .../OH-INF/thing/heat-pump-thing-types.xml | 14 ++++++++++++++ 8 files changed, 37 insertions(+) diff --git a/bundles/org.openhab.binding.modbus.lambda/README.md b/bundles/org.openhab.binding.modbus.lambda/README.md index d4d47b0d00..1bce4ca3db 100644 --- a/bundles/org.openhab.binding.modbus.lambda/README.md +++ b/bundles/org.openhab.binding.modbus.lambda/README.md @@ -125,6 +125,8 @@ This group contains general operational information about the heat pump itself. | heat-pump-relais-state | Number:Temperature | true | Heatpump Relais State for 2nd heating stage | | heat-pump-vdae | Number:Energy | true | Accumulated electrical energy consumption of compressor unit | | heat-pump-vdaq | Number:Energy | true | Accumulated thermal energy output of compressor unit | +| heat-pump-vdae-swap | Number:Energy | true | Accumulated electrical energy consumption of compressor unit (DWord swapped) | +| heat-pump-vdaq-swap | Number:Energy | true | Accumulated thermal energy output of compressor unit (DWord swapped) | ### Boiler Group diff --git a/bundles/org.openhab.binding.modbus.lambda/src/main/java/org/openhab/binding/modbus/lambda/internal/LambdaBindingConstants.java b/bundles/org.openhab.binding.modbus.lambda/src/main/java/org/openhab/binding/modbus/lambda/internal/LambdaBindingConstants.java index 601d31e90c..bf8bd66216 100644 --- a/bundles/org.openhab.binding.modbus.lambda/src/main/java/org/openhab/binding/modbus/lambda/internal/LambdaBindingConstants.java +++ b/bundles/org.openhab.binding.modbus.lambda/src/main/java/org/openhab/binding/modbus/lambda/internal/LambdaBindingConstants.java @@ -88,6 +88,8 @@ public class LambdaBindingConstants { public static final String CHANNEL_HEAT_PUMP_RELAIS_STATE = "heat-pump-relais-state"; public static final String CHANNEL_HEAT_PUMP_VDAE = "heat-pump-vdae"; public static final String CHANNEL_HEAT_PUMP_VDAQ = "heat-pump-vdaq"; + public static final String CHANNEL_HEAT_PUMP_VDAE_SWAP = "heat-pump-vdae-swap"; + public static final String CHANNEL_HEAT_PUMP_VDAQ_SWAP = "heat-pump-vdaq-swap"; // Boiler public static final String CHANNEL_BOILER_ERROR_NUMBER = "boiler-error-number"; diff --git a/bundles/org.openhab.binding.modbus.lambda/src/main/java/org/openhab/binding/modbus/lambda/internal/dto/HeatpumpBlock.java b/bundles/org.openhab.binding.modbus.lambda/src/main/java/org/openhab/binding/modbus/lambda/internal/dto/HeatpumpBlock.java index 283a3f78f1..ce43814231 100644 --- a/bundles/org.openhab.binding.modbus.lambda/src/main/java/org/openhab/binding/modbus/lambda/internal/dto/HeatpumpBlock.java +++ b/bundles/org.openhab.binding.modbus.lambda/src/main/java/org/openhab/binding/modbus/lambda/internal/dto/HeatpumpBlock.java @@ -42,4 +42,6 @@ public class HeatpumpBlock { public int heatpumpRelaisState; public long heatpumpVdAE; public long heatpumpVdAQ; + public long heatpumpVdAEswap; + public long heatpumpVdAQswap; } diff --git a/bundles/org.openhab.binding.modbus.lambda/src/main/java/org/openhab/binding/modbus/lambda/internal/handler/HeatpumpHandler.java b/bundles/org.openhab.binding.modbus.lambda/src/main/java/org/openhab/binding/modbus/lambda/internal/handler/HeatpumpHandler.java index 2ed4b8ace7..4a7311dba2 100644 --- a/bundles/org.openhab.binding.modbus.lambda/src/main/java/org/openhab/binding/modbus/lambda/internal/handler/HeatpumpHandler.java +++ b/bundles/org.openhab.binding.modbus.lambda/src/main/java/org/openhab/binding/modbus/lambda/internal/handler/HeatpumpHandler.java @@ -451,6 +451,10 @@ public class HeatpumpHandler extends BaseThingHandler { getScaled(block.heatpumpVdAE, KILOWATT_HOUR, -3.0)); updateState(channelUID(GROUP_HEAT_PUMP, CHANNEL_HEAT_PUMP_VDAQ), getScaled(block.heatpumpVdAQ, KILOWATT_HOUR, -3.0)); + updateState(channelUID(GROUP_HEAT_PUMP, CHANNEL_HEAT_PUMP_VDAE_SWAP), + getScaled(block.heatpumpVdAEswap, KILOWATT_HOUR, -3.0)); + updateState(channelUID(GROUP_HEAT_PUMP, CHANNEL_HEAT_PUMP_VDAQ_SWAP), + getScaled(block.heatpumpVdAQswap, KILOWATT_HOUR, -3.0)); resetCommunicationError(); } diff --git a/bundles/org.openhab.binding.modbus.lambda/src/main/java/org/openhab/binding/modbus/lambda/internal/parser/AbstractBaseParser.java b/bundles/org.openhab.binding.modbus.lambda/src/main/java/org/openhab/binding/modbus/lambda/internal/parser/AbstractBaseParser.java index ddda4421dd..aabcbf44ce 100644 --- a/bundles/org.openhab.binding.modbus.lambda/src/main/java/org/openhab/binding/modbus/lambda/internal/parser/AbstractBaseParser.java +++ b/bundles/org.openhab.binding.modbus.lambda/src/main/java/org/openhab/binding/modbus/lambda/internal/parser/AbstractBaseParser.java @@ -154,4 +154,13 @@ public class AbstractBaseParser { protected Long extractInt32(ModbusRegisterArray raw, int index, long def) { return Objects.requireNonNull(extractOptionalInt32(raw, index).orElse(def)); } + + protected Optional extractOptionalInt32Swap(ModbusRegisterArray raw, int index) { + return ModbusBitUtilities.extractStateFromRegisters(raw, index, ValueType.INT32_SWAP) + .map(DecimalType::longValue).filter(value -> value != 0); + } + + protected Long extractInt32Swap(ModbusRegisterArray raw, int index, long def) { + return Objects.requireNonNull(extractOptionalInt32Swap(raw, index).orElse(def)); + } } diff --git a/bundles/org.openhab.binding.modbus.lambda/src/main/java/org/openhab/binding/modbus/lambda/internal/parser/HeatpumpBlockParser.java b/bundles/org.openhab.binding.modbus.lambda/src/main/java/org/openhab/binding/modbus/lambda/internal/parser/HeatpumpBlockParser.java index 790354cde2..27e175e4c1 100644 --- a/bundles/org.openhab.binding.modbus.lambda/src/main/java/org/openhab/binding/modbus/lambda/internal/parser/HeatpumpBlockParser.java +++ b/bundles/org.openhab.binding.modbus.lambda/src/main/java/org/openhab/binding/modbus/lambda/internal/parser/HeatpumpBlockParser.java @@ -50,6 +50,8 @@ public class HeatpumpBlockParser extends AbstractBaseParser { block.heatpumpRelaisState = extractInt16(raw, 19, (short) 0); block.heatpumpVdAE = extractInt32(raw, 20, (long) 0); block.heatpumpVdAQ = extractInt32(raw, 22, (long) 0); + block.heatpumpVdAEswap = extractInt32Swap(raw, 20, (long) 0); + block.heatpumpVdAQswap = extractInt32Swap(raw, 22, (long) 0); return block; } } diff --git a/bundles/org.openhab.binding.modbus.lambda/src/main/resources/OH-INF/i18n/lambda.properties b/bundles/org.openhab.binding.modbus.lambda/src/main/resources/OH-INF/i18n/lambda.properties index d363c48c97..47f5f2c46c 100644 --- a/bundles/org.openhab.binding.modbus.lambda/src/main/resources/OH-INF/i18n/lambda.properties +++ b/bundles/org.openhab.binding.modbus.lambda/src/main/resources/OH-INF/i18n/lambda.properties @@ -111,6 +111,8 @@ channel-type.modbus.heat-pump-request-heat-sink-channel.label = Heatpump request channel-type.modbus.heat-pump-relais-state-channel.label = Heatpump Relais State channel-type.modbus.heat-pump-vdae-channel.label = Heatpump VdA E channel-type.modbus.heat-pump-vdaq-channel.label = Heatpump VdA Q +channel-type.modbus.heat-pump-vdae-swap-channel.label = Heatpump VdA E (DWord swapped) +channel-type.modbus.heat-pump-vdaq-swap-channel.label = Heatpump VdA Q (DWord swapped) # Boiler channel-type.modbus.boiler-error-number-channel.label = Boiler Error Number diff --git a/bundles/org.openhab.binding.modbus.lambda/src/main/resources/OH-INF/thing/heat-pump-thing-types.xml b/bundles/org.openhab.binding.modbus.lambda/src/main/resources/OH-INF/thing/heat-pump-thing-types.xml index 503cf80c86..871787b827 100644 --- a/bundles/org.openhab.binding.modbus.lambda/src/main/resources/OH-INF/thing/heat-pump-thing-types.xml +++ b/bundles/org.openhab.binding.modbus.lambda/src/main/resources/OH-INF/thing/heat-pump-thing-types.xml @@ -66,6 +66,8 @@ + + @@ -265,4 +267,16 @@ + + Number:Energy + + + + + + Number:Energy + + + +