To contribute to this page, edit the following file

Eurotronic SPZB0001 #

Model SPZB0001
Vendor Eurotronic
Description Spirit Zigbee wireless heater thermostat
Exposes battery, climate (occupied_heating_setpoint, local_temperature, system_mode, running_state, local_temperature_calibration, pi_heating_demand), eurotronic_trv_mode, eurotronic_valve_position, linkquality
Picture Eurotronic SPZB0001

Notes #

Device type specific configuration #

How to use device type specific configuration

Pairing #

If you are having trouble pairing, reset the device.

Recommendation #

This device sends multiple messages in short time period with the same payload. It’s worth setting debounce option to throttle them without losing unique action payloads.

E.g. (devices.yaml)

'0xabc457fffe679xyz':
    friendly_name: my_device
    debounce: 0.5

Controlling #

Current heating setpoint

{
    "current_heating_setpoint": 21.5
}

Current heating setpoint is also modified when occupied or unoccupied heating setpoint is set.

System mode

The system mode will be either off, auto, or heat. When set to heat the boost host flags will be set, when using off the window_open host flag will be set (and off will be displayed on the display).

Eurotronic host flags

The eurotronic_host_flags property contains an object with a true/false field for each host option.

{
  "eurotronic_host_flags": {
    "mirror_display": false,
    "boost": false,
    "window_open": false,
    "child_protection": true
  }
}

You can toggle these flags by publishing a message to the set MQTT topic containing eurotronic_host_flags. e.g. enabling the display mirroring:

{"eurotronic_host_flags": {"mirror_display": true}}

Note that true or false do not have quotes aroud them!

Eurotronic system mode

This is deprecated in favor of eurotronic_host_flags, but will still work for now.

This is a bitmap encoded field to set several device specific features. Please remind it is not possible to set single bits, always the full bitmap is written. Bit 0 doesn’t seem to be writeable, it is always reported as set, so expect your written value + 1 to be reported.

Bit Position
0 unknown (default 1)
1 Mirror display
2 Boost
3 unknown
4 disable window open
5 set window open (is reported as disable window open)
6 unknown
7 Child protection

Examples for eurotronic_system_mode:

Mirror display, reported as 3

{
    "eurotronic_system_mode": 2
}

signal external window open, current_heating_setpoint will report “5”, device display shows “OFF”

{
    "eurotronic_system_mode": 32
}

signal external window close, will restore last current_heating_setpoint value

{
    "eurotronic_system_mode": 16
}

Mirror display and set child protection.

{
    "eurotronic_system_mode": 66
}

Eurotronic error status

{
    "eurotronic_error_status": 0
}

This field is a readonly bitmap

Bit Position
0 reserved
1 reserved
2 reserved
3 Valve adaption failed (E1)
4 Valve movement too slow (E2)
5 Valve not moving/blocked (E3)
6 reserved
7 reserved

OTA updates #

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

Exposes #

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 %.

Climate #

This climate device supports the following features: occupied_heating_setpoint, local_temperature, system_mode, running_state, local_temperature_calibration, pi_heating_demand.

Eurotronic_trv_mode (enum) #

Select between direct control of the valve via the eurotronic_valve_position or automatic control of the valve based on the current_heating_setpoint. For manual control set the value to 1, for automatic control set the value to 2 (the default). When switched to manual mode the display shows a value from 0 (valve closed) to 100 (valve fully open) and the buttons on the device are disabled.. Value can be found in the published state on the eurotronic_trv_mode property. To read (/get) the value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"eurotronic_trv_mode": ""}. To write (/set) a value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"eurotronic_trv_mode": NEW_VALUE}. The possible values are: 1, 2.

Eurotronic_valve_position (numeric) #

Directly control the radiator valve when eurotronic_trv_mode is set to 1. The values range from 0 (valve closed) to 255 (valve fully open). Value can be found in the published state on the eurotronic_valve_position property. To read (/get) the value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/get with payload {"eurotronic_valve_position": ""}. To write (/set) a value publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"eurotronic_valve_position": NEW_VALUE}. The minimal value is 0 and the maximum value is 255.

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:

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

climate:
  - platform: "mqtt"
    availability_topic: "zigbee2mqtt/bridge/state"
    temperature_unit: "C"
    temp_step: 0.5
    min_temp: "5"
    max_temp: "30"
    current_temperature_topic: true
    current_temperature_template: "{{ value_json.local_temperature }}"
    mode_state_topic: true
    mode_state_template: "{{ value_json.system_mode }}"
    modes: 
      - "off"
      - "auto"
      - "heat"
    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: "occupied_heating_setpoint"
    temperature_state_template: "{{ value_json.occupied_heating_setpoint }}"
    temperature_state_topic: true

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

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

sensor:
  - platform: "mqtt"
    state_topic: "zigbee2mqtt/<FRIENDLY_NAME>"
    availability_topic: "zigbee2mqtt/bridge/state"
    value_template: "{{ value_json.linkquality }}"
    unit_of_measurement: "lqi"
    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}}"