02

// domain 02

Intelligent Environments

Home Assistant paired with local and frontier language models. Calm automation, presence-aware spaces, environmental intelligence. Research and practice in making homes that learn the cadence of the people inside them.

Home AssistantWhisperLlama.cppPiper TTSMQTTZigbee2MQTTAqara FP2Frigate

// live · environment dashboard

The house, room by room.

A realtime 3D map rendered in three.js and fed by Home Assistant. The hub at the center is the home; each orbiting orb is a room, sized by how many devices live there. The spoke to each room thickens with its device count and brightens with reachability (a room with offline devices reads dimmer), while the packets along it stream faster the busier the room is. Smaller satellites are device categories (colored by type). Presence stays aggregate: which room is occupied is never shown. Drag to orbit, tap any orb for its live metrics.

environment · home-assistant · realtime

drag · scroll · tap

// connecting to home assistant…

// philosophy

The most intelligent automation is the one that does not act.

Smart-home demos love showing what a system can do. Mine spends more time deciding what not to do. A debounced inference is worth more than a fast wrong one. A house that knows when to wait is calmer than one that always responds.

The goal is friction reduction, not assistance theater. If a person notices an automation, it usually misfired.

// home assistant

The hub I would not replace.

HAOS in a VM with USB and serial passthrough for Zigbee, Z-Wave, and Thread. Configuration lives in Git; secrets via Vault; backups land in TrueNAS and to the cloud nightly.

Climate

Ecobee thermostats, mini-splits, and a heat-recovery ventilator coordinated by occupancy and outdoor conditions.

Lighting

Lutron Caséta and Hue, scheduled around circadian color temperature with manual override always honored.

Security

UniFi Protect cameras, Aqara contact sensors, Frigate for object detection. Notifications only on the things I actually care about.

Energy

Solar inverter and Span panel feeding Home Assistant. Smart distribution favors batteries during peak rates.

Media

Apple TV state, Sonos rooms, Plex transcoding signals. Used as context, not destination.

Voice

Local Whisper + Piper TTS satellites in three rooms. Frontier LLM only when local cannot answer.

// presence detection

Where you are, not who you are.

mmWave sensors detect occupancy per zone, not per body. The inference is "is this room being used?" and never "who is in it?" That distinction is the difference between a calm home and a surveillance state.

Six Aqara FP2 sensors cover the rooms that matter; contact and light-level sensors fill in the rest. Decision logic lives in Home Assistant scripts, not in the sensor firmware.

sensor-inventory.yaml

70 endpoints

  • Aqara FP2mmWave presence · per-zone occupancy6 units
  • Aqara contactdoor / window state14 units
  • Aqara temp / humidityper-room environmental11 units
  • Ecobee remote sensorsclimate averaging5 units
  • PurpleAirindoor + outdoor air quality2 units
  • Spancircuit-level power32 circuits

// voice & ai

A house that listens, mostly to itself.

Three voice satellites running Whisper locally, with Piper TTS for the reply. The pipeline routes to local LLMs first; a frontier model is consulted only when local intent classification flags a request as ambiguous.

speech-to-text

Local Whisper

Wyoming Protocol satellite to the cluster. ~140ms median STT for command-length utterances; never leaves the LAN.

text-to-speech

Piper TTS

Calm reading voice, paced for the room. No bell, no chime: the spoken response is the acknowledgment.

contextual response

Intent → action

A small Llama model handles intent classification; HA scripts execute. The frontier model only enters when the intent is genuinely open-ended.

// environmental intelligence

Telemetry that informs behavior.

Temperature, humidity, occupancy, lighting, energy. Every entity in Home Assistant is classified by type and aggregated server-side, so only safe, non-identifying numbers reach this page. Live when the controller is reachable, representative demo data otherwise.

avg temp

–

whole-home

humidity

–

target 40–55

comfort

–

0–100 index

rooms active

–

where, not who

lights on

–

Hue + Lutron

energy now

–

live draw

shades open

–

Neo

reachable

–

entities online

// featured automations

Four that earned their place.

Out of a hundred or so live automations, these are the ones I would defend at dinner.

// 01

Server room thermal

When the rack inlet temperature exceeds 26°C, the ventilator switches to high and the mini-split lowers by 2°C for 20 minutes. Self-quieting at night.

rack inletHRVmini-splitquiet-hours aware

// 02

Sunset lighting flow

Over 18 minutes, color temperature warms from 4000K to 2400K across the main floor, paced to actual sunset rather than wall-clock time.

solar positionLutronHueno jumps

// 03

Contextual voice

A request like "turn off the lights" first asks the room you are in, then the cluster of rooms you have occupied in the last ten minutes, not the whole house.

FP2Whispercontext windowleast-surprise

// 04

Quiet mornings

On a non-work day, the house notices and behaves more like a hotel: slower wake, gentler audio cues, weather summary deferred.

calendarsleep stateaudio levelspatience