SEN0604 RS485 4-in-1 Soil Sensor Problems
antonis.kostakis 2026-07-02 22:32:43 630 Views1 Replies Hello,
I purchased the SEN0604 RS485 4-in-1 Soil Sensor (SKU: SEN0604) about 3 days ago.
Unfortunately, the sensor is not working correctly. Here are the issues:
- When the sensor is clean and in open air, Raw Soil Moisture shows around 435 (43.5%) instead of near 0-15%.
- Soil Temperature behaves incorrectly (rises when watering instead of dropping).
- pH shows unrealistic values (e.g. 0.4).
My code is this
================== SENSORS ==================
# SEN0604 - Raw Values debugging
- platform: modbus_controller
modbus_controller_id: soil_sensor
name: "Raw Soil Temperature"
address: 0x0000
register_type: holding
value_type: S_WORD
accuracy_decimals: 1
- platform: modbus_controller
modbus_controller_id: soil_sensor
name: "Soil Temperature"
address: 0x0000
register_type: holding
value_type: S_WORD
accuracy_decimals: 1
unit_of_measurement: "°C"
filters:
- multiply: 0.1
- platform: modbus_controller
modbus_controller_id: soil_sensor
name: "Raw Soil Moisture"
address: 0x0001
register_type: holding
value_type: U_WORD
accuracy_decimals: 1
- platform: modbus_controller
modbus_controller_id: soil_sensor
name: "Soil Moisture"
address: 0x0001
register_type: holding
value_type: U_WORD
accuracy_decimals: 1
unit_of_measurement: "%"
filters:
- multiply: 0.1
- platform: modbus_controller
modbus_controller_id: soil_sensor
name: "Soil EC"
address: 0x0002
register_type: holding
value_type: U_WORD
unit_of_measurement: "µS/cm"
- platform: modbus_controller
modbus_controller_id: soil_sensor
name: "Soil pH"
address: 0x0003
register_type: holding
value_type: U_WORD
accuracy_decimals: 1
unit_of_measurement: "pH"
filters:
- multiply: 0.1
The sensor was properly cleaned and tested in water and air.
Any ideas?
The first two registers look swapped in your ESPHome config. For SEN0604, the DFRobot wiki lists register 0x0000 as moisture and 0x0001 as temperature. So your “Raw Soil Moisture = 435” is probably the temperature register being displayed as moisture, and your “temperature rises when watering” is likely moisture being displayed as temperature.
Try this mapping first:
# Moisture: 0x0000, value x0.1
# Temperature: 0x0001, signed value x0.1
# EC: 0x0002
# pH: 0x0003, value x0.1
The pH value is also not meaningful in open air, but if register 0x0003 still reads raw 4 / pH 0.4 after fixing the mapping, I would test once with the official Modbus frame or Arduino example and compare the raw 4-register response. Normal pH raw values should be around 30-90 for pH 3.0-9.0.
Wiki reference: https://wiki.dfrobot.com/sen0604/docs/20297
Yx 

