Get in touch

Zigbee mesh not meshing?

Most of the home forms one connected mesh — the hub, bulb, plug and sensor all relaying for each other. One switch, though, won't pass messages along (that crossed-out hop) — so the sensor stranded out in the corner has nothing nearby to lean on, and drops offline.

One of my sensors had started ghosting me. Nothing dramatic — just a little offline tag that popped up from time to time, then cleared itself before I could do anything about it. That’s the kind of flake that’s easy to ignore right up until you can’t unsee it.

But hang on — Zigbee is a mesh network, isn’t it? How does a device end up with a bad connection when there’s another one sitting barely two metres away? The whole promise of a mesh is that gadgets pass messages along for each other — a weak one just hops through a strong neighbour. And I had a wall switch right there. Surely the little sensor was leaning on it. That’s the entire point, isn’t it?

Reader, it was not leaning on anything.

“Mesh” is doing a lot of work in that sentence

Here’s the picture I’d bought: every gadget in the house holding hands, my messages flowing politely to whichever neighbour was closest. Lovely. Also not quite how it works.

The catch is that not every device is a relay. Zigbee quietly splits your gadgets into two camps. Routers are the mains-powered ones — plugs, bulbs, wired switches — and they repeat traffic for everyone else; they are the mesh. End devices are the battery-powered ones — sensors, buttons, door contacts — and they relay for nobody. They spend most of their life asleep to save the battery, and a sleeping radio can’t forward anyone else’s mail.

Which means the mesh isn’t “all my devices.” It’s only the mains-powered ones. My poor sensor was an end device, hunting for a router that would take it in.

A router (mains-powered) stays awake and passes the message straight through — it is the mesh. An end device (battery) sleeps to save power: the message reaches it, but the link onward is broken. It relays for no one.

The wall switch that was only pretending

This is the part that actually got me.

That switch two metres away was on mains power — so it should be a router, a relay, a load-bearing wall of the network. It wasn’t. The twist was in the wiring: no neutral. Loads of switches, especially retrofits into old backboxes, have no neutral wire to work with, so they sip a trickle of current through the bulb just to keep themselves alive.

A router’s real job is to keep its radio awake around the clock, listening for everyone else’s messages so it can pass them on. That listening is the whole point — and it’s what costs the power. A switch sipping a trickle through the bulb simply can’t afford it, so the firmware does the only thing it can: it lets the switch sleep — exactly like a battery sensor. Same result, different reason: the sensor sleeps to spare its battery; the switch sleeps because it hasn’t the power to stay awake. Either way you get an end device that relays for no one. It looks like a pillar of the mesh. It’s a leaf. My sensor’s nearest “router” was, it turned out, a fellow passenger — both of them strays with no one to relay through.

You can see it — you just can’t boss it

My next move was to go hunting for the optimise my network button. There’s always a button.

There wasn’t. There’s a signal-strength readout — genuinely handy, it’ll tell you how solid each device’s link is — but nothing that lets you say “you there, route through that one.” And it turns out that’s not some vendor stinginess; it’s Zigbee itself. You don’t get to hand a device its parent. The network picks for you, at the moment a device first joins, based on whoever sounds clearest right then — and then it clings to that choice. Pair a sensor next to the hub, walk it to the far bedroom, and it’ll happily keep yelling back across the flat at the hub instead of turning to the router sitting right beside it. “Online,” technically. Optimal, not for a second.

And the famous self-healing? Real, but lazy. It promises a path exists, not that it’s a good one. The romance of a network that silently reorganises itself around trouble ran straight into a power budget and a join table.

The least clever fix I’ve ever loved

In the end the fix wasn’t software. It was a three-dollar smart plug.

Drop a real router — mains-powered, with an actual neutral — near the dead spot, then re-pair the flaky device (or just power-cycle it) so it re-homes onto the better path. The plug doesn’t do anything. It controls nothing, automates nothing, sits in a corner switched on forever. Its entire job is to stand there and relay. The dumbest device in the house quietly fixed the cleverest-sounding problem in it.

Before: the device strains on a weak link straight to a distant hub (the faded line). After: drop one mains-powered plug in the dead zone and re-pair the device — now it hops hub → plug → sensor on a strong link, and it's back online. The dumbest device in the house, quietly carrying the rest.

What I took away

The word “mesh” had sold me a fantasy — every device holding hands, everything flowing to whoever’s nearest. The reality is more honest and, weirdly, more fun to know: a mesh is only as strong as its routers; half the things you assumed were routers might be leaves in disguise; and the whole graceful, self-healing idea bottoms out in radio waves and house wiring. The slickest automation I own still hinges on whether some electrician bothered to run a neutral to that backbox a decade ago.

I don’t find that deflating. I find it the good kind of humbling — a reminder that “smart” is a thin, lovely coat of paint on top of very physical things, and that knowing what’s under it is the whole difference between fighting your house and actually understanding it.

If you’ve got a sensor that ghosts you, or you fancy arguing about whether your switches are secretly end devices, I’m always up for it. Say hi.