Hi, I’m trying to bring three temperature and humidity modbus RS485 sensors into HA through ESPhome. I’ve been able to read these sensors from a PC using a USB-serial adapter and a modbus adapter, and CAS Modbus Scanner. However, on my ESP32 the sensor values remain solidly unknown.
Looking at the logs it appears that the ESP sends the right request to the sensors, but ignores the responses. It also looks as though the response is limited to the senors values, omitting device address, function code and CRC. The sensors are meant to return temperature in C *10 (e.g 206 for 20.6C) and humidity in a similar format. So the bytes that come back are not implausible as actual sensor values.
I’ve tried the obvious things I can think of - swapping RX and TX in case I screwed that up, comparing what the ESP sends to what CAS Modbus Scanner sent (similar, but not identical - the ESP merges the separate requests for temperature and humidity into one).
The YAML looks like this:
modbus:
#flow_control_pin: 5
id: modbus1
modbus_controller:
- id: mod_bus_A
## the Modbus device addr
address: 0x1
modbus_id: modbus1
setup_priority: -10
- id: mod_bus_B
## the Modbus device addr
address: 0x2
modbus_id: modbus1
setup_priority: -10
- id: mod_bus_C
## the Modbus device addr
address: 0x3
modbus_id: modbus1
setup_priority: -10
sensor:
- platform: modbus_controller
modbus_controller_id: mod_bus_A
name: "Attic Therm 1"
id: mbs_therm_1
register_type: read
address: 0001
unit_of_measurement: "C"
response_size: 1
accuracy_decimals: 0
skip_updates: 1
filters:
- multiply: 0.1
- platform: modbus_controller
modbus_controller_id: mod_bus_A
name: "Attic Humidity 1"
id: mbs_rh_1
register_type: read
value_type: S_WORD
address: 0002
unit_of_measurement: "%"
response_size: 1
accuracy_decimals: 0
skip_updates: 1
filters:
- multiply: 0.1
- platform: modbus_controller
modbus_controller_id: mod_bus_B
name: "Attic Therm 2"
id: mbs_therm_2
register_type: read
value_type: S_WORD
address: 0x0001
unit_of_measurement: "C"
response_size: 1
accuracy_decimals: 0
skip_updates: 1
filters:
- multiply: 0.1
- platform: modbus_controller
modbus_controller_id: mod_bus_B
name: "Attic Humidity 2"
id: mbs_rh_2
register_type: read
address: 0x0002
unit_of_measurement: "%"
response_size: 1
accuracy_decimals: 0
skip_updates: 1
filters:
- multiply: 0.1
- platform: modbus_controller
modbus_controller_id: mod_bus_C
name: "Attic Therm 3"
id: mbs_therm_3
register_type: read
address: 0001
unit_of_measurement: "C"
response_size: 1
accuracy_decimals: 0
skip_updates: 1
filters:
- multiply: 0.1
- platform: modbus_controller
modbus_controller_id: mod_bus_C
name: "Attic Humidity 3"
id: mbs_rh_3
register_type: read
address: 0002
unit_of_measurement: "%"
response_size: 1
accuracy_decimals: 0
skip_updates: 1
filters:
- multiply: 0.1
and the logs for the modbus stuff look like this:
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor 'Attic Therm 1'
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensor State Class: ''
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensor Unit of Measurement: 'C'
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensor Accuracy Decimals: 0
[17:23:46][V][modbus_controller:036]: Sending next modbus command to device 2 register 0x01 count 2
[17:23:46][V][modbus:194]: Modbus write: 02.04.00.01.00.02.20.38 (8)
[17:23:46][V][modbus_controller:486]: Command sent 4 0x1 2
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor 'Attic Humidity 1'
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensor State Class: ''
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensor Unit of Measurement: '%'
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensor Accuracy Decimals: 0
[17:23:46][V][modbus:042]: Modbus received Byte 206 (0Xce)
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor 'Attic Therm 2'
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensor State Class: ''
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensor Unit of Measurement: 'C'
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensor Accuracy Decimals: 0
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor 'Attic Humidity 2'
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensor State Class: ''
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensor Unit of Measurement: '%'
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensor Accuracy Decimals: 0
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor 'Attic Therm 3'
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensor State Class: ''
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensor Unit of Measurement: 'C'
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensor Accuracy Decimals: 0
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor 'Attic Humidity 3'
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensor State Class: ''
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensor Unit of Measurement: '%'
[17:23:46][C][modbus_controller.sensor:010]: modbus_controller.sensor Accuracy Decimals: 0
[17:23:46][D][modbus_controller:032]: Modbus command to device=2 register=0x01 countdown=0 no response received - removed from send queue
[17:23:46][V][modbus_controller:036]: Sending next modbus command to device 3 register 0x01 count 2
[17:23:46][V][modbus:194]: Modbus write: 03.04.00.01.00.02.21.E9 (8)
[17:23:46][V][modbus_controller:486]: Command sent 4 0x1 2
[17:23:46][C][modbus_controller:275]: ModbusController:
[17:23:46][C][modbus_controller:276]: Address: 0x01
[17:23:46][C][modbus_controller:278]: sensormap
[17:23:46][C][modbus_controller:282]: Sensor type=4 start=0x1 offset=0x0 count=1 size=1
[17:23:46][C][modbus_controller:282]: Sensor type=4 start=0x1 offset=0x1 count=1 size=1
[17:23:46][C][modbus_controller:284]: ranges
[17:23:46][C][modbus_controller:287]: Range type=4 start=0x1 count=2 skip_updates=1
[17:23:46][V][modbus:042]: Modbus received Byte 208 (0Xd0)
[17:23:46][V][modbus:042]: Modbus received Byte 255 (0Xff)
[17:23:46][C][modbus_controller:275]: ModbusController:
[17:23:46][C][modbus_controller:276]: Address: 0x02
[17:23:46][C][modbus_controller:278]: sensormap
[17:23:46][C][modbus_controller:282]: Sensor type=4 start=0x1 offset=0x0 count=1 size=1
[17:23:46][C][modbus_controller:282]: Sensor type=4 start=0x1 offset=0x1 count=1 size=1
[17:23:46][C][modbus_controller:284]: ranges
[17:23:46][C][modbus_controller:287]: Range type=4 start=0x1 count=2 skip_updates=1
[17:23:46][C][modbus_controller:275]: ModbusController:
[17:23:46][C][modbus_controller:276]: Address: 0x03
[17:23:46][C][modbus_controller:278]: sensormap
[17:23:46][C][modbus_controller:282]: Sensor type=4 start=0x1 offset=0x0 count=1 size=1
[17:23:46][C][modbus_controller:282]: Sensor type=4 start=0x1 offset=0x1 count=1 size=1
[17:23:46][C][modbus_controller:284]: ranges
[17:23:46][C][modbus_controller:287]: Range type=4 start=0x1 count=2 skip_updates=1
[17:23:47][V][modbus_controller:036]: Sending next modbus command to device 3 register 0x01 count 2
[17:23:47][V][modbus:194]: Modbus write: 03.04.00.01.00.02.21.E9 (8)
[17:23:47][V][modbus_controller:486]: Command sent 4 0x1 2
[17:23:47][V][modbus:042]: Modbus received Byte 208 (0Xd0)
[17:23:47][V][modbus:042]: Modbus received Byte 255 (0Xff)
[17:23:47][V][modbus_controller:036]: Sending next modbus command to device 3 register 0x01 count 2
[17:23:47][V][modbus:194]: Modbus write: 03.04.00.01.00.02.21.E9 (8)
[17:23:47][V][modbus_controller:486]: Command sent 4 0x1 2
[17:23:47][V][modbus:042]: Modbus received Byte 208 (0Xd0)
[17:23:47][V][modbus:042]: Modbus received Byte 255 (0Xff)
[17:23:47][V][modbus_controller:036]: Sending next modbus command to device 3 register 0x01 count 2
[17:23:47][V][modbus:194]: Modbus write: 03.04.00.01.00.02.21.E9 (8)
[17:23:47][V][modbus_controller:486]: Command sent 4 0x1 2
[17:23:47][V][modbus:042]: Modbus received Byte 208 (0Xd0)
[17:23:47][V][modbus:042]: Modbus received Byte 246 (0Xf6)
[17:23:47][V][modbus_controller:036]: Sending next modbus command to device 3 register 0x01 count 2
[17:23:47][V][modbus:194]: Modbus write: 03.04.00.01.00.02.21.E9 (8)
[17:23:47][V][modbus_controller:486]: Command sent 4 0x1 2
[17:23:47][V][modbus:042]: Modbus received Byte 208 (0Xd0)
[17:23:47][V][modbus:042]: Modbus received Byte 255 (0Xff)
[17:23:48][D][modbus_controller:032]: Modbus command to device=3 register=0x01 countdown=0 no response received - removed from send queue
[17:24:30][V][modbus_controller:158]: Updating modbus component
[17:24:30][V][modbus_controller:125]: Range : 1 Size: 2 (4) skip: 1
[17:24:37][V][modbus_controller:158]: Updating modbus component
[17:24:37][V][modbus_controller:125]: Range : 1 Size: 2 (4) skip: 1
[17:24:40][V][modbus_controller:158]: Updating modbus component
[17:24:40][V][modbus_controller:125]: Range : 1 Size: 2 (4) skip: 1
[17:25:30][V][modbus_controller:158]: Updating modbus component
[17:25:30][V][modbus_controller:125]: Range : 1 Size: 2 (4) skip: 0
[17:25:30][V][modbus_controller:036]: Sending next modbus command to device 3 register 0x01 count 2
[17:25:30][V][modbus:194]: Modbus write: 03.04.00.01.00.02.21.E9 (8)
[17:25:30][V][modbus_controller:486]: Command sent 4 0x1 2
[17:25:30][V][modbus:042]: Modbus received Byte 208 (0Xd0)
[17:25:30][V][modbus:042]: Modbus received Byte 254 (0Xfe)
[17:25:30][V][modbus_controller:036]: Sending next modbus command to device 3 register 0x01 count 2
[17:25:30][V][modbus:194]: Modbus write: 03.04.00.01.00.02.21.E9 (8)
[17:25:30][V][modbus_controller:486]: Command sent 4 0x1 2
[17:25:30][V][modbus:042]: Modbus received Byte 208 (0Xd0)
[17:25:30][V][modbus:042]: Modbus received Byte 255 (0Xff)
[17:25:30][V][modbus_controller:036]: Sending next modbus command to device 3 register 0x01 count 2
[17:25:30][V][modbus:194]: Modbus write: 03.04.00.01.00.02.21.E9 (8)
[17:25:30][V][modbus_controller:486]: Command sent 4 0x1 2
[17:25:30][V][modbus:042]: Modbus received Byte 208 (0Xd0)
[17:25:30][V][modbus:042]: Modbus received Byte 246 (0Xf6)
[17:25:31][V][modbus_controller:036]: Sending next modbus command to device 3 register 0x01 count 2
[17:25:31][V][modbus:194]: Modbus write: 03.04.00.01.00.02.21.E9 (8)
[17:25:31][V][modbus_controller:486]: Command sent 4 0x1 2
[17:25:31][V][modbus:042]: Modbus received Byte 208 (0Xd0)
[17:25:31][V][modbus:042]: Modbus received Byte 255 (0Xff)
[17:25:31][V][modbus_controller:036]: Sending next modbus command to device 3 register 0x01 count 2
[17:25:31][V][modbus:194]: Modbus write: 03.04.00.01.00.02.21.E9 (8)
[17:25:31][V][modbus_controller:486]: Command sent 4 0x1 2
[17:25:31][V][modbus:042]: Modbus received Byte 208 (0Xd0)
[17:25:31][V][modbus:042]: Modbus received Byte 246 (0Xf6)
[17:25:31][D][modbus_controller:032]: Modbus command to device=3 register=0x01 countdown=0 no response received - removed from send queue
[17:25:37][V][modbus_controller:158]: Updating modbus component
[17:25:37][V][modbus_controller:125]: Range : 1 Size: 2 (4) skip: 0
[17:25:37][V][modbus_controller:036]: Sending next modbus command to device 2 register 0x01 count 2
[17:25:37][V][modbus:194]: Modbus write: 02.04.00.01.00.02.20.38 (8)
[17:25:37][V][modbus_controller:486]: Command sent 4 0x1 2
[17:25:37][V][modbus:042]: Modbus received Byte 206 (0Xce)
[17:25:38][V][modbus_controller:036]: Sending next modbus command to device 2 register 0x01 count 2
[17:25:38][V][modbus:194]: Modbus write: 02.04.00.01.00.02.20.38 (8)
[17:25:38][V][modbus_controller:486]: Command sent 4 0x1 2
[17:25:38][V][modbus:042]: Modbus received Byte 206 (0Xce)
[17:25:38][V][modbus_controller:036]: Sending next modbus command to device 2 register 0x01 count 2
[17:25:38][V][modbus:194]: Modbus write: 02.04.00.01.00.02.20.38 (8)
[17:25:38][V][modbus_controller:486]: Command sent 4 0x1 2
[17:25:38][V][modbus:042]: Modbus received Byte 206 (0Xce)
[17:25:38][V][modbus_controller:036]: Sending next modbus command to device 2 register 0x01 count 2
[17:25:38][V][modbus:194]: Modbus write: 02.04.00.01.00.02.20.38 (8)
[17:25:38][V][modbus_controller:486]: Command sent 4 0x1 2
[17:25:38][V][modbus:042]: Modbus received Byte 206 (0Xce)
[17:25:38][V][modbus_controller:036]: Sending next modbus command to device 2 register 0x01 count 2
[17:25:38][V][modbus:194]: Modbus write: 02.04.00.01.00.02.20.38 (8)
[17:25:38][V][modbus_controller:486]: Command sent 4 0x1 2
[17:25:38][V][modbus:042]: Modbus received Byte 206 (0Xce)
[17:25:39][D][modbus_controller:032]: Modbus command to device=2 register=0x01 countdown=0 no response received - removed from send queue
[17:25:40][V][modbus_controller:158]: Updating modbus component
[17:25:40][V][modbus_controller:125]: Range : 1 Size: 2 (4) skip: 0
[17:25:40][V][modbus_controller:036]: Sending next modbus command to device 1 register 0x01 count 2
[17:25:40][V][modbus:194]: Modbus write: 01.04.00.01.00.02.20.0B (8)
[17:25:40][V][modbus_controller:486]: Command sent 4 0x1 2
[17:25:40][V][modbus:042]: Modbus received Byte 254 (0Xfe)
[17:25:41][V][modbus_controller:036]: Sending next modbus command to device 1 register 0x01 count 2
[17:25:41][V][modbus:194]: Modbus write: 01.04.00.01.00.02.20.0B (8)
[17:25:41][V][modbus_controller:486]: Command sent 4 0x1 2
[17:25:41][V][modbus:042]: Modbus received Byte 254 (0Xfe)
[17:25:41][V][modbus_controller:036]: Sending next modbus command to device 1 register 0x01 count 2
[17:25:41][V][modbus:194]: Modbus write: 01.04.00.01.00.02.20.0B (8)
[17:25:41][V][modbus_controller:486]: Command sent 4 0x1 2
[17:25:41][V][modbus:042]: Modbus received Byte 254 (0Xfe)
[17:25:41][V][modbus_controller:036]: Sending next modbus command to device 1 register 0x01 count 2
[17:25:41][V][modbus:194]: Modbus write: 01.04.00.01.00.02.20.0B (8)
[17:25:41][V][modbus_controller:486]: Command sent 4 0x1 2
[17:25:41][V][modbus:042]: Modbus received Byte 254 (0Xfe)
[17:25:41][V][modbus_controller:036]: Sending next modbus command to device 1 register 0x01 count 2
[17:25:41][V][modbus:194]: Modbus write: 01.04.00.01.00.02.20.0B (8)
[17:25:41][V][modbus_controller:486]: Command sent 4 0x1 2
[17:25:41][V][modbus:042]: Modbus received Byte 254 (0Xfe)
[17:25:42][D][modbus_controller:032]: Modbus command to device=1 register=0x01 countdown=0 no response received - removed from send queue
[17:26:30][V][modbus_controller:158]: Updating modbus component
[17:26:30][V][modbus_controller:125]: Range : 1 Size: 2 (4) skip: 1
[17:26:37][V][modbus_controller:158]: Updating modbus component
[17:26:37][V][modbus_controller:125]: Range : 1 Size: 2 (4) skip: 1
[17:26:40][V][modbus_controller:158]: Updating modbus component
[17:26:40][V][modbus_controller:125]: Range : 1 Size: 2 (4) skip: 1
[17:27:30][V][modbus_controller:158]: Updating modbus component
[17:27:30][V][modbus_controller:125]: Range : 1 Size: 2 (4) skip: 0
[17:27:30][V][modbus_controller:036]: Sending next modbus command to device 3 register 0x01 count 2
[17:27:30][V][modbus:194]: Modbus write: 03.04.00.01.00.02.21.E9 (8)
[17:27:30][V][modbus_controller:486]: Command sent 4 0x1 2
[17:27:30][V][modbus:042]: Modbus received Byte 208 (0Xd0)
[17:27:30][V][modbus:042]: Modbus received Byte 255 (0Xff)
[17:27:30][V][modbus_controller:036]: Sending next modbus command to device 3 register 0x01 count 2
[17:27:30][V][modbus:194]: Modbus write: 03.04.00.01.00.02.21.E9 (8)
[17:27:30][V][modbus_controller:486]: Command sent 4 0x1 2
[17:27:30][V][modbus:042]: Modbus received Byte 208 (0Xd0)
[17:27:30][V][modbus:042]: Modbus received Byte 255 (0Xff)
[17:27:30][V][modbus_controller:036]: Sending next modbus command to device 3 register 0x01 count 2
[17:27:30][V][modbus:194]: Modbus write: 03.04.00.01.00.02.21.E9 (8)
[17:27:30][V][modbus_controller:486]: Command sent 4 0x1 2
[17:27:30][V][modbus:042]: Modbus received Byte 208 (0Xd0)
[17:27:30][V][modbus:042]: Modbus received Byte 255 (0Xff)
[17:27:31][V][modbus_controller:036]: Sending next modbus command to device 3 register 0x01 count 2
[17:27:31][V][modbus:194]: Modbus write: 03.04.00.01.00.02.21.E9 (8)
[17:27:31][V][modbus_controller:486]: Command sent 4 0x1 2
[17:27:31][V][modbus:042]: Modbus received Byte 208 (0Xd0)
[17:27:31][V][modbus:042]: Modbus received Byte 246 (0Xf6)
[17:27:31][V][modbus_controller:036]: Sending next modbus command to device 3 register 0x01 count 2
[17:27:31][V][modbus:194]: Modbus write: 03.04.00.01.00.02.21.E9 (8)
[17:27:31][V][modbus_controller:486]: Command sent 4 0x1 2
[17:27:31][V][modbus:042]: Modbus received Byte 208 (0Xd0)
[17:27:31][V][modbus:042]: Modbus received Byte 255 (0Xff)
Any ideas anyone?