Ripping out vendor clouds — going local-first on Home Assistant
Three years on Home Assistant. Tonight finished a weekend-long audit + migration: every smart-home device that depended on a vendor cloud got either replaced with a local-protocol device or migrated to a local integration. The house runs on the LAN.
The trigger: a March thunderstorm took out the cable internet for six hours during the work-from-home blur. Voice assistants died. Ring doorbell died. The cloud-mediated Wemo plug for the coffee maker died. Lutron Caseta, Hue, Z-Wave, Zigbee2MQTT — all kept running.
That was the moment.
What got ripped out
- SmartThings hub: gone. Its Zigbee devices (the kit's motion sensor and a few Aqara pieces it had adopted) moved to Zigbee2MQTT; its Z-Wave devices (the Smart Outlet, the Multipurpose contact sensors) re-included onto my own Z-Stick under HA's Z-Wave integration. Hub is in the spare-parts drawer.
- Wemo plugs (3 remaining): replaced with Zooz ZEN15 Z-Wave plugs ($30 each). Local control. Energy monitoring still works.
- Ring doorbell: replaced with a Reolink doorbell camera (PoE, RTSP, hooked into Frigate-via-Coral). Ring cloud account deleted.
- Nest thermostat (2nd gen): kept the hardware but switched the HA integration to the unofficial homeassistant-nest local integration via the local API. Still phones home to Google for service but HA reads/writes locally.
- LIFX bulbs (1): replaced with a Hue Color bulb. WiFi-only bulbs are a category I'm done with.
- Lutron's cloud-mediated routines: rewritten as HA automations using Lutron's local LEAP API (which Lutron quietly enabled this year — bridge firmware 8.x).
What stays cloud-connected
- Apple Push Notification Service for the Companion App. APNS requires Apple's cloud by definition.
- Google for weather + calendar data in HA's sensor integrations.
- OAuth for one-off services (Spotify integration for music casting; Google Calendar for "is there a meeting now" sensors).
These are data-in integrations, not control-out. They can be down without breaking the house.
The Zigbee2MQTT migration
The Conbee II / deCONZ stack worked but Z2M's device support is broader and updates faster. Migration:
# Mosquitto add-on with auth mqtt: broker: core-mosquitto username: hassio password: !secret mqtt_password # Z2M as an HA add-on, running its own service # Pairing devices: # 1. Z2M UI → "Permit Join" → 60s window # 2. Aqara sensor: hold button 5s → joins network # 3. Z2M auto-detects the device + publishes MQTT discovery # 4. HA picks up via MQTT autodiscovery → entity created
Net result: same number of devices, faster reporting, the Z2M UI is significantly better than deCONZ's Phoscon. The breaking change cost: had to re-pair 14 Zigbee devices. Took 4 hours. Done.
The Z-Wave integration, and the rewrite on the horizon
Z-Wave is the one part of the stack I didn't finish this weekend, because the ground is moving under it. HA's current Z-Wave support is built on the aging OpenZWave 1.4 library, and everyone knows it's living on borrowed time — there's an OpenZWave 1.6 beta integration in flight, and further out, a from-scratch Z-Wave JS driver (Node.js-based) that the community keeps saying will be faster and support far more devices. I called the rewrite in my 2019 forecast; it's clearly coming, but it isn't a drop-in HA add-on yet.
So for now I'm staying on the existing Z-Wave integration with the Z-Stick where it is — the network lives on the stick's flash, independent of which driver talks to it, so whenever the JS-based path is actually ready I can swap the software without re-pairing 30 devices. I'm watching it closely; this is the migration I expect to do later this year or early next, not one I'm claiming today. Getting it wrong on a working Z-Wave mesh is how you spend a weekend re-including locks.
What "local-first" actually buys
After the migration, here's the failure-mode test results from a real internet outage two weeks ago (cable was out for 90 minutes):
| What works without internet | What doesn't |
|---|---|
| All lighting (Hue + Lutron + Zigbee bulbs) | Voice assistants (Alexa, Google Home) |
| All Z-Wave devices (sensors, switches, plugs, locks) | Push notifications (queued, fire on reconnect) |
| All Zigbee devices via Z2M | Spotify casting |
| HA dashboard on local network | Off-LAN access via Nabu Casa |
| Local automations (security, fans, lighting scenes) | Remote camera viewing on phone |
| Cameras + recording to NVR | (cloud-mediated portions) |
| iPad wall dashboards |
The "house works during internet outage" property is the part the pandemic-era reliability concerns made real for me.
The privacy bonus
Pre-migration, the smart home was producing detailed behavioral data shared with:
- Amazon (Echo voice queries)
- Google (Google Home queries, Nest data)
- Belkin (Wemo plug usage)
- Samsung (SmartThings device states)
- iRobot (Roomba run data + house mapping)
- Ring (doorbell video clips)
Post-migration, the cloud-shared data is:
- Amazon (voice queries — kept Echo for music + timers)
- Google (search queries via Google Home — only when used, not ambient)
- iRobot (Roomba run data — house map purged when I disabled cloud sync)
Most of the device telemetry stops at the LAN. Behavioral data that doesn't need to leave my house doesn't.
What I'm watching
- HA core moving to calendar-style versioning (a
YYYY.MMscheme instead of the long 0.x march). It's been discussed; I expect it to land within the year. - The Z-Wave 700-series entering retail. Will refresh sensors as 500-series batteries die.
- Project CHIP progress. Spec hasn't shipped; first dev preview supposedly later this year.
- Voice-on-device. Mycroft and Rhasspy are getting interesting. Local-only voice would close the last cloud loop.
The pandemic made the case for local. House operations don't depend on a working internet anymore.