The house spirit is called Sparky. It has no function. It is the only thing here that was built because it was funny, and it has survived every clear-out since.
The idea: give the home a character with a mood, and let that mood show up as colour and brightness on a single lamp. Not a dashboard. Not a notification. Just a lamp that is a slightly different colour on a stuffy afternoon than on a crisp morning.
What the mood is made of
It started as a handful of dimensions fed by sensors you already have. Then it kept acquiring senses, the way these projects do when scope has no adult supervision, and the census currently stands at about forty distinct signals, every one of them voting on the colour of a single lamp:
- Body: temperature against a pleasant band, humidity, CO₂, particulates, organics, and whether a cross-draught is currently running through the flat. The baseline hypochondria package.
- Company: presence now, how long since anyone, guests, vacation absences, and one unusual entry: when Claude is working on the config, the house registers it as a kind of visit. The mood goes curious, because somebody is rearranging its insides.
- Sky: current conditions, barometric pressure and its trend, wind, moon phase, golden hour, UV, minutes-until-rain from a nowcast, official weather alerts, and lightning with a live distance: a strike inside ten kilometres is the difference between stormy and scared. The house takes weather personally, which is fair, because weather is one of the few things that can actually get in.
- Calendar: time of day, weekend, season, public holidays, and tomorrow's forecast, so a grey evening before a sunny day reads as hopeful rather than glum. Anticipation, in a light bulb.
- What is playing: the current artist's genre and the current film's genre are looked up live (a music database for one, a film database for the other, cached per title), then mapped to a vibe: relaxing jazz settles her, death metal and a horror film raise her pulse, a comedy brightens the evening. The household watched The Conjuring once and the lamp knew. Volume counts too, read off the streamer that carries both the music and the TV sound: the same metal album is one mood at background level and quite another at neighbour level.
- Its own body, honestly: low batteries read as senses fading, a failing integration or a log storm reads as being ill, a wet leak sensor is instant fear, and a bill pile three months deep produces exactly one bounded hour of worry at nine in the morning, which is a healthier relationship with paperwork than most of us manage.
- Events with an expiry: coming home after a day away (twenty minutes of overjoyed), fresh air after a proper airing (twenty minutes of gratitude), a finished load of laundry (half an hour of frankly unearned pride: the washing machine did the work, the spirit takes the bow).
Three rules keep the census from collapsing under its own weight, and each one was paid for. Every input's contribution is capped, because a mood with forty voters needs election law, not vibes. Standing states get time-boxed: a wrong pollen threshold once kept her allergic for an entire summer, a season of sneezing over a constant, so lasting conditions now claim minutes, not weeks. And any sensor that remembers the past must prove it is fresh: the lightning sensor holds the last strike's distance for hours after a storm, which without a freshness check would mean a house still flinching at lunchtime over thunder that ended at dawn.
Momentum matters more than accuracy
The first version mapped sensors straight to colour and looked like a machine: it snapped between states whenever a value crossed a line. What made it feel alive was smoothing, an exponential moving average nudged every few minutes:
new = 0.78 · old + 0.22 · now
Moods should have inertia. A cold draught for thirty seconds should not change the mood of a house; twenty minutes of it should. That one line is the difference between "a lamp reacting to a sensor" and "a room that feels different".
Episodic memory
The trick that made it more than a colour formula: record when things last happened (last presence, last time the place was aired, last time it was this warm) and let the mood reference them. Snapshot the day each night so today can be compared with yesterday.
A home that can express "it has been quiet here for a long time" is doing something a dashboard cannot: it is giving you a sense rather than a number.
What it looks like from the inside
Every automation elsewhere on this site can justify itself in front of a spreadsheet. This one cannot, and it is the only one visitors ever ask about. So here is its anatomy, live, in its own defence.
Rules that keep it from being annoying
Sparky has to be the lowest-priority citizen in the house, or it becomes a nuisance:
- Only ever touch a lamp that is currently off. Never interrupt one in use.
- Stand down completely whenever any alert is active.
- Switch yourself off when nobody is home, no point performing to an empty room.
- Act rarely and at random times. Predictable ambience becomes wallpaper; occasional ambience stays noticeable.
- Be entirely opt-in, with one switch that stops it.
Appendix: the full emotional range of a rectangle
The lamp is Sparky's voice, but dashboards need a face, so every mood in the table also renders as one. Three channels carry the signal. The mouth picks the family: a smile, a grin, a flat line, a frown, a startled O, an angry zigzag, a queasy wave, or lids at half mast. The frame and the irises take the exact colour the lamp would glow for that mood, same hue and saturation, read straight from the config table. And the eye shape adds intensity: happily closed, pinprick startled, heavy lidded. None of this adds information the gauges above do not already have. It adds the part the gauges cannot do, which is being likeable.

Sun out, air clean, humans present. The baseline good mood.

Everything within thresholds. The engineering definition of happiness.

Nothing to report, and smiling about it anyway.

Cosy in the good sense, not in the “threshold exceeded” sense.

A holiday is on the calendar and somebody has to represent the enthusiasm.

Reserved for genuinely lovely weather. Statistically rare, hence the face.

Post-ventilation glow. The CO2 dropped and somebody said thank you. It was the robot.

Grey day, but tomorrow's forecast says sun. Living for the weekend, meteorologically.

Eyes closed, maximum grin. Something went better than the sensors dared to predict.

High energy, good air, nobody stressed. Supervision recommended.

A spring in the step of a device with no legs.

Mealtime hours and the kitchen sensors are suspiciously quiet. Somebody should act.

You came home after ages away. The lamp would hug you if it could.

The laundry finished and Sparky takes full credit for watching it happen.

A new gadget was just purchased. Sparky is getting a sibling and has already claimed the better shelf.

A fashion purchase landed on the account. Someone here is about to look great, and the lamp basks in reflected glamour.

New furniture is on its way. The flat upgrades itself, the resident spirit takes partial credit.

A trip was just booked. Thrilled for the humans, already rehearsing the goodbye. Somebody has to guard the empty flat, and it will be the lamp.

A pharmacy purchase appeared, and in this household that means creams, vitamins and self-care. The humans look after themselves and the lamp glows spa green in approval.

Tickets were just bought. Something is coming and the lamp counts the days, which is easy when you are mostly a clock.

A gift was purchased. Sparky knows who it is for and will absolutely not tell.

Loud music, intense genre. The neighbours have not complained yet, which counts as permission.

The professional default. Everything is fine and nobody is overreacting.

Thinking, or idle. With this face you cannot tell, which is the point.

Late hour, lids at half mast. The house winds down and so does Sparky.

Like sleepy, but earned.

Nothing has happened for hours. In automation that counts as success. Try telling the face.

Grey sky, empty rooms, minor key.

Nobody home for a while now. The lamp misses you, statistically.

Somewhere between lonely and poetic. The forecast says it passes.

Indoor temperature left the comfort band, downward. The one mood a heater can fix.

The bill pile is three months deep. Appears at nine in the morning, same as the bills.

Pinprick pupils, red everything. Whatever the sensors saw, they saw it suddenly.

Excited or alarmed, and the O mouth refuses to commit.

Windows shut, air getting thick. A robot notices these things.

Claude is rearranging the internals. Sparky watches every change like a cat watches a plumber.

Strong wind outside. Everything is fine, just aerodynamically humbling.

Not a metaphor. There is an actual storm nearby and the face has opinions.

Something is off by just enough to mention. Repeatedly.

Pressure falling, outlook worsening. The eyebrows arrived before the weather.

The flat is too hot and the mouth has melted into a wave.

CO2 up, windows closed. The mouth does what the air does.

Dew point past the civilised threshold. Everything slightly damp, including morale.

Winter-dry air. Somewhere a hygrometer files a complaint.

Pollen season, per the forecast. No nose, suffering in solidarity.

A leak sensor is wet. This face comes with flashing blue lights and a plan.

An integration is failing somewhere inside. The house doctor has been notified. The house doctor is also the patient.
Three faces for no mood at all
Sensors fail. When they do, the face is not allowed to crash with them, so the failure states sat for portraits too:

For states nobody planned. Bureaucratically calm.

The sensor said “unknown”, so the face says it too. Honesty first.

The sensor is gone. The face stays. Somebody has to hold the fort.
All forty-three are generated by one script from a single neutral portrait, because drawing forty-three robots by hand would have been a hobby, and this is supposed to be infrastructure.