Hey,
I’m kind of lost with the modbus number component. I have a holding register which holds a temperature in a format which needs translating to celsius.
The formula is: ((value - 96) / 2) + 18
I did create a number element:
number:
- platform: modbus_controller
modbus_controller_id: fairland
name: "PWP Target Temperature Heating"
id: pwp_target_temperature_heating
address: 0x3
value_type: U_WORD
unit_of_measurement: "°C"
register_type: holding
# min_value: 18
# max_value: 32
lambda: "return (x-96) / 2 + 18;"
write_lambda: |-
ESP_LOGD("main", "Modbus Number incoming value = %f", x);
uint16_t converted = ((x-18) * 2 + 96);
ESP_LOGD("main", "Modbus Number converted value = %f", converted);
ESP_LOGD("main", "Test %f", ((x-18) * 2 + 96));
payload.push_back(converted);
return x;
I would need a reverse transformation before the value is written back to the modbus device. I followed the documentation with the above code. I get the incoming value from the UI (see first debug statement below). However the conversion is not stored in converted (see second debug statement). If I debug write out the conversion directly, it shows the expected number. In the end it tries to send the unconverted number which is not accepted by the modbus device.
[17:38:00][D][number:054]: 'PWP Target Temperature Heating' - Setting number value
[17:38:00][D][number:113]: New number value: 32.000000
[17:38:00][D][main:228]: Modbus Number incoming value = 32.000000
[17:38:00][D][main:230]: Modbus Number converted value = 32.000000
[17:38:00][D][main:231]: Test 124.000000
[17:38:00][D][number:012]: 'PWP Target Temperature Heating': Sending state 32.000000
I followed the example from:
What am I doing wrong?
Thanks