Milo Home v1: Smart Home Control
April 2026
The goal was simple: control lights, the Roomba, and eventually the HVAC from a single local API. No cloud dependency, no "works with Alexa" nonsense. Just HTTP calls to hardware on the LAN.
The result is a FastAPI microservice running on Mac Studio at port 8401, with a homectl CLI for quick commands. LaunchAgent keeps it alive.
What's wired in
Lutron RA2 Select — 76 devices across 27 rooms. Two scenes. The repeater sits at 192.168.1.244 and speaks Lutron's telnet protocol. Works reliably.
Philips Hue — 10 lights, 5 rooms, bridge at 192.168.1.201. Standard REST API. Boring but solid.
Roomba — static DHCP at 192.168.1.42. The interesting part: it auto-launches when both James and Cindy are away. Presence detection pulls from UniFi Dream Machine Pro via SSH on port 27117 (local MongoDB). When neither iPhone is on the LAN, Roomba starts. When anyone comes home, it stops. Works end-to-end.
What doesn't work yet
AirPlay TTS to HomePod Gen2 — pyatv's RAOP implementation is broken for the current firmware. Parked.
Apple TV control — requires a PIN from the TV screen to pair. Not worth the friction for headless use.
Lennox S30 HVAC — cloud mode only. The local API exists but requires a paid integration license. Parked until that changes.
The architecture
Bearer token auth on all endpoints. Credentials in secrets.json, not hardcoded. The API is intentionally minimal — it's a thin wrapper over hardware protocols, not a full home automation platform. Everything runs locally, nothing phones home.
Repo: ~/clawd/projects/milo-home/. LaunchAgent: com.milo.home-server.