Quick Answer
Zigbee2MQTT supports more devices, exposes more attributes, and gives you MQTT flexibility. ZHA is easier to set up and lives entirely within Home Assistant with no extra services. For most users with a diverse device mix, Zigbee2MQTT is the better choice. ZHA is great for getting started quickly with common devices.
Table of Contents
What You Need
- Sonoff Zigbee Dongle Plus (ZBDongle-P) — recommended coordinator
- A running Home Assistant instance (any hardware)
- At least one Zigbee device to pair
Architecture Differences
Understanding how each system is built helps you pick the right one for your needs.
Zigbee2MQTT Architecture
Zigbee2MQTT is a separate Node.js application that sits between your Zigbee coordinator and the rest of your system. It communicates with devices via the coordinator, then publishes device state to an MQTT broker (usually Mosquitto). Home Assistant reads those MQTT messages and creates entities via autodiscovery.
The flow looks like: Zigbee Device → USB Coordinator → Zigbee2MQTT → MQTT Broker → Home Assistant
This layered approach means more moving parts, but also more power — you can subscribe to MQTT topics from any other system, Node-RED, scripts, or even other HA instances.
ZHA Architecture
ZHA (Zigbee Home Automation) is a native Home Assistant integration. It talks directly to the coordinator from within HA, with no MQTT broker or external services required. Device state goes straight into HA entities.
The flow: Zigbee Device → USB Coordinator → ZHA (inside HA) → HA Entities
Simpler, fewer services, but less flexible if you want to expose data to other systems.
Device Support
| Metric | Zigbee2MQTT | ZHA |
|---|---|---|
| Supported devices | 3,800+ | 2,500+ |
| Aqara coverage | Excellent | Good |
| IKEA TRÅDFRI | Excellent | Good |
| Tuya devices | Good | Mixed |
| Custom attributes | Extensive (per device) | Standard only |
| OTA firmware updates | ✅ Yes | ✅ Yes |
Zigbee2MQTT generally exposes more device-specific attributes. For example, an Aqara motion sensor via Zigbee2MQTT gives you motion, illuminance, temperature, battery, link quality, and voltage. ZHA may only expose motion and battery for the same device.
Setup Complexity
Zigbee2MQTT Setup
- Install Mosquitto MQTT broker add-on in HA
- Install Zigbee2MQTT add-on in HA
- Configure Zigbee2MQTT with your coordinator serial port and MQTT settings
- Enable HA autodiscovery in Zigbee2MQTT config
- Pair devices — they auto-appear in HA
ZHA Setup
- Go to HA Settings → Integrations → Add → ZHA
- Select your coordinator's serial port
- Pair devices directly in the ZHA interface
ZHA wins on simplicity — it's genuinely just a few clicks. Zigbee2MQTT requires installing Mosquitto first and editing a configuration file, but once set up it's extremely stable.
Zigbee2MQTT Configuration Example
mqtt: base_topic: zigbee2mqtt server: mqtt://localhost:1883 user: homeassistant password: your_mqtt_password serial: port: /dev/ttyUSB0 adapter: zstack homeassistant: true permit_join: false advanced: log_level: info channel: 25
permit_join: true temporarily when pairing new devices, then set it back to false for security.
ZHA Configuration Example
ZHA configuration is mostly done through the UI, but you can tune radio settings in your HA configuration.yaml:
zha:
zigpy_config:
network:
channel: 25
ota:
ikea_provider: true
salus_provider: true
To pair a ZHA device: go to Settings → Devices & Services → ZHA → Add Device and put your device in pairing mode.
When to Choose Each
Choose Zigbee2MQTT if:
You have many different device brands, want maximum attribute exposure, plan to use Node-RED or other MQTT-based tools, want OTA firmware updates for Ikea/Aqara devices, or want to run automations based on MQTT topics directly.
Choose ZHA if:
You're new to HA and want the simplest setup, you have mostly common devices (IKEA, Philips Hue, Aqara basic sensors), and you don't need MQTT access from outside HA.
Troubleshooting
- Entities don’t appear in Home Assistant: Confirm the integration is loaded correctly and double-check that the device is supported by the platform you chose.
- Commands feel delayed: This is usually caused by cloud polling, weak Wi-Fi, or a slow Zigbee mesh rather than Home Assistant itself.
- Things work in the vendor app but not in HA: Re-check credentials, local API permissions, and whether the device is using the correct network path.
- Automations misfire: Open the automation trace in Home Assistant and verify the exact entity IDs and state changes being used.
FAQ
Can I switch from ZHA to Zigbee2MQTT without re-pairing?
No — each Zigbee stack uses its own network key and device database. Switching requires removing and re-pairing all devices. Plan for this before you start and choose wisely upfront.
Which coordinator USB stick works with both?
The Sonoff ZBDongle-P (CC2652P based) works with both Zigbee2MQTT and ZHA. It's the most widely recommended coordinator in 2026. The ConBee II/III also works with both.
Does Zigbee2MQTT work without Home Assistant?
Yes — Zigbee2MQTT is a standalone app. You can run it on any Linux machine and use it with any MQTT-capable system, not just HA.
Which one has better mesh networking?
Both use the same underlying Zigbee radio stack — mesh quality depends on your coordinator firmware and device placement, not which software stack you use.
SmartWired uses affiliate links. If you buy through our links, we may earn a commission at no extra cost to you. See our Affiliate Disclosure.