On this page

On this page

ETH-52P / ETH-52P7 change IEEE (coordinator migration)

When you replace an ETH-52P or ETH-52P7, restoring a Zigbee2MQTT / ZHA backup is often not enough. Some devices look up the coordinator by IEEE (EUI-64). A new dongle factory IEEE then looks like “reports still work, commands fail,” or joining never completes.

This page writes the old TI coordinator IEEE onto the new gateway as a secondary IEEE, then restores the same zstack backup. Power the old coordinator down. Two radios must not advertise the same IEEE on the air.

Applies to: ETH-52P / ETH-52P7 (ESP32 + TI CC2652P / CC2652P7, adapter: zstack). The old radio must also be TI Z-Stack / CC26xx-class.

Does not apply to: ETH-MG21 / ETH-MG24 (including PoE), ZBT-1P, ZBM-MG21 / MG24. Those are Silicon Labs — use ETH-MG web change IEEE (coordinator migration).

ETH defaults: web UI http://dongle.local/, Zigbee2MQTT tcp://dongle.local:6638, ZHA socket://dongle.local:6638. If mDNS is flaky, use the LAN IP.

Before you start

  1. Back up before touching IEEE. No backup and no IEEE copy means a full re-pair
  2. Record the old IEEE, for example 00:12:4B:00:AA:BB:CC:DD (tools usually accept it without a leading 0x)
  3. After the secondary IEEE write, most tools still need a coordinator reflash that retains secondary IEEE, or the stack keeps the factory primary
  4. The gateway UI often still shows the factory primary. That is expected. Trust the Coordinator IEEE in Z2M / ZHA

Canonical overview: Zigbee2MQTT: copying the coordinator IEEE.

1. Record the old IEEE and back up the network

Zigbee2MQTT

  1. Frontend Settings → About → Coordinator IEEE Address
  2. Or open database.db in the data folder; the first Coordinator row has ieeeAddr
  3. Copy / download coordinator_backup.json

ZHA

Note the coordinator IEEE. Migrate adapter takes an automatic backup; keep an export if you use one.

Optional CLI (Z2M / ZHA already stopped on the old gateway)

zigpy-znp uses socket://, not Zigbee2MQTT’s tcp://:

pip install zigpy-znp
python -m zigpy_znp.tools.network_backup socket://OLD_IP:6638 -o network_backup.json

See zigpy-znp TOOLS.md.

2. Write the old IEEE as secondary

Option A — XZG Multi-tool (good when you want a browser UI)

Follow Z2M: XZG Multi-tool:

  1. In Chrome / Edge open XZG Multi-tool (source: xyzroe/XZG-MT)
  2. Chip family CC2652. Serial is TCP GATEWAY_IP:6638, or the USB-Zigbee port
  3. After connect, Device Info may still show the factory primary IEEE
  4. IEEE section: Read, enter the old coordinator IEEE, Write (secondary on TI)
  5. Reflash coordinator firmware and retain secondary IEEE if the tool offers that

Option B — cc2538-bsl (LAN BSL)

Repo: JelmerT/cc2538-bsl. Enable BSL, then:

python cc2538-bsl.py -p socket://GATEWAY_IP:6638 -evw \
  --ieee-address 00:12:4b:aa:bb:cc:dd:ee \
  ./MATCHING_COORDINATOR.hex

Replace the IEEE and hex. -evw is erase, write, verify. See Z2M: cc2538-bsl.

Option C — TI FLASH-PROGRAMMER-2 (USB)

Enter BSL over USB, write the old IEEE under Secondary Address → IEEE 802.15.4 MAC, reflash, and check Retain secondary IEEE. Z2M: FLASH-PROGRAMMER-2.

3. Restore the backup

Return the radio to normal coordinator firmware (reboot the gateway if needed). Keep the old coordinator off.

Zigbee2MQTT

Put the old coordinator_backup.json in the Z2M data folder (replace any empty new backup):

serial:
  port: tcp://dongle.local:6638
  # port: tcp://GATEWAY_IP:6638
  adapter: zstack
socat:
  enabled: false

Start only this Zigbee2MQTT instance. Full YAML: Zigbee2MQTT with an Inswift coordinator.

ZHA

Configure → Migrate adapter, new port socket://dongle.local:6638 (or the IP). If asked, enable Permanently replace the radio IEEE address. See Home Assistant ZHA: migrate to a new adapter.

Optional zigpy-znp restore

python -m zigpy_znp.tools.network_restore socket://GATEWAY_IP:6638 -i network_backup.json

Keep NVRAM-level restores inside the same CC2652 / Z-Stack generation.

4. Bring devices back

  1. Power-cycle Zigbee routers for ≥ 15 seconds (a whole-house cut is common when many mains routers exist)
  2. In Z2M / ZHA, confirm Coordinator IEEE is the old address, and devices both report and accept commands
  3. If you reuse the old gateway as a router, change its IEEE first, or leave it unpowered. Do not run two identical IEEE values on the same channel

Troubleshooting

SymptomLikely causeWhat to try
UI / flasher still shows factory IEEETI screens often show the primaryTrust Z2M / ZHA Coordinator IEEE; test a command
Reports OK, commands failSecondary IEEE not active, or reflash did not retain itRewrite IEEE, reflash with retain, restore the backup again
adapter state does not match / extpanid mismatchBackup and IEEE are from different networksUse the IEEE from that backup; do not mix files
Tool cannot open …:6638Z2M/ZHA still connected, or not in BSLStop the stack, Enable BSL again; fall back to USB-Zigbee
Coming from a Silabs chipWrong stackDo not use this page. See FAQ: migrating

Zigbee2MQTT setup · ZHA setup · FAQ · ETH-52 web upgrade · ETH host USB flash · ETH-52P / ETH-52P7

Docs: Copy IEEE · Z2M migrate adapters · Discussion: replace a CC2652 coordinator