Luke Angel
On the left, an old smart-home hub tethered up to a faint cloud, greyed out and crossed with a red X — retired for Zigbee. An arrow leads to a Raspberry Pi with a ConBee USB stick plugged into its side, antenna waves radiating from the stick into a local Zigbee mesh on the right: filled nodes for mains-powered routers and hollow nodes for battery sensors, all wired together and rooted at the stick. The mesh answers to the Pi now, not the cloud.

ConBee + deCONZ — taking Zigbee off the SmartThings hub

by
#smart-home#zigbee#deconz#conbee#home-assistant#local-first

The project I've deferred since last year's review finally happened over a weekend the day job didn't claim. The Zigbee devices are off the SmartThings hub and onto a coordinator I own.

Why the SmartThings hub had to go (for Zigbee)

Home Assistant runs the logic locally, but until now it reached the Zigbee bulbs and sensors through the SmartThings hub — which means through SmartThings' cloud-then-local bridge. Every "turn on the kitchen light" round-tripped through a dependency I'd spent a year trying to remove from everything else.

That's not local-first. That's local logic with a cloud-shaped hole in the middle.

Where the Zigbee commands go, before and after. Before: a bulb talks to the SmartThings hub, which round-trips through the SmartThings cloud before reaching Home Assistant — drawn in red, labelled "local logic with a cloud-shaped hole in it." After: the same bulb talks straight to a ConBee coordinator on the Pi, then to Home Assistant — drawn in green, "no cloud, no bridge, the hole is gone." A caption notes a radio you don't control isn't local-first, no matter where the logic runs.

The hardware: ConBee + deCONZ

  • ConBee USB stick (~$40, Dresden Elektronik). A Zigbee coordinator radio on a USB dongle. Plugs into the Pi.
  • deCONZ — the software that drives it, available as a Home Assistant add-on. Exposes a REST API + websocket; Home Assistant has a native deCONZ integration.

The principle: the ConBee is my Zigbee network's coordinator now. Devices pair directly to it. No SmartThings, no cloud, no bridge.

The migration, device by device

This is the tedious part nobody warns you about: Zigbee devices have to be factory-reset and re-paired to move coordinators. There's no "transfer." Each bulb, each sensor, gets removed from SmartThings, reset (usually a power-cycle dance or a button hold), then paired to deCONZ.

deconz pairing log:
  19:42  permit-join opened (60s)
  19:42  new device: Hue White A19  → 0x000b57fffe...  joined
  19:43  new device: Xiaomi contact → 0x00158d0002...  joined
  19:44  new device: Hue White A19  → 0x000b57fffe...  joined

Notes from doing ~20 devices in an evening:

  • Hue bulbs: reset by power-cycling 5 times, or with a Hue dimmer switch held near the bulb. Painless once you know the rhythm.
  • Xiaomi/Aqara sensors: cheap, excellent, but notoriously picky about coordinators. They paired to deCONZ fine — better than they ever behaved on SmartThings, which kept dropping them.
  • Re-pairing breaks every automation that referenced the old entity ID. Budget time to fix entity names in Home Assistant after. Mine went from light.kitchen_smartthings_xxxx to clean light.kitchen.

The Zigbee mesh lesson

Zigbee is a mesh: mains-powered devices (bulbs, plugs) route for battery devices (sensors). When I moved the coordinator, the mesh had to rebuild. For a day, the far-corner sensors were flaky until the routing tables settled and the bulbs in between started repeating. Patience, not panic — the mesh heals itself if you give it mains-powered routers to lean on.

A Zigbee mesh rooted at the ConBee coordinator on the left. Mains-powered devices — bulbs and a plug — are drawn as filled nodes forming a routing backbone; battery sensors are hollow nodes out at the edges. Links run coordinator to routers to leaves, and a highlighted green dashed path traces a far sensor's data hopping router-to-router back to the coordinator. A caption notes the sensor's data hops router-to-router home, so give the mesh mains-powered devices to lean on.

Where this leaves the architecture

  • Zigbee: ConBee + deCONZ, local. ✓
  • Z-Wave: still on the SmartThings hub. Next migration — a Z-Wave USB stick (Aeotec Z-Stick) is the obvious move, same pattern.
  • Hue: some bulbs on the Hue Bridge (for the nice scenes + local API), some moved straight to deCONZ. Still deciding whether the Bridge earns its place.
  • Logic: Home Assistant + Node-RED + MQTT, local. ✓

The house is now ~80% server-independent. The SmartThings hub's remaining job is Z-Wave, and its days are numbered.

What I'd tell past-me

  • The ConBee is the single highest-leverage $40 in the local-first journey. Do it before anything else.
  • Re-pairing is a whole evening. Block the time, do it in one pass, fix entity IDs after.
  • deCONZ vs ZHA vs Zigbee2MQTT — there are three ways to run a local Zigbee coordinator and I picked deCONZ because the ConBee shipped with it. The others are worth a comparison someday. (Deferred — like everything, to whenever the day job lets up.)

What's next

Z-Wave off the hub. And eventually a real comparison of the Zigbee stacks now that I've committed to local coordinators. The year's nearly out — a review is due, and it's been a quiet one.

Keep reading

shares tags: #smart-home · #zigbee
tools
First Home Assistant install — YAML and local-first
Jul 23
tools
MQTT as the house's nervous system — one broker, every device
Sep 16
tools
Picking the Zigbee stack — Zigbee2MQTT vs deCONZ vs ZHA
Aug 15