Skip to content

Blog series: migrating a smart home to a self-hosted homelab — outline

Priority-ordered chapters. Each has its own doc; the repo's commit history (76 commits) and docs/runbooks/ carry the fine detail. War stories live in 90-what-went-wrong.md.

  1. 01-zigbee-migration.md — 127 Zigbee devices, ZHA→Z2M, zero re-pairing (see also docs/runbooks/zigbee-migration.md — the as-executed runbook)
  2. 02-network-and-domains.md — traefik + AdGuard split-horizon on fmm.house, wildcard LE via DNS-01, tailnet-only WAN, vanity IPv6
  3. 03-lighting-automations.md — approach/presence blueprint, door pulses, light-off-driven sleep policy, per-room packages
  4. 04-buttons-and-adaptive-lighting.md — SOMRIG bedside blueprint, AL override memory, min-brightness policy
  5. 05-multiroom-audio.md — Music Assistant + Sendspin across six rooms (Go players, ESPHome boards, Satellite1), watchdogs
  6. 06-ir-and-remotes.md — TS1201 code port, TV/Android-TV power sync, gaming AV chain, Unfolded Circle integration + its limits
  7. 07-eink-dashboard.md — TRMNL: cloud plugin (2KB gymnastics) → self-hosted byos_next with custom recipes + dynamic refresh
  8. 90-what-went-wrong.md — every trap, in the order we hit them

Writing principles for the post: lead each chapter with the invariant we wanted ("no re-pairing", "no cloud", "one blueprint per behavior"), show the smallest config that delivers it, then link the war story.