Skip to main content
Firmware version

All information on this page applies to firmware R010 and later.

Emma thermostat

This page describes the Zigbee communication interface of the Plugwise Emma thermostat.

It is intended for developers integrating Emma with Zigbee-based coordinators and software platforms such as Home Assistant (ZHA) or Zigbee2MQTT.

Emma communicates using the Zigbee protocol and exposes standard Zigbee clusters and attributes, as described in this document.

Overview

Emma is a thermostat that can operate in different hardware and power configurations. Depending on the backplate, boiler connection, and available power, Emma may join the Zigbee network as either:

  • a Router
  • a Sleepy End Device (SED)

Emma exposes standard Zigbee Home Automation thermostat functionality as well as a small set of Plugwise manufacturer-specific attributes for advanced boiler control and diagnostics.


1. Device Identification

FieldValue
Manufacturer NamePlugwise
Model Identifier170-01
Zigbee Profile ID0x0104 (Home Automation)
Zigbee Device Type0x0301 — HA Thermostat (code 769)
Endpoint1
Manufacturer Code0x1172
Product Code"OpenTherm" / "OnOff" / "OpenTherm/OnOff" / "Wireless" — see §3
Product URLhttps://www.plugwise.com/emma-wired-pro

Product variants and network role

ProductPower sourceNetwork role
Emma Wired ProOpenTherm Smart PowerRouter
Emma Wired ProOpenThermSED
Emma Wired ProOn/Off boiler: BatteriesSED
Emma WirelessUSB-C 5 VRouter
Emma WirelessAA batteriesSED
Emma Essential-Can be upgraded to Emma Wired Pro to enable communication via zigbee.

Please note that role might be automatically switched from Router to SED when changing to a power source where only SED role is supported. Switching from SED to Router is only possible by removing the product from the network and joining it again to the hub.


2. Cluster Summary

Emma exposes the following Zigbee clusters on endpoint 1.

ClusterCluster IDSide
Basic0x0000Server
Power Configuration0x0001Server
Identify0x0003Client + Server
Over the Air Bootloading0x0019Client
Poll Control0x0020Server
Thermostat0x0201Server
Thermostat UI Configuration0x0204Server
Temperature Measurement0x0402Server
Relative Humidity Measurement0x0405Server
Diagnostics0x0B05Server

Unless stated otherwise, the attributes described on this page are standard Zigbee attributes and do not require a manufacturer code.


3. Basic Cluster

Cluster ID: 0x0000
Side: Server

The Basic cluster identifies the device and reports runtime metadata such as power source, product code, and software build ID.

Supported attributes

AttributeNameTypeAccessDefaultReportable
0x0000ZCL VersionINT8UR1No
0x0001Application VersionINT8URNo
0x0003Hardware VersionINT8UR1No
0x0004Manufacturer NameCHAR_STRINGR"Plugwise"No
0x0005Model IdentifierCHAR_STRINGR"170-01"No
0x0006Date CodeCHAR_STRINGRNo
0x0007Power SourceENUM8R0x00Yes
0x000AProduct CodeOCTET_STRINGRYes
0x000BProduct URLCHAR_STRINGRPlugwise product URLNo
0x0012Device EnabledBOOLEANR/W0x01No
0x4000SW Build IDCHAR_STRINGRNo
0xFFFDCluster RevisionINT16UR3No

Product code

The Product Code attribute (0x000A) reflects the detected hardware and boiler mode. It encodes both the backplate type and the active boiler protocol as a short OCTET_STRING code:

Product Code valueCondition
"OpenTherm"Wired backplate, OpenTherm boiler detected
"OnOff"Wired backplate, OnOff boiler
"OpenTherm/OnOff"Wired backplate, protocol not yet determined (boot)
"Wireless"Wireless backplate

This value is refreshed whenever Emma re-evaluates the boiler connection.

Product URL

The Product URL attribute (0x000B) returns:

https://www.plugwise.com/emma-wired-pro

Power source

The Power Source attribute (0x0007) reflects the currently active runtime power mode.

ValueMeaningTypical situation
0x01MainsWireless backplate powered via USB-C
0x03BatteryWireless/Wired backplate powered by AA batteries
0x04DC sourceWired backplate with OpenTherm heat source

4. Power Configuration Cluster

Cluster ID: 0x0001 Side: Server

This cluster is relevant primarily for battery-powered variants. On externally powered variants, battery-related attributes may be present but are not meaningful.

Supported standard attributes

Attribute IDNameTypeAccessDefaultReportableUnit
0x0021Battery Percentage RemainingINT8UR0x00Yes (change: 2 units = 1 %)0.5 % (200 = 100 %)
0xFFFDCluster RevisionINT16UR2No

Manufacturer-specific Power Configuration Attributes (mfgCode 0x1172)

These attributes require manufacturer code 0x1172.

Attribute IDNameTypeAccessDefaultReportableNotes
0x007FBattery TypeENUM8R0x00Yes0x00 = Alkaline (non-rechargeable); 0x01 = NiMH (rechargeable)

5. Identify Cluster

Cluster ID: 0x0003
Side: Client + Server

Emma responds to an Identify command by toggling its front-light for ~8 seconds.

Server attributes:

Attribute IDNameTypeAccessDefault
0x0000Identify TimeINT16UR/W0
0xFFFDCluster RevisionINT16UR2

6. OTA Bootloading cluster

Cluster ID: 0x0019
Side: Client

Emma acts as OTA client. The OTA server is the coordinator or a dedicated server in the network. Standard ZCL OTA command flow applies.

Attribute IDNameTypeAccessDefault
0x0000OTA Upgrade Server IDIEEE_ADDRESSR0xFFFFFFFFFFFFFFFF
0x0001Offset (address) into fileINT32UR0xFFFFFFFF
0x0006OTA Upgrade StatusENUM8R0x00
0x0009Minimum Block Request PeriodINT16UR (fixed)250 ms
0xFFFDCluster RevisionINT16UR2

Notes

  • Minimum Block Request Period is fixed at 250 ms and cannot be changed by the OTA server.
  • OTA updates with Adam HA is supported with every firmware version.
  • OTA via other hubs such as Home Assistant is supported from R0010. Serve the firmware image through your coordinator's OTA server using the standard ZCL OTA Upgrade command flow. Emma will query the server, download, and apply the update automatically.

7. Poll Control Cluster

Cluster ID: 0x0020
Side: Server
Availability: SED only

This cluster is only active when Emma is operating as a Sleepy End Device.

Integrations that support SED operation should bind to this cluster and handle CheckIn messages correctly. Attribute writes and commands must be issued within the fast-poll window.

Attribute IDNameTypeAccessDefaultNotes
0x0000Check-in IntervalINT32UR/W43200Quarter-seconds (~3 hours)
0x0001Long Poll IntervalINT32UR/W20Quarter-seconds (5 s) — Zigbee spec default
0x0002Short Poll IntervalINT16UR/W16Default 16 QS (4 s); firmware enforces 4 QS (1 s) minimum for OpenTherm boilers
0x0003Fast Poll TimeoutINT16UR/W96Quarter-seconds (24 s)
0xFFFDCluster RevisionINT16UR3

8. Thermostat Cluster

Cluster ID: 0x0201
Side: Server

This is the primary control cluster for Emma.

Emma supports:

  • heating mode
  • cooling mode
  • off mode
  • auto mode (heat/cool)

All temperature values in this cluster use 0.01 °C units unless stated otherwise.

Example:

2000 = 20.00 °C

Attributes

Attribute IDNameTypeAccessDefaultReportable
0x0000Local TemperatureINT16SRYes (change: 10 = 0.10 °C; max 870 s)
0x0001Outdoor TemperatureINT16SR0Yes (change: 10 = 0.10 °C; max 870 s)
0x0003Abs Min Heat Setpoint LimitINT16SR-2000 (-20 °C)No
0x0004Abs Max Heat Setpoint LimitINT16SR9000 (90 °C)No
0x0005Abs Min Cool Setpoint LimitINT16SR-2000 (-20 °C)No
0x0006Abs Max Cool Setpoint LimitINT16SR9000 (90 °C)No
0x0007PI Cooling DemandINT8URYes (change: 1; max 870 s)
0x0008PI Heating DemandINT8URYes (change: 1; max 870 s)
0x0010Local Temperature CalibrationINT8SR/W0Yes (change: 0; max 870 s)
0x0011Occupied Cooling SetpointINT16SR/W2600 (26 °C)Yes (change: 50 = 0.50 °C; max 870 s)
0x0012Occupied Heating SetpointINT16SR/W2000 (20 °C)Yes (change: 50 = 0.50 °C; max 870 s)
0x0015Min Heat Setpoint LimitINT16SR/W500 (5 °C)Yes
0x0016Max Heat Setpoint LimitINT16SR/W3000 (30 °C)Yes
0x0017Min Cool Setpoint LimitINT16SR/W0 (0 °C)Yes
0x0018Max Cool Setpoint LimitINT16SR/W3000 (30 °C)Yes
0x0019Min Setpoint Dead BandINT8SR/W20 (2.0 °C)Yes (change: 0; max 870 s)
0x001CSystem ModeENUM8R/W0x04 (Heat)Yes (change: 0; max 870 s)
0x0029HVAC Relay StateBITMAP16RYes (change: 0; max 870 s)
0xFFFDCluster RevisionINT16UR3No

System Mode (0x001C):

ValueModeActive setpoint(s)
0x00Off
0x01Auto (Heat + Cool)Both — heating and cooling setpoints with deadband
0x03CoolOccupied Cooling Setpoint (0x0011)
0x04HeatOccupied Heating Setpoint (0x0012)

PI Heating Demand

The interpretation of PI Heating Demand (0x0008) depends on the boiler type.

OpenTherm

For OpenTherm systems, this attribute reports the intended boiler water temperature in °C, not a percentage.

Example:

70 = 70 °C target boiler water temperature

OnOff

For OnOff systems:

  • 100 means boiler on
  • 0 means boiler off

HVAC Relay State

Emma uses HVAC Relay State (0x0029) to expose the current operating state. Only the following values are used:

ValueMeaning
0x0000Idle — boiler not active
0x0001Heating active (bit 0 set)
0x0002Cooling active (bit 1 set)

Manufacturer-specific Thermostat Attributes

Emma exposes additional Plugwise thermostat attributes in cluster 0x0201. These attributes require manufacturer code 0x1172.

Attribute IDNameTypeAccessDefaultNotes
0xF000External Heat DemandINT16UR/W0Hundredths of °C for OT; any non-zero = relay ON for OnOff — see §14. Requires Unlocked External Control.
0xF001External Heat Demand TimeoutINT16UR/W900Watchdog timeout in seconds; range 300–3600 — see §14. Requires Unlocked External Control.
0xF002Boiler Water TemperatureINT16SR0Current boiler supply water temperature in hundredths of °C; 0 = not available
0xF003DHW TemperatureINT16SR0Domestic hot water temperature in hundredths of °C; 0 = not available
0xF004Return Water TemperatureINT16SR0Boiler return water temperature in hundredths of °C; 0 = not available
0xF005Application Specific Fault CodeBITMAP8R0x00OpenTherm fault flag byte (ID 5 high byte): bit 0 = Service request, bit 1 = Lockout reset, bit 2 = Low water pressure, bit 3 = Gas/flame fault, bit 4 = Air pressure fault, bit 5 = Water over-temperature
0xF006OEM Fault CodeINT8UR0x00OpenTherm OEM-specific fault code
0xF007Max DHW SetpointINT16SR/W0Maximum domestic hot water setpoint in hundredths of °C as reported by the boiler; 0 = not available. Writing requires Unlocked External Control.
0xF008Max Boiler SetpointINT16SR/W0Maximum central heating water setpoint in hundredths of °C as reported by the boiler; 0 = not available. Writing requires Unlocked External Control.

Temperature attributes (0xF0020xF004, 0xF0070xF008) are reported when the value changes by ≥ 0.50 °C (50 hundredths) from the last reported value. A value of 0 means the boiler has not yet provided that reading over OpenTherm. Values are signed to correctly represent sub-zero readings.

Fault attributes (0xF0050xF006) are reported on every change. Both are initialised and reported once on first OpenTherm communication, then only on change.


9. Thermostat UI Configuration cluster

Cluster ID: 0x0204
Side: Server

Emma supports keypad lockout through this cluster.

Other attributes defined by the standard Thermostat UI Configuration cluster may appear in descriptors but are not acted on by the firmware.

Attribute IDNameTypeAccessDefaultReportable
0x0001Keypad LockoutENUM8R/W0x00Yes
0xFFFDCluster RevisionINT16UR1No

Keypad Lockout values:

ValueMeaning
0x00No lockout
0x01Partial lockout: Normal operation allowed, menu blocked. Setpoint change via slider still allowed.
0x02Full lockout: All buttons and slider blocked.
> 0x02Treated as full lockout

When Emma leaves the Zigbee network, the lockout level is reset to 0x00.


10. Temperature Measurement Cluster

Cluster ID: 0x0402
Side: Server

This cluster reports the measured ambient temperature from the internal sensor. All values use 0.01 °C units.

Attribute IDNameTypeAccessDefaultReportable
0x0000Measured ValueINT16SRYes (change: 0.1 °C)
0x0001Min Measured ValueINT16SR-4000 (-40 °C)Yes
0x0002Max Measured ValueINT16SR12000 (120 °C)No
0xFFFDCluster RevisionINT16UR3No

11. Relative Humidity Measurement

Cluster ID: 0x0405
Side: Server

This cluster reports the measured ambient relative humidity from the internal sensor.

All values use 0.01 %RH units.

Example:

5000 = 50.00 %RH
Attribute IDNameTypeAccessDefaultReportable
0x0000Measured ValueINT16URYes (change: 300 = 3.00 %RH; max 870 s)
0x0001Min Measured ValueINT16UR0No
0x0002Max Measured ValueINT16UR10000No
0xFFFDCluster RevisionINT16UR2No

12. Diagnostics Cluster — 0x0B05 (Server)

Cluster ID: 0x0B05
Side: Server

Attribute IDNameTypeAccess
0x011CLast Message LQIINT8UR
0x011DLast Message RSSIINT8SR

13. Router / Sleepy End Device Lifecycle

Emma can change its Zigbee node type at runtime without leaving the network. Plugins must handle this transition correctly.

Join behaviour

At join time, Emma selects its node type based on the detected power source.

  • Router
    • Emma Wired Pro with OpenTherm Smart Power heat source
    • Emma Wireless with USB-C power
  • Sleepy End Device
    • Emma Wireless on batteries
    • Emma Wired Pro with OnOff heat source
    • Emma Wired Pro with OpenTherm heat source

The selected type is stored in non-volatile memory and restored after reboot.

Runtime Router → SED Transition

Emma can demote itself from Router to SED after joining when its power source changes.

This occurs when:

  • Emma Wireless detects a valid battery voltage while currently operating as a Router. Then it automatically transitions to SED mode. The Basic cluster Power Source attribute (0x0007) is updated to 0x03 (Battery).
  • Emma Wired Pro establishes OpenTherm communication with a heat source that does not provide OpenTherm smart power, it transitions from Router to SED mode.

In that case, Emma performs a secured rejoin — it rejoins the existing network as a Sleepy End Device without leaving, preserving its short address, network key, and all attribute values. After rejoining, Emma sends a ZDO Device Announcement to notify the coordinator of the node type change.

Integration requirements

When Emma sends a ZDO Device Announcement (0x0013):

  1. Issue a Node Descriptor Request to retrieve the updated node descriptor.
  2. If Emma is now a SED, bind to the Poll Control cluster (0x0020) to receive CheckIn messages.

If the node type is not refreshed after the announcement, the integration may continue to treat Emma as a Router and direct unicast messages to a sleeping device.

SED → Router Transition

There is no automatic SED → Router transition.

To restore Router operation, remove Emma from the network and join it again while the required powered configuration is active.

SED Polling Timing

ParameterDefault valueConverted
Check-in Interval43200 quarter-seconds~3 hours
Long Poll Interval20 quarter-seconds5 s
Short Poll Interval4 QS (OpenTherm) / 16 QS (OnOff or wireless/battery)1 s / 4 s
Fast Poll Timeout96 quarter-seconds24 s

14. External Control

Emma supports manufacturer-specific external boiler control through thermostat cluster 0x0201 using manufacturer code 0x1172.

This functionality allows a gateway or integration to control:

  • the boiler target temperature for OpenTherm systems
  • the boiler on/off state for OnOff systems

This feature lets Home Assistant directly control the boiler target temperature (OpenTherm) or boiler state (OnOff boiler) from the gateway, bypassing Emma's own regulation.

The following attributes all require Unlocked External Control before they can be accessed:

Attribute IDClusterNameTypemfgCode
0xF0000x0201External Heat DemandINT16U0x1172
0xF0010x0201External Heat Demand TimeoutINT16U0x1172
0xF0070x0201Max DHW SetpointINT16S0x1172
0xF0080x0201Max Boiler SetpointINT16S0x1172

Reads or writes attempted before unlock is active return ZCL status NOT_AUTHORIZED (0x7e).

Writing any of 0xF000, 0xF001, 0xF007, or 0xF008 on an un-unlocked device triggers the unlock screen on the thermostat display so the user can complete the unlock flow.

External Heat Demand - OpenTherm

Write 0xF000 with the desired boiler water temperature in hundredths of °C (e.g. 7000 = 70.00 °C). Valid range: 09000 (0–90 °C); values above 9000 are rejected with INVALID_VALUE.

  • Emma immediately overrides the Regulation with the written value. A watchdog timer is started. If no new write to 0xF000 arrives before it expires, Emma reverts to its own regulation.
  • Writing 0 disables external heat demand immediately.

Timeout (0xF001): Read/Write, INT16U, seconds. Default 900 (15 min). Allowed range: 3003600 (5 min – 60 min); values outside this range are rejected.

Max Setpoint Clamping (0xF007, 0xF008): When Max DHW Setpoint (0xF007) and Max Boiler Setpoint (0xF008) are configured, Emma clamps the values written to 0xF000 so that the boiler water temperature does not exceed the Max Boiler Setpoint and the domestic hot water temperature does not exceed the Max DHW Setpoint. These limits are not applicable to OnOff boilers.

External Heat Demand - OnOff

Write 0xF000 with any non-zero value to turn the boiler ON, or 0 to turn it OFF. The value itself is not used as a temperature; the boiler is driven solely by zero vs non-zero.

  • The same watchdog (0xF001) applies. On expiry, Emma reverts to its own Regulation

Max DHW Setpoint and Max Boiler Setpoint

These two read-only attributes report the maximum setpoints supported by the boiler, as communicated over OpenTherm. They are only meaningful on OpenTherm boiler variants.

Attr IDNameDescription
0xF007Max DHW SetpointMaximum domestic hot water setpoint the boiler supports, in hundredths of °C
0xF008Max Boiler SetpointMaximum central heating water setpoint the boiler supports, in hundredths of °C

A value of 0 means the boiler has not yet reported the limit over OpenTherm. Both attributes report on change ≥ 0.50 °C (50 hundredths).


15. Reporting Configuration Restrictions

Emma validates ConfigureReporting requests for selected attributes. If a requested configuration falls outside the supported limits, Emma returns:

INVALID_VALUE

Temperature Measured Value

ParameterAllowed value
Reportable change1–10 (0.01–0.10 °C)
Min intervalmust be exactly 1 s
Max intervalmust be exactly 870 s

Thermostat Local Temperature

ParameterAllowed value
Reportable change1–10 (0.01–0.10 °C)
Min / Max intervalno restriction

Relative Humidity Measured Value

ParameterAllowed value
Reportable change10–300 (0.10–3.00 %RH)
Min intervalmust be exactly 1 s
Max intervalmust be exactly 870 s

Battery Percentage Remaining

ParameterAllowed value
Min interval≥ 1 s
Max interval≥ 43200 s (~12 hours)

Restricted Thermostat Attributes

The following thermostat attributes enforce a maximum reporting interval of 870 s:

Attr IDNameMax interval
0x0007PI Cooling Demand870 s
0x0008PI Heating Demand870 s
0x0010Local Temperature Calibration870 s
0x0011Occupied Cooling Setpoint870 s
0x0012Occupied Heating Setpoint870 s
0x001CSystem Mode870 s
0x0029HVAC Relay State870 s

Attributes not listed above accept any interval the hub specifies.

Poll Control Short Poll Interval

The minimum allowed Short Poll Interval depends on the heat source connection detected at runtime:

Boiler connectionMinimum Short Poll Interval
Emma Wired Pro + OpenTherm heat source4 quarter-seconds (1 s)
Emma Wired Pro + OnOff heat source, Emma Wireless16 quarter-seconds (4 s)