🎉 Zigbee for Domoticz — stable9 / 9.1.001 is out!
Posted: Saturday 01 August 2026 13:52
Hi everyone,
A new stable release of the Zigbee plugin is available: **9.1.001 (2026.8)**. This is a big one — it lays the technical groundwork for the plugin's future while also fixing a handful of long-standing device issues. Here are the highlights.
🔧 Key change: DomoticzEx is now the primary framework
The plugin now runs on Domoticz's **Extended Framework (DomoticzEx)** by default, replacing the legacy Domoticz API it relied on until now.
[b]Why we made the move:[/b]
- DomoticzEx represents each Zigbee device as a single Domoticz object with multiple "Units" underneath, instead of a flat list of independent Idx-based widgets. This gives a much more natural, grouped representation of multi-endpoint/multi-cluster devices.
- It's the modern, actively developed Domoticz API — this move is what unlocks the reliability work described below (the new supervisor, thread-safety, smarter widget reuse) and is the foundation for features we have planned next.
- Less widget clutter and duplication, especially for devices that previously spread across many separate Idx's.
⚠️[b] Important constraint — please read before upgrading:[/b]
Widgets created under DomoticzEx are **not compatible with the legacy Domoticz framework**. Once your devices have been (re)created under DomoticzEx by this release, **downgrading the plugin to a pre-9.1.001 / legacy-framework version is no longer possible** — Domoticz would not be able to expose those widgets again under the old API.
In practice this means:
- Take a backup (Domoticz database + plugin `Data`/`Conf` folders) **before** upgrading, so you can restore to your current state if needed.
- Treat this as a one-way migration: plan for it rather than upgrading impulsively on a production system.
- If you're not ready to commit to DomoticzEx yet, stay on your current stable8 release until you are.
🛡️ [b]Much more robust in the background[/b]
- A new **HA-grade supervisor** watches over the Zigbee (zigpy) thread, with automatic retry and recovery if something goes wrong — no more silent stalls.
- Serial port drops are now detected and reconnected automatically, with a startup check/retry loop.
- Shutdown is cleaner: zigpy now gets up to 30s to stop gracefully, with a clear "Zigbee transport stopped" status message.
- Widget creation is smarter: it reports precise failure reasons and retries recoverable failures automatically instead of silently giving up.
- Group management and widget creation were refactored — pairing now reuses your existing matching widgets instead of creating duplicates.
Under the hood, several core modules (zigpy thread, `tools.py`) were split into smaller, dedicated pieces and covered by a lot of new unit tests — should make the plugin more reliable and easier to maintain going forward.
🩹 [b]Device fixes[/b]
- **ZLinky**: improved STGE and tariff (OP_TARIF) handling.
- **Tuya**: fixed multi-gang/multi-widget devices picking up the wrong datapoint on some commands.
- **Danfoss**: refactored eTRV handling, new OEM variant supported.
- Fixed ColorControl widget subtype selection.
🐞 [b]Other fixes[/b]
- OTA updates now work correctly with DomoticzEx, plus a couple of OTA bugs squashed (JSON loading, heartbeat handling).
- Fixed a bug requesting configuration reports when Min/Max were both 0x0000.
🧰 [b]New tools[/b]
- `Tools/replace_device.py` — replace a physical device while keeping its Domoticz history.
- `Tools/repair_clustertype.py` — protects your provisioned cluster types from being wiped on re-announcement.
As always, full details are in the [Release Notes](https://github.com/zigbeefordomoticz/Do ... seNotes.md), and questions/feedback are welcome here or on the [Wiki](https://zigbeefordomoticz.github.io/wiki/en-eng/).
Thanks to everyone who reported issues, tested, and contributed to this release! 🙏
A new stable release of the Zigbee plugin is available: **9.1.001 (2026.8)**. This is a big one — it lays the technical groundwork for the plugin's future while also fixing a handful of long-standing device issues. Here are the highlights.
🔧 Key change: DomoticzEx is now the primary framework
The plugin now runs on Domoticz's **Extended Framework (DomoticzEx)** by default, replacing the legacy Domoticz API it relied on until now.
[b]Why we made the move:[/b]
- DomoticzEx represents each Zigbee device as a single Domoticz object with multiple "Units" underneath, instead of a flat list of independent Idx-based widgets. This gives a much more natural, grouped representation of multi-endpoint/multi-cluster devices.
- It's the modern, actively developed Domoticz API — this move is what unlocks the reliability work described below (the new supervisor, thread-safety, smarter widget reuse) and is the foundation for features we have planned next.
- Less widget clutter and duplication, especially for devices that previously spread across many separate Idx's.
⚠️[b] Important constraint — please read before upgrading:[/b]
Widgets created under DomoticzEx are **not compatible with the legacy Domoticz framework**. Once your devices have been (re)created under DomoticzEx by this release, **downgrading the plugin to a pre-9.1.001 / legacy-framework version is no longer possible** — Domoticz would not be able to expose those widgets again under the old API.
In practice this means:
- Take a backup (Domoticz database + plugin `Data`/`Conf` folders) **before** upgrading, so you can restore to your current state if needed.
- Treat this as a one-way migration: plan for it rather than upgrading impulsively on a production system.
- If you're not ready to commit to DomoticzEx yet, stay on your current stable8 release until you are.
🛡️ [b]Much more robust in the background[/b]
- A new **HA-grade supervisor** watches over the Zigbee (zigpy) thread, with automatic retry and recovery if something goes wrong — no more silent stalls.
- Serial port drops are now detected and reconnected automatically, with a startup check/retry loop.
- Shutdown is cleaner: zigpy now gets up to 30s to stop gracefully, with a clear "Zigbee transport stopped" status message.
- Widget creation is smarter: it reports precise failure reasons and retries recoverable failures automatically instead of silently giving up.
- Group management and widget creation were refactored — pairing now reuses your existing matching widgets instead of creating duplicates.
Under the hood, several core modules (zigpy thread, `tools.py`) were split into smaller, dedicated pieces and covered by a lot of new unit tests — should make the plugin more reliable and easier to maintain going forward.
🩹 [b]Device fixes[/b]
- **ZLinky**: improved STGE and tariff (OP_TARIF) handling.
- **Tuya**: fixed multi-gang/multi-widget devices picking up the wrong datapoint on some commands.
- **Danfoss**: refactored eTRV handling, new OEM variant supported.
- Fixed ColorControl widget subtype selection.
🐞 [b]Other fixes[/b]
- OTA updates now work correctly with DomoticzEx, plus a couple of OTA bugs squashed (JSON loading, heartbeat handling).
- Fixed a bug requesting configuration reports when Min/Max were both 0x0000.
🧰 [b]New tools[/b]
- `Tools/replace_device.py` — replace a physical device while keeping its Domoticz history.
- `Tools/repair_clustertype.py` — protects your provisioned cluster types from being wiped on re-announcement.
As always, full details are in the [Release Notes](https://github.com/zigbeefordomoticz/Do ... seNotes.md), and questions/feedback are welcome here or on the [Wiki](https://zigbeefordomoticz.github.io/wiki/en-eng/).
Thanks to everyone who reported issues, tested, and contributed to this release! 🙏