Back to work

Selected work · 01 / Talking house

A house that runs on light.

No cloud. No subscriptions. Just my apartment, taught to look after itself: 1,191 things that sense and act, and 89 rules they follow on their own.

1,191 entities 89 rules · 67 live 6 rooms 3 adaptive-light zones local voice 100% local
2500K EVENING 2500K 5000K

DRAGthe handle. The light warms and cools. Schematic only.

In short

I didn't want a home that phones a server abroad to turn on a lamp. So I built one on a small box in the hallway, and taught it our rhythms.

Seven quiet systems. The long version is below.

Colour that moves with the sun

Cool and bright at noon, candlelit at midnight. On its own.

01 · 3 zones · 90-second re-adapt

It knows who's home

It welcomes me after dark and secures itself once we're out.

02 · 2 people · 1 car · work-aware

Warmth, just in time

Pre-heats before I'm home, boosts in a cold snap, drops to 15° once I'm out.

03 · 9 thermostats · outside-aware

Cinema, then quiet

The TV dims the room. At half past midnight everything goes dark anyway.

04 · movie mode · deep sleep

The walls fly the flags

The living room flies the real track flags, in sync with the broadcast.

05 · live F1 · the showpiece

It watches the price

Follows the Danish spot price hour by hour and dims the lit rooms through the peak.

06 · DKK/kWh · CO₂ · live

Quiet guardians

Fridge left open, freezer failing, a bulb that turns itself on at night.

07 · runs silent · speaks on trouble

The long version · what it can actually do

Seven systems, running quietly in the background.

It's infrastructure: you notice it the week it breaks. Here's each part, with real numbers from the running system.

01 · Adaptive light

Light that follows the sun.

A lamp shouldn't look the same at breakfast and at midnight. Three Adaptive Lighting zones recompute every bulb's colour and brightness every 90 seconds, following the sun from a cool, bright noon to a warm 2500K at night.

  • ZonesLiving room · Entrance · Office
  • Floor brightness30% · 42% · 37%
  • Entrance gateonly below 300 lux, off after ~8 min still
Adaptive light
2500KMidnight
TIME · 00:00
SUNRISE SUNSET 5000K2500K
00:0006121824:00
Drag across the day and the lamp follows the sun

The pattern behind it

Sensors decide whether. Light decides how.

Every motion rule shares one shape: it never sets a brightness. It switches the light group on with a bare command and lets the adaptive engine fill in the level. That discipline is why the lights never feel robotic.

A hallway lamp at 2 am and the same lamp at noon run the identical rule. They look nothing alike.

Motionoccupancy → on dark? turn_on(no level set) Adaptive Lightingsets the right level no motion for N min → fade off

FIG 02Used in every room. The light engine, not the sensor, owns the brightness.

02 · Presence

The house knows who's home and acts on it.

Two phones and the car feed a presence model. It tells home, away and at work apart, so warming starts when I clock off, not when I'm shivering at the door.

MORNINGEVENING HOME 08:10 · Leave lights off · heat → 15°C 16:30 · Leave work pre-heat → 22°C on the drive 17:05 · Arrive welcome: entrance 100%, room 60%

FIG 03One weekday of presence. The car is me. "At work" is its own state, so pre-heating starts on the commute.

Welcome home

Arrive after dark: the entrance goes to 100% at a warm 3000K, the living room to 60%. It fades out five minutes later.

Away mode

Five minutes after we're both gone, every light drops. In the heating season thermostats fall to 15°C, and my phone gets a count of what it caught.

Presence, not just phones

Motion anywhere marks the home "occupied". Thirty minutes of stillness marks it "empty". A second opinion for the door sensors.

03 · Warmth

Heat that reads the day, not the clock.

Nine thermostats, one instinct: warm when we're here, cheap when we're not. It watches the commute, the forecast and the windows, not a schedule.

A whole heating season can pass without me touching a dial. Toggle the rules →

Leave work → pre-heatliving room & kitchen, on the drive home
22°C
Cold snap outside → boostbelow 0°C and someone's home
23°C
Warm outside → ease offlet the day do the work
↓ lower
Window open → pausethat room's radiator backs off
hold
Everyone out → setbackheating season only
15°C

04 · After dark

When the sun's gone, the house changes character.

A handful of rules only wake at night. Small, but they're what make the place feel attentive.

TV ON · AFTER SUNSET

Cinema mode

The TV coming on is the only cue. The living room sinks to 15% at 2500K, the counters go dark, and it's a cinema.

Movie22%
Night14%
Even55%
Guests68%
Party90%

Five one-tap volume "mixes" balance the speakers for a film, a dinner or a full room. Drag them.

00:30 · EVERY NIGHT

Deep sleep

A safety net for a forgetful household: any light still on at half past midnight fades dark over five seconds.

23:00summary 00:30all off sunrisesweep

At 23:00 it also texts a recap: fridge, freezer, power, CO₂ and the car's charge.

05 · Race day, the showpiece

The walls fly the flags.

The one rule I built because I wanted to. Ten minutes before lights-out at a Grand Prix the flat slips into Race Mode: the living-room spots mirror the real track flags. Green for clear, yellow for caution, red for a stoppage, two shades for the safety cars. Landing the flash with the crash on screen meant syncing to the TV's broadcast delay, not live timing.

GREEN · track clear

TAP A FLAGthe spots follow the real flag colours. It photographs the room before an incident, restores it on green.

06 · Energy

A home that watches the price.

Denmark's electricity price swings hour to hour. The house follows the live spot price in DKK/kWh: cross 2 kr and my phone buzzes to delay the dishwasher; hit the daily peak and the lit rooms drop to 40%.

One detail I'm oddly proud of: the peak-dimmer only touches lights already on. An earlier version once lit the whole flat in daylight trying to "dim" it.

Spot price · 18:00
2.31DKK/kWh
Peak · dimming
alert > 2 kr
0006121823
Drag the hour. Above the line it warns; in the red peak it dims what's lit. Illustrative shape.

07 · Guardians

The rules that only speak up when something's wrong.

The least glamorous automations are the ones I'd miss most. Silent for weeks, then they save a freezer of food. Tap a status light

FRIDGE

Door-left-open alert

Open more than two minutes and a notice appears: the quiet energy leak everyone forgets.

FREEZER

Failure watch

Above −15°C for half an hour isn't a door ajar. That's a warning the compressor may be dying.

BEDROOM

The ghost-on bulb

One bulb flicks itself on in the small hours. A rule reads the context of every turn-on; if no person and no automation asked, off it goes again.

SYSTEM

Batteries & clock

Low sensor batteries get flagged before they die. So does the hub's clock drifting from network time, and again when it recovers.

On the wall

Everything, on one glass panel.

Two custom dashboards drive it all. One for lights and scenes. One grouped by what we actually check: energy, media, health, security.

Dashboard · Lights & scenes
Lights 4 rooms · 29 lamps · 1 on
Scenes
Tap a room or a scene
Dashboard · Energy & health
Spot price
1.42DKK/kWhPeak
CO₂ intensity142 g/kWh
Car charge64%
Fridge4°C2 opens today
Freezer−19°Cok
Lights on1entrance

Schematic dashboards. The lights board is live to the touch. Real captures drop into these frames.

And it talks back

A house called Talking house ought to be able to hear you.

So it does, on its own hardware like everything else. Say the wake word and the whole exchange stays inside the flat.

speech to text intent act text to speech

Local wake-word, local speech-to-text, local text-to-speech. The cloud never gets a word.

By the numbers

The whole thing, counted.

1,191entities
89automations · 67 live
387sensors
29lights
12scripts
9thermostats
3adaptive zones
0cloud services

Live counts from the running Home Assistant instance · six rooms · the 22 non-"live" rules are labelled rollbacks, kept on purpose.

How it's built

Built like something that has to keep running.

A home that misbehaves at midnight is worse than none at all. So everything is local and every change reversible.

I never edit a working rule in place. I disable it as a labelled rollback and build a fresh copy alongside.

Principle

Local-first

Sense, decide and act inside the flat. It works when the internet doesn't.

Principle

Reversible

Old rules are disabled, never deleted: a labelled backup for every change.

Principle

Context-aware

Rules read who or what triggered an event, so a ghost turn-on is caught but a real one respected.

Principle

Layered

Sensors decide whether; the light engine decides how. Small rules add up to a house that seems to think.