Lambda Heat Pump in OpenHab

If I remember correctly, the LAMBDA service had to set the write permissions to writable registers once.

Edit: Modbus is enabled by default, but read-only! If you want to write, the service technician must enable it.

Thanks for confirming.

This is soooo German. Yuck.

I asked to enable the E-Manager by mail to the lambda-support. Within one day they configured it to
E-Meter Kommunikationsart: ModBus Client
E-Meter Messpunkt: E-Eintrag
Might be they allowed writing automatically when I asked for using the E-Manager.

Regarding limiting heating: You might try to switch off the heating circuit(s) writing 0 to register 06: Operating mode. This register ist RW. I never tried it, might be interesting.

If you use the lambda heating water for domestic use you could try to lower the Maximum Boiler Temperature (Register 50).

Is anybody able to test the solar part? I have added it to the binding but have no possibility to test it.

I can test the Lambda Solar module in OH5.0 M3 if you give me a new jar. I managed to get good values from read-only registers for the other modules simply by configuring things and items in the gui. I can also read a solar registers with a regular modbus data thing.
Thanks very much for developing this binding

I will send you the jar later, I am travelling right now. Itmay be you habe to contact Lamda if you want to habve writing enabled.
Greeings
Christian

This is the version compiled for Java 17:
https://drive.google.com/file/d/1tQFdGsDOukC3OnIa3eNrUN-i5gQFG1E9/view?usp=sharing
and this for Java 21:
https://drive.google.com/file/d/1__yIuFvBoWHBluXSBzWqvG4sR4POBIXO/view?usp=sharing

Running the Java 21 version but the new Lambda Solar thing has no channels probably due to an extra r in solarr: [core.internal.thing.ThingTypeResource] - Cannot find channel group type: modbus:solarr

Thank you for finding this error, here is the new version:
Version for Java 21

Version for Java 17

I noticed that the first and second solar channels have the same label “Solar Error Number”. The second one should be “Solar Operating State”. The item created from this channel doesn’t show the text of the state “0=STBY, 1=HEATING, 2=ERROR, 3=OFF”

All the solar and heating circuit channel names end with a semicolon as do the items that are created from them.

Nothing to do with the solar module, but the boiler channel “Actual Low Temperature” should probably be “Boiler Actual Low Temperature” to be consistent with the other channels.

Other than the above it all looks good for my setup OH5.0.0 M3, Lambda EU08L, SW V.1.1.0 Feb20 2025, FW V0.0.8 -3k Feb 19 2025 ( if I’m looking in the right place). I don’t see all RO registers shown in the Lambda modbus protocol of 13.02.2025 even when using PowerHud modbus tester in particular two I am interested in: “Boiler Actual circulation temp.” and “Boiler Actual circulation pump state”. A few days ago I asked Lambda support to enable them but no response from them so far. I also asked them to enable RW registers for me as I can’t see most of them in OH even though I see values for a lot of them in PowerHud. I wonder if it would be possible to catch these in the binding and display them as read-only? Just a thought.

Anyway the bottom line is that the binding works superbly and is very easy to setup using the gui to created the bridge, things and items. I realised after a while that I didn’t need to create modbus poller things. Very many thanks for creating this binding.

1 Like

Thank you for the valuable feedback. I didn’t look into the solar part because I do not have a thermic module. I guess I will be able to correct the errors on tuesday, tomorrow will be a busy day.

Regarding:
“Boiler Actual circulation temp.” and “Boiler Actual circulation pump state”:
The modbus document I downloaded on 23.02.25 does not show these values.
On page 1 it states Datum: 13.02.2025

The modbus document before dated 28.11.2025 had a section General Systems Settings with registers 00..11 and 50..58 which disappeared in the newer one.

Here is the new version for Java 21:
https://drive.google.com/file/d/1rhdXaaCY2GM7gOr22GRjDUbipcUIa5d4/view?usp=drive_link

Did you try to write the Channel Actual Power in the E-Manager section? This is the only one I really use and it works for me. But Lambda Support had to configure my lambda to E-Eintrag as state in my posting from July 1st 2024. Could be that they enabled writing to the other registers marked RW in this process too.

I remember changing Maximum buffer temperature and Maximum boiler temperature. This changed the values but I don’t remember if the values changed the values shown in the user interface of the heat pump.

1 Like

The new jar fixes my three issues thanks.
I received a reply from Lambda Support saying that my software version 20/2025 already has the registers “Actual temperature circulation sensor” and “Actual state of circulation pump” but I get an error trying to read them using PowerHud. I’ll let support know.
Support also told me I already have access to the RW registers and indeed I am able to update them from PowerHud but not from OH. Perhaps you could show me your definition of item Lambda_Boiler_Maximum_Temperature and its channel definition so I can try and work out why the default item created by the gui only shows null.

1 Like

I am working with a dsl script, for example:

  var double Boiler_MT_Neu =  44.5
  lambdaboiler_maximumboilertemperature.sendCommand(Boiler_MT_Neu)

Shortly after executing this code the item in Openhab reflects this value. But in the Lambda userinterface in my Browser still Solltemp shows the old value: 43,5 °C. So my guess that you can change “Solltemperatur” does not seem to be valid.

The same happens with the maximum temperature of the buffer.

I checked with the Lambda download section:
https://lambda-wp.at/wp-content/uploads/2025/04/Modbus-Beschreibung-und-Protokoll.pdf
shows “Actual temperature circulation sensor”, but the file I got on Feb 22nd doesn’t.
I will implement the two registers.
I found another new register in the heating circuit section:
07 Target temperatur flow line
I implemented usage of these 3 registers but get an error when registering the polltasks.
PowerHud shows an error too when I try to access more than 4 registers at adress 2000 and more than 7 at adress 5000.
I wrote a mail asking to add the registers in my firmware and begged to make register boiler 05 RW.

1 Like

I tried again with 5.0.0 stable and I cannot get a Lambda Boiler thing to read or write to Solltemp in the Lambda heat pump. In case it helps, the normal modbus poller and data things shown below do work.

Things:

Bridge modbus:tcp:Test1Bridge "Test 1 Bridge"
   [ host="192.168.0.105", port=502, id=1, label="Test 1 Bridge", enableDiscovery=true  ]
 {
   Bridge poller Test1Poller2050 "Test 1 Poller 2050" [ start=2050, length=1, refresh=3000, type="holding" ]
   {
      Thing data Test1BoilerMaxTemp "Test 1 Boiler Max Temp"
      [ readStart="2050", readValueType="int16", writeType="holding", updateUnchangedValuesEveryMillis= 1000, writeValueType="int16", writeMultipleEvenWithSingleRegisterOrCoil=true, writeMaxTries=3, writeStart="2050"]
      }
}

Items:

Number Boiler_Max_Temp_Test_1  "Boiler Max Temp Test 1 [%.1f °C]"
   { channel="modbus:data:Test1Bridge:Test1Poller2050:Test1BoilerMaxTemp:number"
   [ profile="modbus:gainOffset", gain="0.1" , pre-gain-offset="0" ]
}

// Dummy Switch item to run a test rule to update the state of the item above
Switch LambdaTestRule "Lambda Test Rule"

Rules:

rule "Set Boiler Maximum Temperature"

when
   Item LambdaTestRule changed
then
   val targetTemp = 52.5
   logInfo("Lambda.Rules", "Test rule changing item to " + targetTemp)
   Boiler_Max_Temp_Test_1.sendCommand(targetTemp)

end

2 Likes

I tried a DSL script with “my” Binding:

  var double Boiler_MT_Neu =  42.5

  logInfo("Lambda_Testskript", "Boiler1 MT alt  :    " + String.format("%.1f", ((lambdaboiler_maximumboilertemperature.state) as Number).floatValue) +"°C")
  logInfo("Lambda_Testskript", "Boiler_MT_Neu   :    " + Boiler_MT_Neu + "°C") 
  lambdaboiler_maximumboilertemperature.sendCommand(Boiler_MT_Neu)
  logInfo("Lambda_Testskript", "Boiler1 MT neu  :    " + String.format("%.1f", ((lambdaboiler_maximumboilertemperature.state) as Number).floatValue) +"°C")

results in:

2025-09-05 10:42:57.003 [INFO ] [.core.model.script.Lambda_Testskript] - Boiler1 MT alt  :    44.0°C

2025-09-05 10:42:57.004 [INFO ] [.core.model.script.Lambda_Testskript] - Boiler_MT_Neu   :    42.5°C

2025-09-05 10:42:57.005 [INFO ] [.core.model.script.Lambda_Testskript] - Boiler1 MT neu  :    44.0°C

Calling it again after ~ 15 s I get:

2025-09-05 10:55:43.765 [INFO ] [.core.model.script.Lambda_Testskript] - Boiler1 MT alt  :    42.5°C

2025-09-05 10:55:43.765 [INFO ] [.core.model.script.Lambda_Testskript] - Boiler_MT_Neu   :    42.5°C

2025-09-05 10:55:43.766 [INFO ] [.core.model.script.Lambda_Testskript] - Boiler1 MT neu  :    42.5°C

Seems script and binding are working for Maximum Boiler temperature.

But:

Looking into the lambda userinterface with level 2 I cannot find 42.5°C.
Maximale Solltemperatur is 65°C
Solltemperatur ist 43°C

Hi, I’m also having issues writing the max boiler temperature on OH 5.0.2 with the latest snapshot. I have a strong gut feeling, that writeMultipleEvenWithSingleRegisterOrCoil is not true for this channel. I had tried with PowerHud to write a single register (function 6) and it didn’t complain. However the Lambda user interface did not reflect the change.

I then contacted Lambda support and they said everything was alright. As proof they sent screenshots, where they used the tool mbpoll with the option -W which makes it use function 10 (=writeMultipleEvenWithSingleRegisterOrCoil) to write the register. I tried myself with mbpoll -W [
] and the changes were immediately reflected in my Lambda’s user interface.

1 Like

Seems something is wrong with the binding. I used PowerHud Modbus Tester with 16-Write Multiple Registers with register 2050. The value shows in the UI of the heat pump but not in the corresponding Item in OpenHab. I have to look into this.
Seems MaximumBufferTemperatur and the registers >=5050 of heatingcircuit are off too. So it is a general problem with the registers in the 50s.
Thank you!

2 Likes

Thanks for looking into this! Maybe one hint: the maximum boiler temp register also wasn’t read on my side. The linked item only contains a non-NULL value since I tried to write it. There are some other items which show a NULL-value, but I didn’t yet check if this part of the problem.