To contribute to this page, edit the following file

TuYa TS0601_thermostat #

Model TS0601_thermostat
Vendor TuYa
Description Radiator valve with thermostat
Exposes lock (state), switch (state), battery, battery_low, position, climate (current_heating_setpoint, local_temperature, system_mode, running_state, away_mode, preset), linkquality
Picture TuYa TS0601_thermostat
White-label Moes HY369RT, SHOJZJ 378RT

Notes #

Pairing #

While pairing, keep the valve close to the coordinator.

  1. Turn the display on: Short press home (:house:).
  2. Enter settings: Long press home (:house:) for 3sec.
  3. Select WiFi settings: Press the plus button (:heavy_plus_sign:) button 4 times to see the digital 5 on the right hand side and the blinking WiFi logo.
  4. Enter WiFi settings: Press home (:house:) once again. Now only WiFi logo is showing without blinking.
  5. Enable pairing mode: Long press home (:house:). WiFi logo is now blinking.
  6. Keep display on: Touch home (:house:) every few seconds.

Local temperature #

If you’d like to force device to send local_temperature you can use this mqtt command:

YOUR_CURRENT_CALIBRATION_VALUE can be 0, but if you calibrated temperature for this device send current value. After this command thermostat responds with two messages. One for calibration change confirmation, and other with current local_temperature.

Controlling device specific features #

OTA updates #

This device supports OTA updates, for more information see OTA updates.

Exposes #

Lock #

The current state of this lock is in the published state under the child_lock property (value is LOCK or UNLOCK). To control this lock publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"child_lock": "LOCK"} or {"child_lock": "UNLOCK"}. To read the current state of this lock publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"child_lock": ""}.

Switch #

The current state of this switch is in the published state under the window_detection property (value is ON or OFF). To control this switch publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"window_detection": "ON"}, {"window_detection": "OFF"} or {"window_detection": "TOGGLE"}. To read the current state of this switch publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"window_detection": ""}.

Battery (numeric) #

Remaining battery in %. 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 %.

Battery_low (binary) #

Indicates if the battery of this device is almost empty. Value can be found in the published state on the battery_low property. It’s not possible to read (/get) or write (/set) this value. If value equals true battery_low is ON, if false OFF.

Switch #

The current state of this switch is in the published state under the valve_detection property (value is ON or OFF). To control this switch publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"valve_detection": "ON"}, {"valve_detection": "OFF"} or {"valve_detection": "TOGGLE"}. To read the current state of this switch publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"valve_detection": ""}.

Position (numeric) #

Position. Value can be found in the published state on the position property. It’s not possible to read (/get) or write (/set) this value. The unit of this value is %.

Climate #

This climate device supports the following features: current_heating_setpoint, local_temperature, system_mode, running_state, away_mode, preset.

Linkquality (numeric) #

Link quality (signal strength). Value can be found in the published state on the linkquality property. It’s not possible to read (/get) or write (/set) this value. The minimal value is 0 and the maximum value is 255. The unit of this value is lqi.

Manual Home Assistant configuration #

Although Home Assistant integration through MQTT discovery is preferred, manual integration is possible with the following configuration:

lock:
  - platform: "mqtt"
    state_topic: true
    availability_topic: "zigbee2mqtt/bridge/state"
    command_topic: "zigbee2mqtt/<FRIENDLY_NAME>/set"
    value_template: "{{ value_json.child_lock }}"
    payload_lock: "LOCK"
    payload_unlock: "UNLOCK"
    state_locked: "LOCKED"
    state_unlocked: "UNLOCKED"
    command_topic_postfix: "child_lock"

switch:
  - platform: "mqtt"
    state_topic: true
    availability_topic: "zigbee2mqtt/bridge/state"
    payload_off: "OFF"
    payload_on: "ON"
    value_template: "{{ value_json.window_detection }}"
    command_topic: "zigbee2mqtt/<FRIENDLY_NAME>/set"
    command_topic_postfix: "window_detection"
    state_off: "OFF"
    state_on: "ON"
    icon: "mdi:window-open-variant"

sensor:
  - platform: "mqtt"
    state_topic: "zigbee2mqtt/<FRIENDLY_NAME>"
    availability_topic: "zigbee2mqtt/bridge/state"
    unit_of_measurement: "%"
    value_template: "{{ value_json.battery }}"
    device_class: "battery"

binary_sensor:
  - platform: "mqtt"
    state_topic: "zigbee2mqtt/<FRIENDLY_NAME>"
    availability_topic: "zigbee2mqtt/bridge/state"
    value_template: "{{ value_json.battery_low }}"
    payload_on: true
    payload_off: false
    device_class: "battery"

switch:
  - platform: "mqtt"
    state_topic: true
    availability_topic: "zigbee2mqtt/bridge/state"
    payload_off: "OFF"
    payload_on: "ON"
    value_template: "{{ value_json.valve_detection }}"
    command_topic: "zigbee2mqtt/<FRIENDLY_NAME>/set"
    command_topic_postfix: "valve_detection"
    state_off: "OFF"
    state_on: "ON"

sensor:
  - platform: "mqtt"
    state_topic: "zigbee2mqtt/<FRIENDLY_NAME>"
    availability_topic: "zigbee2mqtt/bridge/state"
    unit_of_measurement: "%"
    value_template: "{{ value_json.position }}"
    icon: "mdi:valve"

climate:
  - platform: "mqtt"
    availability_topic: "zigbee2mqtt/bridge/state"
    temperature_unit: "C"
    temp_step: 0.5
    min_temp: "5"
    max_temp: "35"
    current_temperature_topic: true
    current_temperature_template: "{{ value_json.local_temperature }}"
    mode_state_topic: true
    mode_state_template: "{{ value_json.system_mode }}"
    modes: 
      - "heat"
      - "auto"
      - "off"
    mode_command_topic: true
    action_topic: true
    action_template: "{% set values = {'idle':'off','heat':'heating','cool':'cooling','fan only':'fan'} %}{{ values[value_json.running_state] }}"
    temperature_command_topic: "current_heating_setpoint"
    temperature_state_template: "{{ value_json.current_heating_setpoint }}"
    temperature_state_topic: true
    hold_modes: 
      - "schedule"
      - "manual"
      - "boost"
      - "complex"
      - "comfort"
      - "eco"
    hold_command_topic: true
    hold_state_template: "{{ value_json.preset }}"
    hold_state_topic: true
    away_mode_command_topic: true
    away_mode_state_topic: true
    away_mode_state_template: "{{ value_json.away_mode }}"

sensor:
  - platform: "mqtt"
    state_topic: "zigbee2mqtt/<FRIENDLY_NAME>"
    availability_topic: "zigbee2mqtt/bridge/state"
    unit_of_measurement: "lqi"
    value_template: "{{ value_json.linkquality }}"
    icon: "mdi:signal"

sensor:
  - platform: "mqtt"
    state_topic: "zigbee2mqtt/<FRIENDLY_NAME>"
    availability_topic: "zigbee2mqtt/bridge/state"
    icon: "mdi:update"
    value_template: "{{ value_json['update']['state'] }}"

binary_sensor:
  - platform: "mqtt"
    state_topic: "zigbee2mqtt/<FRIENDLY_NAME>"
    availability_topic: "zigbee2mqtt/bridge/state"
    payload_on: true
    payload_off: false
    value_template: "{{ value_json.update_available}}"