Skip to content

Zigbee reference ​

This page documents what ZiggyMeter looks like on a Zigbee network: endpoints, clusters and attributes. For how to join a network, see Zigbee setup.

About Zigbee ​

Zigbee is a low-power wireless mesh protocol for IoT devices, running on IEEE 802.15.4 at 2.4 GHz. Messages hop through mains-powered routers, which is what makes it work in meter cabinets and basements where a direct Wi-Fi link would not.

ZiggyMeter joins as an End Device: it does not route for others, and it sleeps between readings.

Requirements ​

  • A Zigbee coordinator — a USB adapter or hub that creates and manages the network
  • Software that understands Zigbee Cluster Library v8 clusters

All clusters ZiggyMeter exposes are standard. There are no manufacturer-specific clusters, so most integrations work out of the box without a custom device handler.

Endpoints ​

Endpoint 1 — device ​

Device identification and basic status. Toggling the On/Off switch enables or disables Wi-Fi.

Input clusters

Cluster IDName
0x0000Basic
0x0001Power Configuration
0x0003Identify
0x0006On/Off
0x0402Temperature Measurement

Output clusters

Cluster IDName
0x0003Identify
0x0019OTA Upgrade

Endpoint 2 — meter ​

Meter data. Toggling the On/Off switch triggers a meter reading.

Input clusters

Cluster IDName
0x0006On/Off
0x0702Simple Metering
0x0B04Electrical Measurement

No output clusters.

Metering cluster (0x0702) ​

Two attributes, both standard. No proprietary commands are required.

Attribute IDName
0x0000Current Summation Delivered
0x0001Current Summation Received

Current Summation Received is only updated if the meter provides that value.

Electrical Measurement cluster (0x0B04) ​

Electrical parameters. The cluster declares the full attribute set below, but only three of them — Active power (0x050B), RMS current (0x0508) and RMS voltage (0x0505) — can be fed from a meter value and reported to a coordinator. See Available targets.

Which of those are actually updated then depends on the meter: a single-phase meter obviously never fills in phase B and C.

Some Zigbee integrations do not surface every attribute even when the device updates it correctly. Check the raw cluster values in your coordinator's own tools before concluding the device is not reporting.

Attribute IDName
0x0300AC frequency
0x0304Total active power
0x0305Total reactive power
0x0306Total apparent power
0x0501Line current (phase A)
0x0502Active current (phase A)
0x0503Reactive current (phase A)
0x0505RMS voltage (phase A)
0x0508RMS current (phase A)
0x050BActive power (phase A)
0x050EReactive power (phase A)
0x050FApparent power (phase A)
0x0901Line current (phase B)
0x0902Active current (phase B)
0x0903Reactive current (phase B)
0x0905RMS voltage (phase B)
0x0908RMS current (phase B)
0x090BActive power (phase B)
0x090EReactive power (phase B)
0x090FApparent power (phase B)
0x0A01Line current (phase C)
0x0A02Active current (phase C)
0x0A03Reactive current (phase C)
0x0A05RMS voltage (phase C)
0x0A08RMS current (phase C)
0x0A0BActive power (phase C)
0x0A0EReactive power (phase C)
0x0A0FApparent power (phase C)

How meter values become attributes ​

The meter speaks OBIS codes; Zigbee speaks cluster attributes. ZiggyMeter holds a mapping table between the two.

Each mapping entry is an OBIS code plus a mapping ID: four bytes of hexadecimal, where the first two are the cluster and the last two are the attribute.

OBISMapping IDCluster / attributeMeaning
1-0:1.8.0070200000x0702 / 0x0000Current summation delivered
1-0:2.8.0070200010x0702 / 0x0001Current summation received
1-0:1.7.00b04050b0x0B04 / 0x050BActive power, phase A
1-0:11.7.00b0405080x0B04 / 0x0508RMS current, phase A
1-0:12.7.00b0405050x0B04 / 0x0505RMS voltage, phase A

Change it when your meter uses a code the defaults do not cover — for example a meter that reports its voltage under a model-specific code, so the value shows up in a readout but never reaches your coordinator.

Changing a mapping ​

Do this in the web interface. Open Meter → Readings and double-click the Mapping cell on the row you want to change; the cell turns into a drop-down of the available Zigbee targets. Pick one and it is saved immediately — there is no separate save step.

Mapping cell in edit mode

INFO

Only OBIS codes that appear in a readout can be mapped, because the table is the readout. If the row you want is not there, read the meter first.

Available targets ​

The drop-down offers six choices, and no more. Only these five cluster/attribute pairs may be assigned an OBIS code — the rest of the attributes listed above exist on the clusters but are not mapping targets.

Drop-down entryMapping IDCluster / attribute
Unassigned00000000— (the value is read but not published over Zigbee)
Summation Delivered [kWh]070200000x0702 / 0x0000
Summation Received [kWh]070200010x0702 / 0x0001
Active Power [kW]0b04050b0x0B04 / 0x050B
Current RMS [A]0b0405080x0B04 / 0x0508
Voltage RMS [V]0b0405050x0B04 / 0x0505

WARNING

Each target can be used by one OBIS code at a time. Assigning a target that another row already holds moves it: the other row is automatically set back to Unassigned. Check the table after a change if you are re-arranging several rows.

Matching is on the full OBIS code including tariff (1-0:15.8.0*101). The API also accepts matching on the short code (15.8.0).

Editing through the API ​

/api/v1/zigbee/map reads and writes the same table, which is useful for provisioning several devices identically. It is an alternative to the web interface, not the normal route — a POST replaces the whole table and does not apply the one-target-one-code rule for you.

Firmware over the air ​

Endpoint 1 carries the standard OTA Upgrade cluster (0x0019), so any coordinator that supports Zigbee OTA can update the device. Ready-made index files are published for Zigbee2MQTT and for zigpy/ZHA: