Most writing about home automation shows you what to build. This site is about what happens afterwards, which is the part nobody puts on the box: the years in which the system runs long enough to fail in ways no tutorial has heard of, and you slowly realise that most of what you called a safety net was optimism with a YAML file.
There are 177 automations here, across two homes in two countries, built and broken over several years. That number will be wrong by the time you finish this sentence. Behind them sit roughly 47,400 lines of YAML, Python and dashboard JSON, all home-grown, recounted at every build of this site, because a hand-maintained figure would already be a small lie and we have enough of those in the logs.
What follows is arranged the way a decent bar serves things: the ideas first, because they are pleasant, and then the lessons, which is the polite word for everything that went wrong so that it need not go wrong for you. Nothing here requires you to admire us. Most of it requires you to laugh at us, briefly, and then check your own configuration.
Start here
Two pages set up everything else: what the system is made of, and how the pieces fit together. And if you only take four lessons away, take the watchman, sensors that fail healthy, edge triggers and the confession; they are filed under lessons, and they are the foundations.
What the hardware actually is
The real bill of materials with verdicts: both meshes photographed, the coordinator that throws fatal errors on two separate units, why IKEA quietly holds the network up, and what I wouldn’t buy again.
hardwarezigbeethreadArchitecture: the shape of the whole thing
Layers, protocol trade-offs, and where the seams always end up. The map that explains why the rest of the site keeps circling back to the same few boundaries.
architectureEveryday life
The parts you notice every day. Or rather, the parts you only notice once they stop.
Arriving, leaving, who else is home
Pre-cooling from live drive time, with the guard that stops it firing when you are simply parked across town. Disarming without leaving a gap. Inferring that somebody else is in.
presencearrivalComfort you did not ask for
A fan governed by the temperature at the pillow. Suggesting a window instead of a compressor, and the measurement that tells you when that advice is wrong.
comfortsleepHow the house talks to you
A briefing that appears when you switch the television on, not at 07:00. Notifications with a button. A system that hands you its own conventions at the moment you need them.
notificationsuxThe audio blob: seven protocols, one couch
A song crosses the cloud, the LAN, Zigbee, Bluetooth, an eARC handshake with a 2010 television and an infrared link to a 2008 projector whose remote no longer exists. Includes a remote resurrected from its own specification.
audioprotocolsIRA face on the wall
The house spirit gets a small touch display: fifty faces juggled through two flash slots on a board with no memory to speak of, colours verified by screenshot, and a backlight that follows the light in the room instead of the clock.
house spiritdisplayhardwareAppliances and upkeep
Metering an appliance that has no meter. Latching values the API clears. Turning consumables into one shopping list instead of five interruptions.
applianceschoresWhen to open a window
Relative humidity can’t answer this, and the sensor everybody owns gives the wrong answer with total confidence. What to compute instead, and why the wind threshold is lower for a tilted window than a wide-open one.
aircomfortThe automations that must never be wrong
Six rules for the handful that cut power and gate alarms: which way the safe default points, why you never gate on a mirror, and why an automatic remedy needs a list of things it may not touch.
safetyIdeas worth stealing
The automation that is not useful
A home with a mood, shown as colour on a lamp. Smoothed so it has inertia, with a memory of when things last happened. Entirely unjustifiable, and nobody wants it removed.
ambientdelightListening to a washing machine
One full cycle captured at the router: one broker session, mutual TLS with a per-device key, and a redirect test that failed for the oldest reason in networking.
protocolscaptureTLSDetecting things you never bought a sensor for
Cooking, from an air sensor. Telling two indoor sources apart because they move opposite pollutants. Activity in a room from the slope of a CO₂ curve. Sleep from the whole home going quiet. A sensor that is online and completely stuck.
inferencecookingairHow calm was the night
A sleep score from the house itself: toilet trips, radar flips, CO₂, heat, hall light. The wearable testifies only when it was there. Bad night, sleepy spirit.
sleepsensorsscoringNowcasts, not forecasts
Lightning that is approaching rather than merely near. Rain in the next fifteen minutes. Indoor versus outdoor air deciding whether to open or shut. Confirming that the ventilation actually happened.
weatherstormsventilationClosing the loop on a one-way remote
An infrared air conditioner never answers. A tilt sensor on its louver does: a verified shutdown with one retry, a start that refuses to toggle a running unit, and an assumption that corrects itself and says so.
climatesensorsIRSystems that repair themselves
The stuck HDMI audio handshake that fixes itself. Routes a router forgets on every reboot. A circuit breaker that disables a runaway automation before it fills the disk.
recoveryself-protectionAutomations that do not fight
The alarm takes the lights and gives them back. Colour alerts stay quiet while the siren runs, though not for the whole time you are away. Suppress the loud path, keep a quiet one.
prioritylightsalarmA system that reports on itself
An alarm message carrying the evidence a person would have gathered. A nightly review of twenty-four hours of behaviour, looking for anomalies, waste, and things that should have fired and did not.
reportingreviewThe night shift is a language model
Field notes on the AI caretaker: unoffendable, diligent, and wrong in instructive ways. Includes the machinery that protects the house from the enthusiasm of its own staff.
aireportingThe bank installed a sensor in my wallet
Card payments as a telemetry stream: captured twice on purpose, watched for silence, and treated as hostile text all the way to the screen.
moneydataCalendars, read-only and distrusted
Secret iCal instead of OAuth, an integration that polls once a day, trip routes rebuilt from hotels because titles lie, and a reminder that is not an appointment.
calendartravelparsingPredicting wear instead of reacting
Batteries forecast into one shopping list. Limescale visible in energy-per-cycle months early. The washing-machine reminder that stops the drum smelling.
maintenancetrendsMeasure the thing that matters
Dew point instead of humidity. Power factor instead of watts. And a row of smart plugs turned into an instrument that can find a bad circuit before it gets hot.
physicselectricalA spirit that gets tired of itself
A priority ladder stuck on two moods for 71 percent of a day. Fatigue computed from its own history fixed it; then it learned the hour, the way to the toilet, and how to make a remark.
house spiritrotationnightLessons, mostly learned the hard way
Nobody is watching the watchman
Every alert path (push, mail, chat bot) runs inside the thing it reports on. When that dies, they all go quiet together and nobody hears about it. Invert it: alarm on the absence of a signal.
monitoringEdge triggers lie to you
A pending timer lives in memory, and memory does not survive the restart you perform during the incident it was meant to catch.
triggersSensors that fail “healthy”
A default value in a guard position turns missing data into a confident wrong answer. The most dangerous sensor is the one that never admits it does not know.
safetyTwo sources, and their disagreement
Redundant capture is easy; noticing that a path went quiet is not. And when two sources disagree, that disagreement is information. Averaging it away throws the information out.
dataAlerts you will still trust in a year
Thresholds from measurements, not feelings. Quiet hours. Cooldowns. And letting the automatic repair finish before paging anyone.
notificationsDo not try this at home
The logger that logged its own logging. The command that blinds every alarm you own. Sensors that freeze at “healthy”. A television that needs the amplifier switched off. Mechanisms included.
war storiesDo not try this at home: part two
The one-liner that empties the file it is reading, a guard that matched its own comment, and the day two independent sources were both confidently wrong at once.
war storiesThree I have not seen anywhere else
The favourites, re-judged on the only axis that matters, originality: a house with a mood, a life sensed without buying sensors for it, money as hostile telemetry. The old champions keep a shelf, wiring map included.
favouritesTen readers, one afternoon
Ten independent read-only reviewers, one box, two hours. Frozen sensors that were an API artefact, a zombie detector blind since July, a forecast that never expired, and a reminder that could not fire. Plus the readers' own mistakes.
reviewwatchdogsmethodWhen going to bed looks like exercise
Two bodies under a blanket have the same signature as a workout, except in one dimension the cheap signal cannot fake: how long it lasts.
detectionfalse positiveCO₂Verifying the wrong thing
A worked example with timestamps: the check passed, the safety automation started the air conditioner it was written to stop, and the warning against doing this was already published on this site.
post-mortemA field guide to specific traps
Zombie containers, self-feeding log loops, frozen polled sensors, config that validates and does nothing, and encoding mismatches that fail in total silence.
debuggingThe one idea underneath all of them
An automation that fails loudly is a nuisance. An automation that fails silently is worse than never having built it, because you have arranged your life around a promise nobody is keeping and nobody has mentioned.
Nearly every page here is a variation on making failure visible: refusing to emit a number when there is no data, checking outcomes rather than configuration, and keeping at least one observer outside the box it is observing.