Convert values read from modbus device


I have a systemair Genius Heatpump and Aircirculating device.

The controller can be contacted over modbus tcp.

The vendor decided to use int16 registers also for Values that are typically floats like temperatures.

What they do is that they multiply the reading by ten (5.5343°C -> 55.343) and then scrap away everything after the dot.

The 55 is stored in the register.

What I would like to know is how can I decode this on openHAB to a float so that it is displayed correctly in the webfrontend and stored in the persistence layer.


Number Temp_Outdoor_Genius “Ansaug Temperatur Genius [%.1f °C]” (Aussen, Sensor, Genius) {modbus=“geniusInput:0”}
Number Temp_Supply_Genius “Supply Temperatur Genius [%.1f °C]” (Genius, Sensor) {modbus=“geniusInput:1”}
Number Temp_Extract_Genius “Extract Temperatur Genius [%.1f °C]” (Genius, Sensor) {modbus=“geniusInput:2”}
Number Temp_HW_Genius “Hot water Temperatur Genius [%.1f °C]” (Genius, Sensor) {modbus=“geniusInput:3”}

I believe that with this binding you could use JS transform to just divide values by 10.

Understood. Thanks for the hint.

Unfortunately the transforms are not supported in the modbus binding. I’m currently working on the implementation.

Typical way to implement this scaling would be to use proxy items, see Design Pattern: Proxy Item


1 Like

Thanks, Sami, good to know.
I’m already using proxy for Weather.

Hi Sami.

How is the state?

Is it finally possible to convert a recieved value? i got for example 33 wich means 3.3 degrees.
(FC4 int16*10)



The use of proxy items is still working, as it was one year ago.

There is also transformation support added some months ago, see the docs: (there is example regarding scaling of values)

Furthermore, there is new binding in “review” phase, see Modbus openHAB2 binding available for alpha testing

The new binding is for openhab2, with “things” and openhab2 way of configuring things. I welcome you to try it, if you are brave enough!

1 Like