Category
Home automation you still control in five years
The hub choice is easy and almost nobody gets it wrong. The install method underneath it is hard, permanent in practice, and picked badly by most people who follow a tutorial.
The install method is the decision, not the hub#
Home Assistant is the hub. Nobody argues about that any more, and choosing it takes ten seconds. The consequential decision is how you install it, and the wrong answer is the one that sounds simpler.
Exactly two methods are supported. Core, a Python venv, and Supervised, Supervisor on your own Debian, were deprecated in May 2025 and lost support at release 2025.12, along with i386, armhf and armv7 builds. What is left is HA OS, an appliance image, and Container, one image on your Docker host. Only HA OS gets Apps (the name for Add-ons since 2026.2), one-click updates and Supervisor-managed backups. Container has no Apps panel at all, which means the integrations whose turnkey path is app-driven, Thread and Z-Wave in particular, become containers you run and upgrade by hand.
The second axis is local versus cloud, and it is why this category exists. An integration that speaks directly to a device over Zigbee, Matter or a LAN API keeps working when the vendor's servers are turned off. A cloud integration is a business decision someone else gets to make, and they have made it before.
The default, and where it is wrong#
Run HA OS on a dedicated machine: an N100 mini PC, a Green, or a Pi 5 with the documented 2 GB and 2 vCPU. Pair it with Zigbee2MQTT on a CC2652 or EmberZNet coordinator, and add ESPHome when you want a sensor nobody sells. That combination idles around 600 MB, reaches roughly 1600 MB in ordinary use, and costs you about an hour a month, because a monthly release with a breaking changes list is the actual price of admission.
Two exceptions worth naming before you commit. You already run a Docker host: take the Container image with --network=host, because without it mDNS and DHCP discovery find almost nothing, and accept that Mosquitto, Zigbee2MQTT and any border router are now yours. Cameras are the whole requirement: then Frigate is the product and the hub is optional. Size that decision on storage, not on software: a 4 Mbit/s camera recording continuously is about 43 GB a day, so six of them for a week is roughly 1.8 TB.
When YAML automations stop fitting in your head, Node-RED is the escape hatch, at 110 MB and one caveat worth knowing on day one: set credentialSecret in settings.js yourself, or your MQTT passwords and API tokens are encrypted with a key hidden in .config.runtime.json that your backup probably misses.
What actually goes wrong#
- Backups without
.storage/. The hidden directory holds config entries, the device and entity registries, users and refresh tokens. Restore without it and you re-add every integration by hand. /dev/ttyUSB0in the compose file. Device numbering changes across reboots. Use--device=/dev/serial/by-id/usb-...for every radio, on the hub and on Zigbee2MQTT.- A Zigbee stick in a USB 3 port. It sits in a wall of 2.4 GHz noise, range collapses to a few meters, and you blame the mesh. One meter USB 2.0 extension, away from the rack.
- Default channel 11. It overlaps Wi-Fi channel 1. Use 15, 20 or 25. Changing it later can force re-pairing on devices that miss the announcement.
- Treating
network_keyandpan_idas config. They are unrecoverable. Change either and every battery sensor needs a physical reset and a re-pair. - Losing ESPHome's
secrets.yaml. It holds the API encryption key and OTA password for every flashed device. Without it, a device in your ceiling is only reachable with a ladder and a USB cable. - Upgrading the fleet in the wrong order. ESPHome 2026.1 dropped MD5 OTA authentication for SHA-256, so upgrade the machine that builds firmware first, devices second.
Read next#
Size the box in Choosing home server hardware and check the whole stack against Stack planner before you buy. Backups that actually restore covers the .storage/ problem properly, and An update strategy that does not lose data is where the monthly breaking-change cadence gets a workflow instead of a hope. If you are arriving from a cloud hub, Replacing SmartThings and Replacing Ring and Nest cameras are the migration paths. For the detector and transcode hardware question, GPUs, transcoding and local AI has the numbers.
Every home automation tool we profile#
Sorted by operational load, lightest commitment first. Every row links to a full profile with the resource numbers, the upgrade traps and the restore path.
| Tool | Ops load | Idle RAM | Licence | Identity | Backup shape |
|---|---|---|---|---|---|
| ESPHome | 2, Light | 150 MB | MIT (Python tooling) and GPL-3.0 (C++ device runtime) | Auth proxy only | File copy |
| Node-RED | 2, Light | 110 MB | Apache-2.0 | OIDC via plugin | File copy |
| Zigbee2MQTT | 2, Light | 90 MB | GPL-3.0 | Local accounts only | File copy |
| Frigate | 3, Moderate | 700 MB | MIT | Trusted proxy header | SQLite backup |
| Home Assistant | 4, Heavy | 600 MB | Apache-2.0 | OIDC via plugin | SQLite backup |
Profiles#
ESPHome
Turns YAML into ESP32 firmware and gives Home Assistant a local, encrypted device link
ops 2/5 · 110 MBNode-RED
Browser-based flow editor for wiring devices, APIs and automations together
ops 2/5 · 90 MBZigbee2MQTT
Bridges a USB Zigbee radio to MQTT so your sensors stop needing vendor hubs
ops 3/5 · 700 MBFrigate
Local NVR that runs real object detection on your camera streams, with no cloud account
ops 4/5 · 600 MBHome Assistant
Local-first automation hub that speaks nearly every smart home protocol without a vendor cloud
Leaving a cloud service in this category#
- Replace Ring or Nest cameras with a local NVRCancelling the subscription means buying the disk, sizing the detector and owning the false-alarm tuning yourself.
- Replace SmartThings or a cloud smart home hubThe hub is the easy part. The radios need a coordinator, and some of your devices are simply not coming.
Guides for this category#
- GPUs, transcoding and local AI: what hardware you actually needQuick Sync handles your 4K streams for 10 W. A model that fits in VRAM is a different purchase entirely.
Questions#
Should I install Home Assistant OS or Home Assistant Container?
Two methods are supported. Core (a Python venv) and Supervised were deprecated in May 2025 and lost support at release 2025.12, along with i386, armhf and armv7 builds. Pick HA OS if the machine can be dedicated to it: you get Apps (renamed from Add-ons in 2026.2), one-click updates and Supervisor-managed backups, and Thread and Z-Wave have a turnkey path. Pick Container only if you already run a Docker host and accept that there is no Apps panel, so Mosquitto, Zigbee2MQTT and the border router become containers you run and upgrade yourself.
How much RAM does Home Assistant need?
The docs ask for 2 GB and 2 vCPU when you build a VM. In practice the core Python process sits near 400 MB, a whole HA OS install idles around 600 MB, and 1600 MB is normal once Mosquitto, Zigbee2MQTT and ESPHome are running beside it. Add Frigate and the arithmetic changes class: it idles near 700 MB and reaches 2500 MB with a few cameras, because there are two ffmpeg processes per camera plus the detector. A 4 GB box is comfortable for a hub. A 4 GB box is not comfortable for a hub plus an NVR.
Why does my Home Assistant database keep growing?
The recorder writes every state change to home-assistant_v2.db and keeps 10 days by default. A chatty install adds 20 to 150 MB a day, which is both a multi-GB file and a constant stream of small writes that wears out an SD card. Fix it with exclude filters on power meters and device trackers, raise commit_interval to 30 seconds and lower purge_keep_days. Moving to MariaDB relocates the problem rather than solving it. Losing the database costs you history graphs and nothing else, so you can exclude it from backups.
Do I need a Zigbee coordinator, or are Wi-Fi devices fine?
Wi-Fi devices work and cost you nothing extra until you own thirty of them and your access point starts complaining. A Zigbee mesh with a CC2652 or EmberZNet coordinator running Zigbee2MQTT is the cheaper long-run answer for sensors, and only those two adapter families support the coordinator backup that lets you swap sticks without re-pairing. Two setup details decide whether it works: put the stick on a one meter USB 2.0 extension away from USB 3 ports and SSDs, and move off default channel 11, which sits underneath Wi-Fi channel 1.
Does Frigate still need a Coral TPU?
The Frigate docs no longer recommend a Coral for new installs outside low-power builds. A modern Intel iGPU on OpenVINO runs inference in roughly 4 to 15 ms against the Coral's 10 ms, and unlike the Coral it also accelerates video decode, which is where your CPU actually goes. Two settings matter more than the accelerator: raise shm_size above Docker's 64 MB default using the documented per-camera formula, and point the detect role at a 640x640 substream rather than the 4K main stream. That single change often turns 90 percent CPU into 15.
What is the ongoing cost of running Home Assistant?
Roughly an hour a month, and it is not optional. Core ships a release every month with its own breaking changes section, HACS custom components frequently lag by days or weeks, and one component that fails to load can stop the instance from starting. Backups cannot be restored into an older core version, so rolling back means rolling the container tag back too. Add ESPHome and every version bump means recompiling and re-flashing every device you own, which is why shared YAML packages are worth setting up early.
Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.