Skip to content
HomeTechOps

Smart Home

ZHA vs Zigbee2MQTT: pick and migrate

Choose between ZHA and Zigbee2MQTT — the operations people conflate (coordinator swap, software switch, ZHA↔Z2M) and where re-pairing is unavoidable.

Start here: Classify the migration

Decide coordinator swap vs ZHA↔Z2M stack switch.

Problem summary

The 'which is better' question is saturated; the real trouble is migration, where three different operations get conflated. A same-software coordinator swap keeps your devices (both ZHA and Z2M support it; ZHA even has a built-in cross-vendor Migrate Radio wizard). A ZHA↔Zigbee2MQTT software switch is hard — the supported answer is re-pair, and the 'no-re-pair' community scripts are fragile and unsupported. The low-risk path is a second coordinator and a gradual move.

Operator snapshotEvidence first
First proof

Name the operation: coordinator swap, or stack switch (ZHA↔Z2M)?

Screen to open

ls -l /dev/serial/by-id/

Expected signal

You know whether re-pairing is avoidable.

Stop boundary

If you try a script, back up first and expect it may fail.

Layer path

1The 'which is better' debate is saturated; the real difficulty is migration, where three distinct operations get conflated.
2A same-software coordinator swap keeps your devices — both ZHA and Zigbee2MQTT support it, and ZHA has a built-in Migrate Radio wizard that works even across chip vendors.
3A ZHA↔Zigbee2MQTT software switch is hard: the supported answer is re-pair, and the 'no-re-pair' community scripts are unsupported and fragile (they broke on a 2026 Home Assistant template change).
4The low-risk path is a second coordinator: run the new stack in parallel and move devices gradually (mains-powered routers first, then battery end devices).
Runbook

Step-by-step runbook

Start here. Do each check in order, compare it to the expected result, and stop when the evidence explains the failure or the safe stop point applies.

1

Classify the migration

Check: Decide coordinator swap vs ZHA↔Z2M stack switch.

Expected result: You know whether re-pairing is needed.

If not: Don't treat a software switch as a simple radio change.

2

For a swap, use the built-in path

Check: Run ZHA's Migrate Radio wizard (or Z2M's supported swap).

Expected result: Devices stay paired on the new coordinator.

If not: Keep the old radio until the new one is verified.

3

For a stack switch, go parallel

Check: Add a second coordinator and run the new stack alongside.

Expected result: You can move devices at your own pace.

If not: Pair mains-powered routers first, battery devices last.

4

Avoid the fragile shortcut

Check: Skip unsupported no-re-pair scripts unless you've backed up and accept the risk.

Expected result: You don't corrupt the Zigbee database mid-migration.

If not: The parallel approach is the safer route.

5

Verify and decommission

Check: Confirm devices respond on the new stack/radio, then retire the old.

Expected result: The migration is proven before cleanup.

If not: If a device won't move, re-pair just that one.

Did this help you choose?

Your answer helps us improve this page.

No account or personal details. We store the page, answer, optional reason and day with a 90-day retention period. A random reference in this browser prevents repeat votes. Feedback privacy

Decision tree

Decision tree

If: You just want a better/newer radio.

Then: Coordinator swap, same software.

Action: Use ZHA's Migrate Radio wizard or Z2M's supported swap — devices stay paired.

If: You want to switch ZHA to Zigbee2MQTT.

Then: Software switch — re-pairing is the supported answer.

Action: Re-pair, or run Z2M alongside ZHA and move devices gradually.

If: You're tempted by a no-re-pair conversion script.

Then: Unsupported and version-fragile (broke on a 2026 API change).

Action: Use the parallel-coordinator approach instead for safety.

Safe stop: If you try a script, back up first and expect it may fail.

If: You need more than one Zigbee network.

Then: ZHA can't; Z2M can (multiple instances).

Action: Choose Zigbee2MQTT for multi-network setups.

Evidence

Evidence table

SymptomEvidence to collectLikely layerNext action
Want to change radios, keep devices.Whether it's a same-software swap and both adapters are supported.Coordinator swapUse the Migrate Radio wizard / supported Z2M swap.
Want to leave ZHA for Z2M.Whether you accept re-pairing or will run parallel stacks.Stack switchRe-pair or move gradually with a second coordinator.
Tried a no-re-pair script and it errored.Script/version compatibility (e.g. 2026 template change).Unsupported migration scriptFall back to re-pairing or parallel coordinators.
Need multiple Zigbee networks.ZHA single-network limit vs Z2M multi-instance.Topology requirementPick Z2M for multiple networks.
Reference

Commands and settings paths

Find both coordinators' paths

ls -l /dev/serial/by-id/

Where: On the Home Assistant host.

Expected: Each coordinator appears with a stable by-id name.

Failure means: Missing entries mean the adapter isn't connected/passed through.

Safe next step: Use the by-id path in ZHA/Z2M config, not /dev/ttyACM0.

Use ZHA's Migrate Radio wizard

Settings > Devices & Services > ZHA > (kebab) > Migrate Radio

Where: In the Home Assistant UI.

Expected: ZHA backs up and restores the network onto the new coordinator.

Failure means: If it errors, the target adapter may be unsupported.

Safe next step: Pick a supported adapter; keep the old one until verified.

Stand up Z2M in parallel (stack switch)

Add a second adapter; configure Zigbee2MQTT (adapter: ember, baud per device)

Where: In the Z2M add-on/container config.

Expected: Z2M runs alongside ZHA on the second radio.

Failure means: Wrong adapter/baudrate stops Z2M from starting.

Safe next step: Use the device-correct adapter/baud; move devices gradually.

Hardware boundary

Hardware and platform boundary

Change only when

  • Buy a second supported coordinator (e.g. Connect ZBT-2) when switching stacks or radios — it enables a gradual, low-risk move and a clean coordinator swap.

Evidence that matters

  • A supported adapter (ZBT-2/ZBT-1, TI zstack, Silabs ember), referenced by by-id, and a backup before you start.

Evidence that does not matter

  • Brand loyalty between ZHA and Z2M — pick by needs (multi-network, add-on workflow), and migrate by operation type, not hype.

Avoid

  • Promising yourself a no-re-pair ZHA→Z2M switch via an unsupported script (it broke on a 2026 HA change) instead of re-pairing or going parallel.

Related tool

Use the linked tool to turn this runbook into a guided check for your exact setup.

Device setup troubleshooter

Related problems

Last reviewed

2026-06-03 · Reviewed by HomeTechOps. Built from 2026-06 research verified against home-assistant.io ZHA docs and Zigbee2MQTT migration docs; the differentiator is separating the three conflated operations (coordinator swap vs stack switch vs ZHA↔Z2M asymmetry) and flagging the no-re-pair scripts as unsupported/fragile. SkyConnect is the legacy name for ZBT-1.

Sources/assumptions

  • Assumes a Zigbee network on ZHA or Zigbee2MQTT with a supported coordinator (Connect ZBT-2/ZBT-1, TI zstack, or Silabs ember); SkyConnect is the legacy name for ZBT-1.
  • A same-software coordinator swap can avoid re-pairing; a ZHA↔Z2M software switch generally cannot, and any 'no-re-pair' script is community/unsupported and version-fragile.
  • Adapter/baudrate values (e.g. ember at 460800) are device-specific; chip-family support lists change — verify against current docs.

Source-backed checks

HomeTechOps turns official docs and conservative safety rules into a shorter runbook. These links are the source trail for the page direction.

Get the deal & firmware alerts

Home Stack Field Notes: NAS deals, firmware changes worth acting on, restore-test reminders, and new decision guides — plus the capacity & backup sizing cheatsheets from our calculators. Unsubscribe anytime.

Subscribe on beehiiv