Zigbee2MQTT vs ZHA in Home Assistant: Which Should You Use?Home Automation

Zigbee2MQTT vs ZHA in Home Assistant: Which Should You Use?

by Joule P. Kraft · October 9, 2026

As an Amazon Associate, and through other affiliate programs (including SONOFF), I earn from qualifying purchases. No affiliate relationship influences my recommendations.

I would not choose a Zigbee integration from a feature checklist alone. The right choice is the one you can recover at 2 a.m., after a coordinator firmware update or a dead battery has made half the house look unavailable.

I have used both ZHA and Zigbee2MQTT, and the practical difference is less dramatic than the community arguments suggest. Both can run a dependable mesh. Both benefit from a well-placed coordinator, powered routers, a sensible channel, and a backup that you have actually tested. The important difference is where each system puts complexity: ZHA keeps more of it inside Home Assistant, while Zigbee2MQTT exposes more knobs and separates the radio service from the automation platform.

What ZHA gets right

ZHA is the natural starting point for a Home Assistant installation. Add the integration, select a supported coordinator, and the devices appear in the same system that already contains your automations, dashboards, and backups. There is no MQTT broker to install and no second web interface to learn.

That simplicity matters. A smart home is not a lab benchmark. It is a collection of switches, leak sensors, buttons, and lights that other people in the house expect to work. Every additional service creates another update path and another log to check when something stops responding. ZHA keeps the ordinary path short.

ZHA also feels coherent when you use Home Assistant’s device and entity model. Pairing, renaming, areas, automation triggers, and diagnostics live in one place. New users can learn the system without first understanding topics, discovery messages, and broker credentials.

The tradeoff is that ZHA sometimes makes advanced behavior less obvious. A device may be supported, but an unusual cluster or configuration option may not be exposed in the UI. You can often solve that with quirks, custom handlers, or an issue report, but the solution can be more Home Assistant-specific than a Zigbee2MQTT converter.

Where Zigbee2MQTT earns its complexity

Zigbee2MQTT is compelling when device compatibility is your first concern. Its catalog and converter model give you detailed control over what a device exposes. When a vendor adds a new button action, power measurement field, or calibration option, Zigbee2MQTT users often see it quickly because the device definition is explicit and community-maintained.

The MQTT boundary is useful too. The Zigbee service can run beside Home Assistant, on another machine, or in a container. Home Assistant consumes the published state, but the radio is not conceptually trapped inside the automation server. That is attractive if you rebuild Home Assistant often, run multiple consumers, or want the same broker to carry other local systems.

You pay for that flexibility with more moving parts. The broker must stay available. Discovery must be configured correctly. Credentials, network paths, add-on updates, and retained messages are now part of the recovery story. None of these is difficult, but they are real.

I would pick Zigbee2MQTT when I have a device that ZHA does not expose properly, when I want precise device controls, or when I already operate MQTT for other services. I would not install it merely because a forum says serious users do.

Device support is not a permanent score

Comparisons that declare one stack the winner on device support age badly. The useful question is whether the exact devices you plan to buy work today, with the coordinator and firmware you intend to run.

Check the integration’s current device list before ordering a box of sensors. Search the exact model number, not just the brand. A manufacturer may sell several revisions under a nearly identical name, and the regional version may use a different radio or expose different clusters.

This matters especially for cheap sensors and buttons. The purchase price is low, but replacing ten paired devices after discovering a compatibility gap is expensive in time. I keep a shortlist of models with clear support, then buy one sample before standardizing on a new vendor.

For a first network, the SONOFF Zigbee Dongle Plus-E on SONOFF or on Amazon is a sensible baseline. Put it on a USB 2.0 extension cable, away from the host and USB 3 devices. Radio placement will usually matter more than the choice between the two integrations.

Backups are the deciding feature

The best integration is the one whose backup you understand before the mesh fails. Export the integration configuration and the coordinator network backup. Store them somewhere that survives a failed Home Assistant disk. A backup on the same tiny computer as the live system is not a recovery plan.

ZHA and Zigbee2MQTT do not present identical backup workflows. The coordinator radio stores network information, while the integration stores device and application configuration. You need both layers. Write down the coordinator model, firmware, Zigbee channel, network key policy, and whether the backup is encrypted. Future-you should not have to infer the architecture from a dead dashboard.

I also keep a plain inventory of important devices. It includes room, friendly name, model number, battery type, and the automation that depends on it. That document is boring until a migration loses a sleepy contact sensor and you need to know which door it protected.

The migration trap

Switching stacks is not a weekend configuration toggle. Sometimes a coordinator backup lets you preserve network identity. Sometimes the radio family, firmware, or backup format makes that impossible. Even when the devices remain joined, names, entities, triggers, and automations may need cleanup.

Do a small migration first. Pair or move a spare plug and one battery sensor. Test state changes, battery reporting, and an automation that uses the device. Leave the production integration alone while you learn the new path. If you need to move the main network, make a checklist and move one room or device class at a time.

Do not change the coordinator, integration, channel, router layout, and firmware on the same afternoon. If the result is worse, you will not know which change caused it. A stable mesh is more valuable than a theoretically optimal one.

Networking and coordinator placement still matter

Neither integration fixes a radio hidden behind a server. Place the coordinator in open air, away from metal racks and USB 3 storage. If the best location is across the house from Home Assistant, an Ethernet coordinator can be a better architectural choice. My Ethernet Zigbee coordinator guide covers that tradeoff.

Use powered Zigbee devices as routers. A mains-powered plug or switch in the right room often improves a mesh more than replacing an otherwise adequate coordinator. Battery devices do not route traffic, no matter how expensive the sensor is.

Channel planning deserves attention, but it is not the first lever. Start with placement and routers. Then compare Zigbee behavior against nearby Wi-Fi use. Change one thing, allow sleepy devices time to report, and judge missed events and unavailable time rather than one attractive network-map screenshot.

My choice for three common setups

For a first Home Assistant house with ordinary lights, buttons, and sensors, I would start with ZHA. It has the shortest path from coordinator to automation, and the reduced service count is a feature. I would keep a compatibility check open for every unusual device before buying multiples.

For a house with mixed brands, unusual remotes, or a separate MQTT deployment, I would start with Zigbee2MQTT. The additional interface is worth it when the device catalog and exposed controls matter more than having one integrated screen.

For an existing stable system, I would not migrate for philosophical reasons. If ZHA works, keep ZHA. If Zigbee2MQTT works, keep Zigbee2MQTT. Use the time to improve backups, coordinator placement, router coverage, and monitoring. Those changes help either stack.

The Bottom Line

ZHA is my default recommendation for a new Home Assistant installation because it keeps the system understandable and reduces the number of services that can fail. Zigbee2MQTT is the better choice when exact device support, detailed controls, or a portable MQTT architecture justify the extra moving parts.

Choose based on the devices and recovery plan you actually have, not on which project wins a forum argument. Put the coordinator somewhere the radio works, add powered routers where the mesh needs them, and make a backup before you experiment. A boring Zigbee network is a successful Zigbee network.

One final practical point: keep the integration choice separate from the brand of sensor. A good Aqara, IKEA, Philips Hue, or SONOFF device can be reliable under either stack when the exact model is supported. If a device behaves badly, verify the model and route before rewriting the entire system. Most household failures are local problems, not proof that the other integration is universally superior.

When I troubleshoot a Zigbee issue, I start at the edge: does the device have power, is it awake, and is the signal path plausible? Only after that do I inspect the integration logs. This order prevents a missing battery report from turning into an unnecessary coordinator migration. It also keeps the recommendation honest: software can expose a device, but it cannot create a radio route through concrete and metal.

Where to Buy

SONOFF Zigbee Dongle Plus-E on SONOFF (code JPK)Buy Now →SONOFF Zigbee Dongle Plus-E on AmazonBuy on Amazon →USB 2.0 extension cable on AmazonBuy on Amazon →

As an Amazon Associate, and through other affiliate programs (including SONOFF), we earn from qualifying purchases. Prices and availability are subject to change.

Frequently Asked Questions

Is Zigbee2MQTT better than ZHA?+
Neither is universally better. Zigbee2MQTT usually wins when you need broad device support, detailed exposure controls, or a separate MQTT-based architecture. ZHA is simpler when you want the most native Home Assistant setup with fewer services to maintain.
Can I switch from ZHA to Zigbee2MQTT without pairing everything again?+
Sometimes, but do not assume it. A coordinator backup may be restorable between stacks depending on the coordinator and firmware. Plan for a staged migration and keep the old integration untouched until important devices and automations are proven.
Does Zigbee2MQTT need a separate MQTT broker?+
Yes. Zigbee2MQTT publishes device state through MQTT, so you need a working broker and credentials. That is another service, but it also makes the radio integration portable across Home Assistant and other consumers.
Which Zigbee integration is easier for a beginner?+
ZHA is usually the shorter path because it is built into Home Assistant. Zigbee2MQTT is still approachable, but the broker, add-on, and device-specific settings add more decisions before the first sensor is paired.