Somebody Finally Made Firmware Updates Boring. It Wasn’t Home Assistant.

There is a drawer in my hallway cabinet that I think of as the museum of firmware I have never touched. A motion sensor from 2021. Two smart plugs that came in a three-pack. A door contact that has reported the same battery percentage for eight months. Every one of them is running whatever software shipped on it, because updating them was never quite annoying enough to fix and never quite easy enough to just do.

So when Homey announced on 27 August that its app can now push over-the-air firmware updates to Matter, Zigbee and Z-Wave devices from one screen, my first reaction was not “nice feature”. It was mild irritation that a closed-ish commercial hub got there before the platform I actually run.

What Homey actually shipped

The feature is called Device Updates, and it landed in Homey app version 9.10.0 for Homey Cloud, Homey Pro (2023–2026), Homey Pro mini and the Homey Self-Hosted Server. You open Settings, tap Device Updates, and you get a list of pending firmware for the things in your house. Matter devices pull their images through the Connectivity Standards Alliance’s Distributed Compliance Ledger; Zigbee and Z-Wave devices get theirs through the manufacturer’s app inside Homey. Athom lists IKEA, Aeotec, Zooz, frient and ThirdReality as brands already covered, with more promised.

Athom’s CEO put the reasoning plainly in Android Authority’s write-up: device firmware rarely gets updated because the process is cumbersome. That is not a marketing insight. That is just true, and it is true in my house.

Home Assistant is not missing this. It is uneven.

Before anyone writes an angry comment: Home Assistant can update device firmware, and has been able to for years. The problem is that “can” means something different for every radio in the box.

Z-Wave is the most mature. Z-Wave JS exposed firmware updates in the UI back in the 2022.7 era. Devices that implement the Firmware Update Metadata command class can show up under Settings → Updates and be updated semi-automatically; everything else needs you to find the vendor’s file, upload it by hand, and not touch anything for a while.

Zigbee has quietly improved. ZHA now ships with an official, centrally maintained OTA image index rather than expecting you to hand-curate a firmware directory in configuration.yaml like it’s 2019. Zigbee2MQTT has had per-device OTA for ages. Both work. Both are also mesh operations that take roughly ten minutes per device and fail cheerfully if the device sits on a weak link — which, in my experience, is exactly where the interesting old devices live.

Matter is the one that should be simplest and isn’t. Home Assistant creates an update entity for every Matter device and pulls images from the same DCL that Homey is using. But OTA is an optional feature in the Matter spec, so plenty of devices simply don’t implement it, and updates are not supported at all if your Thread border router is an Apple device. There are also open reports of the newer matter.js-based server downloading an update successfully while the update entity sits there reporting nothing available.

A hand holding a phone next to a smart camera, plug, bulb and sensors
One app for all the firmware is a genuinely nice idea. Photo via Pexels.

So the honest summary is: Home Assistant has three good firmware update mechanisms and no single place that says “here is everything in your house that is behind, and here is what changed.” Homey has one place. That is the whole difference, and it is a bigger difference than it sounds.

Why nobody wants to build this

Firmware distribution is the least glamorous problem in this hobby. There is no demo. There is no screenshot that makes anyone say “oh, nice.” What there is, instead, is a long tail of vendors publishing images in a hundred inconsistent places, half of them behind a phone app, some of them behind a Windows-only flashing tool, and a few of them nowhere at all.

And the failure mode is physical. A bad Home Assistant update is a restore from backup — I wiped my box on purpose earlier this month specifically to prove that. A bad firmware flash on an in-wall relay is a screwdriver, a circuit breaker, and an evening. That asymmetry is why I click “update” on my core install without much thought and hesitate for weeks over a light switch.

What I actually do about it

My current rules, which are not sophisticated but have kept me out of trouble:

  • Backup first, every time, even for a battery sensor. It costs thirty seconds.
  • Read the changelog before flashing. If a vendor can’t be bothered to publish one, I can’t be bothered to install it.
  • Security fixes and named bug fixes go on. Vague “performance improvements” wait until somebody else has run them for a month.
  • One device at a time, never during the evening, never on a device I need working tomorrow morning.
  • Mains-powered Zigbee routers first. They update reliably and they make the mesh better for everything downstream.

The one piece of Home Assistant’s design I would not trade for Homey’s button: those update entities are real entities. I can put them in a template sensor, count how many are pending, and have the dashboard tell me. A commercial hub gives you a list; Home Assistant gives you something you can automate around. That is genuinely better — for maybe five percent of people, of whom I am regrettably one.

Credit where it’s due

I write a lot here about preferring local, open, no-cloud plumbing, and I stand by it. But local-first shouldn’t mean pretending the closed platforms never do anything right. Homey took an open standard’s infrastructure — the CSA’s compliance ledger, which exists precisely so anyone can look up a device’s official firmware — and wrapped it in a screen that a normal person will actually open. The hard part wasn’t the protocol. The hard part was deciding that unglamorous maintenance work was worth shipping.

Home Assistant has all the pieces for the same thing. ZHA’s image index, Z-Wave JS’s update service, the Matter update entities, and a Settings → Updates page that already aggregates core, add-ons and supervisor. What’s missing is the decision to treat “your devices are behind” as a first-class piece of information rather than something scattered across three integrations.

In the meantime, I’m going to open that hallway drawer. If any of it still pairs, it’s getting flashed.

Leave a Reply

Your email address will not be published. Required fields are marked *