[SOLVED] Migrate Stiebel-Eltron LWZ403+ISGWeb to OH2.4 and new modbus-binding-2.4.0

See the modbus binding documentation, ‘Transformations’

Hi Shorty,

yes you are correct the addressing is -1 so if you want to read register 1001 you have to put register 1000 in your OpenHab configuration.


// Wrap everything in a function (no global variable pollution)
// variable "input" contains data passed by openhab
(function(inputData) {
// on read: the polled number as string
// on write: openHAB command as string
var DIVIDE_BY = 10;
return parseFloat(inputData) / DIVIDE_BY;

I did not try to write value that need to be transformed, but this works similarly. I think it was explained in the docu: https://www.openhab.org/addons/bindings/modbus/#modbus-binding

I will as well look into this once I have more time.


Hi Jens,

I would like to control the fan with Alexa. Can you help me with that?


Hi Stlyewarz3,

I am not integrating with Alexa yet, however I think once you have the OpenHAB skill setup and you can control the fan from OpenHAB now that this should as well work via Alexa:

OpenHAB Alexa Skill

Why would you do that via Alexa though? There is 2 reasons to adjust fan speed: outside temperature (you do not want to get the hot air in summer into the house) and air quality (which you could measure with NetAtmo modules which have built-in CO2 sensors).

A third could be noise - but if your system is correctly configured you should not have annoying noise.


  • Jens

I want to put the levels 0,1,2,3 with Alexa. alexa needs a switch, but a switch has only two states. So I need 4 switches, each with a status (0, 1, 2, 3). Or do you have another idea?

I have fixed this in OpenHAB with declaring the item itself as number and then work with a mapping in OpenHAB

Frame label=“Lueftersteuerung” {
Switch item=STUFETAG mappings=[0=“OFF”, 1=“MIN”, 2=“MED”, 3=“MAX”]
Switch item=STUFENACHT mappings=[0=“OFF”, 1=“MIN”, 2=“MED”, 3=“MAX”]

As said I did not work with Alexa yet but I use the REST API and basically you can set the value - maybe you could say Alexa, fan level 0…?


Hi Jens,

Do you have any experience with trying integrate the new LWZ 180 & 280 machines with modbus? If so can you help? @JensF

Hi @Darbur8,

it seems these are not compatible with the ISG Web interface which is needed (or recommended, I think there was a guide on the web to create your own serial adapter, too).

You can check out the ISG docu if you find references to supported devices:

[https://www.stiebel-eltron.de/content/dam/ste/cdbassets/historic/bedienungs-_u_installationsanleitungen/ISG_Modbus__b89c1c53-6d34-4243-a630-b42cf0633361.pdf](https://Stiebel Eltron LWZ)


Hi @JensF

Thank you for your reply.

Do you have the guide at hand? Or can you tell me where I can find a it?

I just searched on Google and found this: lwz180/README.md at main · kdarnok/lwz180 · GitHub

Maybe it helps - I am afraid I cannot help you further.


How to transform in Openhab 4.0.0?
It seems as the JS transform (divide10) is not available anymore?

There seems to be discussions on this within the community already, check out this thread

I am yet to move on to OH4, currently on 3.4.4


I’m trying to set the warm water temperature in the modbus stiebel isg binding - default name water temperature set point - but if I enter 37 (for 37°C) it shows a few seconds the value, but falls back to the currently set valvue (44°C in my case) and is not transmitted to the ISG.
In the former version (modbus without stiebel extension) I’ve transmitted 370 (due to the data type) - that worked.
What do I need to do to get it done with the new official binding?

Modbus binding support read/write transformation. You need to scale values according to ISG thresholds.

But what in Detail do I need to send? I tried various values,read once again the Stiebel ISG modbus pdf, in case I miss something…?
Please advice,
thanks, Christian

Look for examples involving ie. javascript transformations and divide.js examples on the forum. Whole trick you need is making i.e $ohState*10 during write and $isgValue/10 while reading. Even this topic includes an example: [SOLVED] Migrate Stiebel-Eltron LWZ403+ISGWeb to OH2.4 and new modbus-binding-2.4.0 - #19 by JensF

Please note that openHAB 4.0 changes a bit syntax for calling transformation services, so many of available blueprints may require further tweaking.

I did that, but in the 4.0.0 and 4.0.1 release of the modbus stiebel binding, it shows the correct value.
But you can’t write it back seemingly.

It worked in the OH3 versions with the divide script for reading and writing *10, not in OH4.

The question is if this is a bug in the most current version of the binding…
Writing the Operation Mode works.

Found the error, it was the wrong item.
Setpoint can’t be used to set the temperature

@Pinocchio could you kindly share your adjusted “things” and “items” file for the LWZ Modbus Binding to work properly in OH4 I am about to do the upgrade finally :slight_smile:

I changed mine from setting the transformation at THING level to items level: Example


`Thing data WWSOLLTAG [ readStart="1011", readValueType="int16", readTransform="JS(divide10.js)", writeStart="1011", writeValueType="int16", writeTransform="JS(multiply10.js)", writeType="holding" ]


`Thing data WWSOLLTAG [ readStart="1011", readValueType="int16", writeStart="1011", writeValueType="int16", writeType="holding" ]`


`Number WWSOLLTAG		"WW-Soll-Tag [%.1f °C]"			<temperature>	{ channel="modbus:data:lwz:heizungsdaten1:WWSOLLTAG:number", autopudate="false" }`


`Number WWSOLLTAG		"WW-Soll-Tag [%.1f °C]"			<temperature>	{ channel="modbus:data:lwz:heizungsdaten1:WWSOLLTAG:number", profile="transform:NASHORNJS", toItemScript="divide10.js", toHandlerScript="multiply10.js" }`

Of course I do have the transform scripts in the /conf/transform folder. I tried as well “transform:JS” without success. Maybe share your transform scripts, too - that would be awesome.


Hi all + @Pinocchio

I found the mistake. It seems there is a syntax error in the latest transformation documentation

Syntax there is:

Number <itemName> { channel="<channelUID>"[profile="transform:JS", toItemScript="decode_json.js" toHandlerScript="encode_json.js" ] }

Syntax should be:

Number <itemName> { channel="<channelUID>"[profile="transform:JS", toItemScript="decode_json.js", toHandlerScript="encode_json.js" ] }

Need to separate all profile options with a semicolon. That did the trick for me at least :slight_smile:


`Number WWSOLLTAG		"WW-Soll-Tag [%.1f °C]"			<temperature>	{ channel="modbus:data:lwz:heizungsdaten1:WWSOLLTAG:number"[ profile="transform:JS", toItemScript="divide10.js", toHandlerScript="multiply10.js" ] }`