A UPS on the smart-home server is the first thing everyone buys after their first bad outage. The XDA writer whose UPS still could not save their Home Assistant automations discovered what a lot of us have: a UPS by itself only buys minutes. Making sure your automations survive the outage is a separate problem, and it needs a small stack of apps around Home Assistant that a lot of setups skip. We tested seven that together turn a household outage from a mess into a mild inconvenience.
What to look for in a resilience stack
The value is not any one app. It is the way they compose. Look for these traits when picking components.
- Talks to your UPS over USB or SNMP without proprietary drivers
- Reports state to Home Assistant with events (
ups.on_battery), not just numeric sensors - Automations survive a cold restart of the whole server without manual re-enable
- A place to see what fired and what did not, days after the outage
- Firmware updates that do not require internet access at the moment they are needed
- A backup path for the Home Assistant config that a total power loss can not corrupt
Quick comparison
| App | Best for | Free plan | Standout feature |
|---|---|---|---|
| NUT | Networked UPS control across devices | Yes | One UPS, many clients |
| apcupsd | APC hardware without SNMP | Yes | Rock-solid on USB APC units |
| Node-RED | Complex outage automations | Yes | Visual flows that survive edits |
| ESPHome | DIY power monitoring nodes | Yes | Local-only firmware for sensors |
| InfluxDB | Long-term power history | Yes | Purpose-built time series storage |
| Grafana | Post-mortem dashboards | Yes | Best-of-breed panels for outage data |
| Watchtower | Container updates after recovery | Yes | Keeps stack current after a reboot |
The apps
1. NUT (Network UPS Tools) — best for a shared UPS
Network UPS Tools is the reference implementation for talking to a UPS over the network. One server runs the daemon against the physical UPS, and every other machine on the LAN (Home Assistant, the NAS, a router that can shed load) subscribes as a client. Home Assistant’s NUT integration surfaces battery percentage, load, and status as sensors, and, importantly, fires an event the second the UPS drops to battery.
Where it falls short: Configuration is textual and old-school. First-time setup on a Raspberry Pi takes a couple of hours to get right.
Platforms: Linux, macOS, FreeBSD. Runs in a container on any Home Assistant OS install.
Pricing: Free, GPL-2.0.
Download: networkupstools.org
Bottom line: Install this first. Every automation in the stack keys off its status events.
2. apcupsd — best for APC hardware over USB
apcupsd is a smaller daemon focused on APC UPS units on USB. It is easier to set up than NUT on a single-host install and integrates with Home Assistant via a lightweight sensor. Many APC Back-UPS models work reliably with it after years of Linux support.
Where it falls short: It only talks to APC. Cyberpower, Eaton, or Tripp Lite users should look at NUT.
Platforms: Linux, macOS, Windows. Docker images are widely available.
Pricing: Free, GPL-2.0.
Download: apcupsd.org
Bottom line: The right pick when the UPS is APC and the setup is a single host.
3. Node-RED — best for complex outage flows
Node-RED is what most Home Assistant power users reach for once “when X, then Y” is not enough. An outage flow might branch on battery percentage: at 50 percent, drop non-essential lights; at 25 percent, notify family members; at 10 percent, run hassio.shutdown. Visual flows are diff-friendly and survive reorganizing.
Where it falls short: Two ways to build the same automation (Home Assistant automations vs Node-RED) causes drift if a household has multiple editors.
Platforms: Add-on inside Home Assistant OS, or Docker on any host.
Pricing: Free, Apache 2.0.
Download: nodered.org
Bottom line: The right pick for outage automations with more than two branches.
4. ESPHome — best for DIY power monitoring
ESPHome builds firmware for cheap ESP32 boards that report to Home Assistant. A CT clamp on the mains, a smart plug with a Sonoff POWR3, or a battery voltage node all take about an hour of soldering. The result is local-only firmware that keeps reporting after a router restart.
Where it falls short: You are now the manufacturer. Firmware updates and battery swaps are yours.
Platforms: Firmware for ESP32 and ESP8266. Runs from a Home Assistant add-on.
Pricing: Free, GPL-3.0 and MIT parts.
Download: esphome.io
Bottom line: The right pick when you want power visibility beyond what the UPS reports.
5. InfluxDB — best storage for power history
InfluxDB stores the sensor stream from the UPS, the CT clamps, and Home Assistant itself. Long-term retention outlasts Home Assistant’s own recorder, and querying “the last six outages by duration” becomes a one-liner. Version 2.x is stable and mature enough for a household install.
Where it falls short: RAM footprint is meaningful; a Raspberry Pi feels it if the retention window is long.
Platforms: Docker on any host, native on Linux, macOS, Windows.
Pricing: Free open-source build. Managed cloud tiers start around $250 monthly.
Download: influxdata.com
Bottom line: The right pick when you want to see how outages have trended over a year.
6. Grafana — best dashboards for post-mortems
Grafana turns the InfluxDB stream into panels that make outages legible. A single dashboard showing battery percentage, load, outdoor temperature, and Home Assistant restart events tells you why a specific automation did not fire. It is the tool an electrician can read, which matters when the household argues about what happened.
Where it falls short: Editing dashboards well takes time. Learning enough Flux or PromQL is a project.
Platforms: Docker on any host, native builds for all major OSes.
Pricing: Free OSS build. Managed cloud tier has a free plan.
Download: grafana.com
Bottom line: Install it right after InfluxDB or the data is a lot less useful.
7. Watchtower — best for keeping the stack current after recovery
Watchtower watches the containers you pick and pulls updates on a schedule. It matters here because a stack that comes back from an outage on stale images is more likely to hit the exact bug someone patched last week. Scoped to Home Assistant’s supporting containers, it keeps the surrounding stack fresh without touching Home Assistant Core itself.
Where it falls short: Auto-updating anything mission critical is a risk in itself. Scope it carefully.
Platforms: Docker on Linux, Windows, macOS.
Pricing: Free, Apache 2.0.
Download: containrrr.dev/watchtower
Bottom line: The right pick for the supporting cast; leave Home Assistant Core to manual updates.
How to pick the right stack
- Everyone starts with a UPS daemon. NUT if there is more than one device on the UPS, apcupsd if the UPS is APC and only the server is on it.
- Add Node-RED once outage logic branches beyond a single condition.
- Layer InfluxDB and Grafana together to make outages legible after the fact.
- Add ESPHome for anything the UPS cannot see (branch circuits, individual appliances).
- Turn on Watchtower for the supporting containers so a post-outage stack is not a museum.
FAQ
Why is a UPS not enough to keep Home Assistant automations working? A UPS keeps the server on. If your router, switches, or Zigbee coordinator lose power at the same time, the automations reach nothing. Put the network on the UPS too, and make sure Home Assistant knows the network is up before acting.
Which UPS integration should I install first? Start with the Home Assistant NUT integration once NUT is running. It exposes both sensors and events, which is what you need for automations.
How do I test my outage automations without unplugging things? NUT and apcupsd both support a “simulate on battery” command. Run it and watch what fires.
Do I need a separate box for InfluxDB and Grafana? No. Both run comfortably next to Home Assistant on a Raspberry Pi 5 or a small mini PC. Retention windows are the main thing to tune.
Should I automatically shut down Home Assistant at low battery?
Yes, and make sure it happens before the OS panics. NUT’s shutdown script and Home Assistant’s hassio.host_shutdown service handle this cleanly.
What is the single most useful outage automation? A notification that includes battery percentage and estimated runtime, sent five seconds after the UPS reports “on battery.” It gives everyone in the house time to save open work.