A house that fixes itself before it pages me.
91 automations in production, organised around three principles: shift every flexible load to the cheapest half-hour of the day, never let a single sensor failure cascade, and only notify a human when a human is actually needed.
How it hangs together
Home Assistant is the control plane. Everything else is a feed into it or an actuator out of it — and every external dependency has a watchdog.
Data in
Victron VenusOS over MQTT streams battery telemetry — pack voltage, per-cell min/max, state of charge, load — from the battery shed. Octopus Energy integration supplies half-hourly Agile import pricing, piped into the Target Timeframes integration to compute optimal charge windows. Power-monitoring smart plugs on every major appliance turn raw wattage into state: the system knows the kettle has boiled, the washing machine has run, and the air fryer is on — without any of those appliances being "smart".
Decisions out
Agile pricing drives the 40 A battery charger, dishwasher, dehumidifiers and airers into the cheapest windows automatically. When the rate goes negative, every flexible load in the house switches on at once — being paid to consume. Presence from phone trackers arms cameras and security scenes when the last person leaves, and stands them down on arrival.
Design decision: watchdogs over uptime hopes
The failure mode that matters isn't a light not turning on — it's the battery telemetry going quiet while automations keep acting on stale data. So the Victron feed gets a 30-second MQTT keep-alive, and two independent watchdogs power-cycle the VenusOS Pi through a smart plug if the battery load sensor goes stale or unavailable for five minutes. The router gets the same treatment when the WAN drops for one minute. Trade-off: a hard power-cycle is blunt, but it's autonomous — and it turns a 2 a.m. outage into a log entry instead of an incident.
Design decision: tiered battery protection
Battery protection is layered so no single automation is a point of failure: notify at 3.1 V cell voltage or 15% state of charge; force-charge from the grid at 2.9 V per cell, or below 10% when solar can't cover the deficit — recovering to 30% before handing control back to tariff-optimised charging. The BMS remains the final hardware backstop; the automation tiers exist so it's never needed.
AI where it earns its place
Camera motion events are summarised by a vision LLM into one-line notifications — who or what moved, not "motion detected". And the HA configuration itself syncs into a Claude workspace every 15 minutes, with a separate dev area and a manual deploy step back into the live config: version-controlled, AI-assisted config management with a human gate on production. LLM VisionClaude workflow
Operations view
Six dashboards — Controls, Power, Solar, TightWatt, Cameras and a personal view — built for glanceability: state at the top, controls in the middle, live graphs below.
Automations worth stealing
Appliance state from power draw
Kettle >1500 W sets a "boiled" helper; if nobody enters the kitchen within three minutes, the phone gets a nudge. Same pattern infers washing-machine and air-fryer state. Dumb appliances, smart house.
Negative-price harvesting
When Agile goes negative, all flexible loads switch on in one action — charger, dehumidifiers, airers — and switch back off the moment the rate turns positive.
Security that resets itself
Red-alert lighting scenes trigger on person detection while the house is empty — and automatically stand down and restore normal motion lighting when a known phone arrives home.
Everything degrades gracefully
Motion lighting has manual-override modes with a nightly reset, so a party never fights the automation — and the automation always wins the morning after.