Aqara TH-S04D
| Model | TH-S04D |
| Vendor | Aqara |
| Description | Climate Sensor W100 |
| Exposes | thermostat_mode, climate (system_mode, fan_mode, occupied_heating_setpoint, local_temperature), PMTSD_from_W100_Data, battery, temperature, humidity, sensor, external_temperature, external_humidity, auto_hide_middle_line, high_temperature, low_temperature, high_humidity, low_humidity, sampling, period, temp_report_mode, temp_period, temp_threshold, humi_report_mode, humi_period, humi_threshold, identify, action |
| Picture | ![]() |
Notes
Pairing
The device will ship with Thread firmware and in order to pair you will first need to swap it to a Zigbee Firmware. To do this you must download the Aqara Home app and sign up. The device should appear in the app (you may need to ignore attempts to set it up via Thread). The device page will state that the current protocol is Thread but ignore the button at the bottom and instead click the link to switch to Zigbee Protocol.
Once updated the device should be in pairing mode and can be added. If it fails to add hold the reset button on the back until the signal strength bar starts flashing and the device will re-enter pairing mode.
OTA updates
This device supports OTA updates, for more information see OTA updates.
Options
How to use device type specific configuration
min_target_temp: Minimum target temperature for the thermostat (default: 5°C). The value must be a number with a minimum value of-20and with a maximum value of60max_target_temp: Maximum target temperature for the thermostat (default: 30°C). The value must be a number with a minimum value of-20and with a maximum value of60temperature_calibration: Calibrates the temperature value (absolute offset), takes into effect on next report of device. The value must be a number.temperature_precision: Number of digits after decimal point for temperature, takes into effect on next report of device. This option can only decrease the precision, not increase it. The value must be a number with a minimum value of0and with a maximum value of3humidity_calibration: Calibrates the humidity value (absolute offset), takes into effect on next report of device. The value must be a number.humidity_precision: Number of digits after decimal point for humidity, takes into effect on next report of device. This option can only decrease the precision, not increase it. The value must be a number with a minimum value of0and with a maximum value of3identify_timeout: Sets the duration of the identification procedure in seconds (i.e., how long the device would flash).The value ranges from 1 to 30 seconds (default: 3). The value must be a number with a minimum value of1and with a maximum value of30
Exposes
Thermostat mode (binary)
ON: Enables thermostat mode, buttons send encrypted payloads, and the middle line is displayed. OFF: Disables thermostat mode, buttons send actions, and the middle line is hidden.. Value can be found in the published state on the thermostat_mode property. To read (/get) the value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"thermostat_mode": ""}. To write (/set) a value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"thermostat_mode": NEW_VALUE}. If value equals ON thermostat mode is ON, if OFF OFF.
Climate
This climate device supports the following features: system_mode, fan_mode, occupied_heating_setpoint, local_temperature.
occupied_heating_setpoint: Temperature setpoint. To control publish a message to topiczigbee2mqtt/FRIENDLY_NAME/setwith payload{"occupied_heating_setpoint": VALUE}whereVALUEis the °C between5and30. To read send a message tozigbee2mqtt/FRIENDLY_NAME/getwith payload{"occupied_heating_setpoint": ""}.local_temperature: Current temperature measured on the device (in °C). To read send a message tozigbee2mqtt/FRIENDLY_NAME/getwith payload{"local_temperature": ""}.system_mode: Mode of this device. To control publish a message to topiczigbee2mqtt/FRIENDLY_NAME/setwith payload{"system_mode": VALUE}whereVALUEis one of:off,heat,cool,auto. To read send a message tozigbee2mqtt/FRIENDLY_NAME/getwith payload{"system_mode": ""}.
PMTSD from W100 Data (text)
Latest PMTSD values sent by the W100 when manually changed, formatted as "YYYY-MM-DD HH:mm:ss_Px_Mx_Tx_Sx_Dx". Value can be found in the published state on the PMTSD_from_W100_Data property. It's not possible to read (/get) or write (/set) this value.
Battery (numeric)
Remaining battery in %, can take up to 24 hours before reported. Value can be found in the published state on the battery property. It's not possible to read (/get) or write (/set) this value. The minimal value is 0 and the maximum value is 100. The unit of this value is %.
Temperature (numeric)
Measured temperature value. Value can be found in the published state on the temperature property. To read (/get) the value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"temperature": ""}. It's not possible to write (/set) this value. The unit of this value is °C.
Humidity (numeric)
Measured relative humidity. Value can be found in the published state on the humidity property. To read (/get) the value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"humidity": ""}. It's not possible to write (/set) this value. The unit of this value is %.
Sensor (enum)
Select mode to display sensor: internal or both with external. Value can be found in the published state on the sensor property. To read (/get) the value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"sensor": ""}. To write (/set) a value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"sensor": NEW_VALUE}. The possible values are: internal, external.
External temperature (numeric)
Value for external temperature sensor. Value can be found in the published state on the external_temperature property. It's not possible to read (/get) this value. To write (/set) a value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"external_temperature": NEW_VALUE}. The minimal value is -100 and the maximum value is 100. The unit of this value is °C.
External humidity (numeric)
Value for external humidity sensor. Value can be found in the published state on the external_humidity property. It's not possible to read (/get) this value. To write (/set) a value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"external_humidity": NEW_VALUE}. The minimal value is 0 and the maximum value is 100. The unit of this value is %.
Auto hide middle line (binary)
Applies only when thermostat mode is enabled. True: Hides the middle line after 30 seconds of inactivity. False: Always displays the middle line.. Value can be found in the published state on the auto_hide_middle_line property. To read (/get) the value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"auto_hide_middle_line": ""}. To write (/set) a value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"auto_hide_middle_line": NEW_VALUE}. If value equals true auto hide middle line is ON, if false OFF.
High temperature (numeric)
High temperature alert. Value can be found in the published state on the high_temperature property. To read (/get) the value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"high_temperature": ""}. To write (/set) a value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"high_temperature": NEW_VALUE}. The minimal value is 26 and the maximum value is 60. The unit of this value is °C.
Low temperature (numeric)
Low temperature alert. Value can be found in the published state on the low_temperature property. To read (/get) the value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"low_temperature": ""}. To write (/set) a value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"low_temperature": NEW_VALUE}. The minimal value is -20 and the maximum value is 20. The unit of this value is °C.
High humidity (numeric)
High humidity alert. Value can be found in the published state on the high_humidity property. To read (/get) the value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"high_humidity": ""}. To write (/set) a value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"high_humidity": NEW_VALUE}. The minimal value is 65 and the maximum value is 100. The unit of this value is %.
Low humidity (numeric)
Low humidity alert. Value can be found in the published state on the low_humidity property. To read (/get) the value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"low_humidity": ""}. To write (/set) a value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"low_humidity": NEW_VALUE}. The minimal value is 0 and the maximum value is 30. The unit of this value is %.
Sampling (enum)
Temperature and Humidity sampling settings. Value can be found in the published state on the sampling property. To read (/get) the value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"sampling": ""}. To write (/set) a value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"sampling": NEW_VALUE}. The possible values are: low, standard, high, custom.
Period (numeric)
Sampling period. Value can be found in the published state on the period property. To read (/get) the value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"period": ""}. To write (/set) a value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"period": NEW_VALUE}. The minimal value is 0.5 and the maximum value is 600. The unit of this value is sec.
Temp report mode (enum)
Temperature reporting mode. Value can be found in the published state on the temp_report_mode property. To read (/get) the value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"temp_report_mode": ""}. To write (/set) a value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"temp_report_mode": NEW_VALUE}. The possible values are: no, threshold, period, threshold_period.
Temp period (numeric)
Temperature reporting period. Value can be found in the published state on the temp_period property. To read (/get) the value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"temp_period": ""}. To write (/set) a value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"temp_period": NEW_VALUE}. The minimal value is 1 and the maximum value is 600. The unit of this value is sec.
Temp threshold (numeric)
Temperature reporting threshold. Value can be found in the published state on the temp_threshold property. To read (/get) the value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"temp_threshold": ""}. To write (/set) a value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"temp_threshold": NEW_VALUE}. The minimal value is 0.2 and the maximum value is 3. The unit of this value is °C.
Humi report mode (enum)
Humidity reporting mode. Value can be found in the published state on the humi_report_mode property. To read (/get) the value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"humi_report_mode": ""}. To write (/set) a value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"humi_report_mode": NEW_VALUE}. The possible values are: no, threshold, period, threshold_period.
Humi period (numeric)
Humidity reporting period. Value can be found in the published state on the humi_period property. To read (/get) the value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"humi_period": ""}. To write (/set) a value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"humi_period": NEW_VALUE}. The minimal value is 1 and the maximum value is 600. The unit of this value is sec.
Humi threshold (numeric)
Humidity reporting threshold. Value can be found in the published state on the humi_threshold property. To read (/get) the value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"humi_threshold": ""}. To write (/set) a value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"humi_threshold": NEW_VALUE}. The minimal value is 2 and the maximum value is 10. The unit of this value is %.
Identify (enum)
Initiate device identification. Value will not be published in the state. It's not possible to read (/get) this value. To write (/set) a value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"identify": NEW_VALUE}. The possible values are: identify.
Action (enum)
Triggered action (e.g. a button click). Value can be found in the published state on the action property. It's not possible to read (/get) or write (/set) this value. The possible values are: W100_PMTSD_request, hold_plus, hold_center, hold_minus, single_plus, single_center, single_minus, double_plus, double_center, double_minus, release_plus, release_center, release_minus.

