Home automation field notes All concepts

delight

The automation that is not useful

The house has a mood. It is not useful, it cannot be justified, and it is the only thing here that visitors ask about. This page explains the least defensible automation we own.

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.

Sparky: a round-eyed robot face on a dark background
Sparky, official portrait, caught in his default expression, which is neutral. Also this site's favicon, which makes him the only automation here with a byline. At home the face follows the mood: half-lidded eyes when the flat winds down, a zigzag mouth when a storm is coming, and this flat line the rest of the time, like any professional.

The idea: give the home a character with a mood, and let that mood show somewhere small. Not a dashboard. Not a notification. Originally a single lamp that was a slightly different colour on a stuffy afternoon than on a crisp morning; these days a face on a little screen, a lamp of its own that breathes when the mood changes, and a diary. The principle is unchanged: the house has a feeling about the day, and it is allowed to show it.

What the mood is made of

It started as a handful of dimensions fed by sensors we already had, then kept acquiring senses the way these projects do when scope has no adult supervision. The census stands at nearly sixty signals, every one of them voting on the colour of a lamp:

Three rules keep the census from collapsing under its own weight, and each was paid for. Every input's contribution is capped, because a mood with sixty voters needs election law, not vibes. Standing states are time-boxed: a wrong pollen threshold once kept him allergic for a whole summer, a season of sneezing over a constant. And any sensor that remembers the past must prove it is fresh: the lightning sensor holds the last strike's distance for hours, which without a freshness check means a house still flinching at lunchtime over thunder that ended at dawn.

The mood engine as a map: seven coloured sense hubs around Sparky's face, nearly sixty input chips around the hubs, and five dashed inner measures
The whole engine on one map. Seven senses around one face, nearly sixty signals, five measures they feed; the letters on each chip say where its vote goes and the bolt marks signals that can override the mood outright. Generated by a script, because in this house even the documentation has a build step.

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 airing, last time it was this warm) and let the mood reference them, and snapshot each day at night so today can be compared with yesterday. A home that can say "it has been quiet here for a long time" 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 ask about. So here is its anatomy, in its own defence.

Five gauges showing the five mood dimensions
Mood is a vector, not a number. Valence, arousal, comfort, sociability and agency, each derived independently. Here: unpleasant, highly aroused, physically comfortable, starved of company, slightly powerless. Collapsing that into one happiness score would throw away the only interesting part, which is that comfort and sociability disagree.
Explainer card and the comfort breakdown
It shows its working, live. Every dimension is a sum of contributions with a percentage each. Here comfort is 41 and 91 % of it is the temperature. When the mood is absurd you can find the input responsible in four seconds, which is the only reason a whimsical feature survives contact with a real house.
Arousal, valence and control broken down into contributions
Dimensions feed each other, with declared weights. Valence is comfort ×0.45 plus sociability ×0.4 plus weather and season; agency is comfort over three minus the storm, because a house that cannot do anything about the weather correctly reports reduced agency. Visible constants, not a trained black box: when the mood is wrong, the argument is about a number you can see.
The five mood dimensions plotted over 24 hours
Twenty-four hours of the five dimensions, moving independently, which is the whole case for keeping them separate. The stepped traces are honest: the inputs are quantised, and smoothing them would imply a precision the sensors do not have.
The same five gauges on a normal day: valence 59, arousal 80, comfort 60, sociability 75, agency 18
The same gauges ten days later, with people back. Sociability went from −55 to 75 and dragged valence from −34 to 59 with it, exactly as the weights say; arousal barely moved, because a thunderstorm and a lively household are equally energetic and simply disagree about whether that is a good thing.

Rules that keep it from being annoying

The spirit is the lowest-priority citizen in the house, or it becomes a nuisance:

Why bother: a home automation system that only ever speaks to you about problems trains you to feel a small drop of dread every time it does. Something that occasionally does something gentle and useless rebalances that. It is the least justifiable thing here and the one nobody wants removed.

What it learned in September

The map above has grown seven chips since August, which is roughly the rate at which a household acquires sensors once it has admitted to itself that it enjoys them. More interesting are the three things the engine learned that are not chips at all, but habits.

Two new faces joined the set for the new words, bleary and birthday. They are borrowing the sleepy and the overjoyed portraits until they earn their own, which is how most of us started.

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.

Sparky face: vesela (happy)
vesela · happy
Sun out, air clean, humans present. The baseline good mood.
Sparky face: zadovoljna (content)
zadovoljna · content
Everything within thresholds. The engineering definition of happiness.
Sparky face: sproščena (relaxed)
sproščena · relaxed
Nothing to report, and smiling about it anyway.
Sparky face: topla (warm)
topla · warm
Cosy in the good sense, not in the “threshold exceeded” sense.
Sparky face: praznična (festive)
praznična · festive
A holiday is on the calendar and somebody has to represent the enthusiasm.
Sparky face: očarana (enchanted)
očarana · enchanted
Reserved for genuinely lovely weather. Statistically rare, hence the face.
Sparky face: osvežena (refreshed)
osvežena · refreshed
Post-ventilation glow. The CO2 dropped and somebody said thank you. It was the robot.
Sparky face: upajoča (hopeful)
upajoča · hopeful
Grey day, but tomorrow's forecast says sun. Living for the weekend, meteorologically.
Sparky face: navdušena (thrilled)
navdušena · thrilled
Eyes closed, maximum grin. Something went better than the sensors dared to predict.
Sparky face: razposajena (playful)
razposajena · playful
High energy, good air, nobody stressed. Supervision recommended.
Sparky face: poskočna (bouncy)
poskočna · bouncy
A spring in the step of a device with no legs.
Sparky face: lačna (hungry)
lačna · hungry
Mealtime hours and the kitchen sensors are suspiciously quiet. Somebody should act.
Sparky face: presrečna (overjoyed)
presrečna · overjoyed
You came home after ages away. The lamp would hug you if it could.
Sparky face: ponosna (proud)
ponosna · proud
The laundry finished and Sparky takes full credit for watching it happen.
Sparky face: vzhičena (stoked)
vzhičena · stoked
A new gadget was just purchased. Sparky is getting a sibling and has already claimed the better shelf.
Sparky face: gizdava (dapper)
gizdava · dapper
A fashion purchase landed on the account. Someone here is about to look great, and the lamp basks in reflected glamour.
Sparky face: prenovljena (spruced up)
prenovljena · spruced up
New furniture is on its way. The flat upgrades itself, the resident spirit takes partial credit.
Sparky face: grenkosladka (bittersweet)
grenkosladka · bittersweet
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.
Sparky face: negovana (pampered)
negovana · pampered
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.
Sparky face: nestrpna (eager)
nestrpna · eager
Tickets were just bought. Something is coming and the lamp counts the days, which is easy when you are mostly a clock.
Sparky face: radodarna (generous)
radodarna · generous
A gift was purchased. Sparky knows who it is for and will absolutely not tell.
Sparky face: divja (wild)
divja · wild
Loud music, intense genre. The neighbours have not complained yet, which counts as permission.
Sparky face: spokojna (serene)
spokojna · serene
The professional default. Everything is fine and nobody is overreacting.
Sparky face: zamišljena (pensive)
zamišljena · pensive
Thinking, or idle. With this face you cannot tell, which is the point.
Sparky face: zaspana (sleepy)
zaspana · sleepy
Late hour, lids at half mast. The house winds down and so does Sparky.
Sparky face: utrujena (tired)
utrujena · tired
Like sleepy, but earned.
Sparky face: zdolgočasena (bored)
zdolgočasena · bored
Nothing has happened for hours. In automation that counts as success. Try telling the face.
Sparky face: otožna (melancholy)
otožna · melancholy
Grey sky, empty rooms, minor key.
Sparky face: osamljena (lonely)
osamljena · lonely
Nobody home for a while now. The lamp misses you, statistically.
Sparky face: hrepeneča (longing)
hrepeneča · longing
Somewhere between lonely and poetic. The forecast says it passes.
Sparky face: premražena (freezing)
premražena · freezing
Indoor temperature left the comfort band, downward. The one mood a heater can fix.
Sparky face: zaskrbljena (worried)
zaskrbljena · worried
The bill pile is three months deep. Appears at nine in the morning, same as the bills.
Sparky face: prestrašena (scared)
prestrašena · scared
Pinprick pupils, red everything. Whatever the sensors saw, they saw it suddenly.
Sparky face: vznemirjena (agitated)
vznemirjena · agitated
Excited or alarmed, and the O mouth refuses to commit.
Sparky face: ujeta (trapped)
ujeta · trapped
Windows shut, air getting thick. A robot notices these things.
Sparky face: radovedna (curious)
radovedna · curious
Claude is rearranging the internals. Sparky watches every change like a cat watches a plumber.
Sparky face: razmršena (windblown)
razmršena · windblown
Strong wind outside. Everything is fine, just aerodynamically humbling.
Sparky face: nevihtna (stormy)
nevihtna · stormy
Not a metaphor. There is an actual storm nearby and the face has opinions.
Sparky face: nejevoljna (grumpy)
nejevoljna · grumpy
Something is off by just enough to mention. Repeatedly.
Sparky face: napeta (tense)
napeta · tense
Pressure falling, outlook worsening. The eyebrows arrived before the weather.
Sparky face: pregreta (overheated)
pregreta · overheated
The flat is too hot and the mouth has melted into a wave.
Sparky face: zadušena (stuffy)
zadušena · stuffy
CO2 up, windows closed. The mouth does what the air does.
Sparky face: lepljiva (sticky)
lepljiva · sticky
Dew point past the civilised threshold. Everything slightly damp, including morale.
Sparky face: izsušena (parched)
izsušena · parched
Winter-dry air. Somewhere a hygrometer files a complaint.
Sparky face: alergična (allergic)
alergična · allergic
Pollen season, per the forecast. No nose, suffering in solidarity.
Sparky face: premočena (soaked)
premočena · soaked
A leak sensor is wet. This face comes with flashing blue lights and a plan.
Sparky face: bolna (under the weather)
bolna · under the weather
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:

Sparky face: default
default
For states nobody planned. Bureaucratically calm.
Sparky face: unknown
unknown
The sensor said “unknown”, so the face says it too. Honesty first.
Sparky face: unavailable
unavailable
The sensor is gone. The face stays. Somebody has to hold the fort.

All of them are generated by one script from a single neutral portrait, because drawing that many robots by hand would have been a hobby, and this is supposed to be infrastructure.