openhome

openhome Pod Mesh — engineering design

Turn the Pod concept into a buildable system: a wall-plug node you drop

into outlets around the house so the openhome agent is always in earshot, every room has a

good speaker (synced multi-room music), and any two rooms can talk to each other (intercom

+ broadcast). No batteries, no wires, no dead zones.

Design v1 (2026-07-30). Companion to hardware/openhome-mini-build-guide.md (the hub/"server").
The mini is the brain in one spot; the Pod mesh gives it a body in every room.

1. Goal & requirements

RequirementTarget
Agent reachable from anywhereWake word answered in every room, ≤ 5 m, ≤ 1.5 s
Good musicRoom-filling for a plug; sample-synced multi-room; no drift
CommunicationBroadcast (agent/announce to all) + intercom (2-way room↔room)
Always onMains-powered, no batteries, survives one node dying
Mesh backboneEach pod extends coverage for low-power devices (Thread)
PrivacyOn-device wake word · hardware mute · nothing leaves the LAN (concept §privacy)
InstallPlug in → it joins. Zero-config onboarding.

Non-goal v1: audiophile bass from a plug (physics — see audit §7). "Good for a room," not a subwoofer.


2. System architecture — how the mesh actually works

Two networks, on purpose. Don't conflate them:

                         ┌──────────── openhome hub (the "server" / mini) ────────────┐
                         │  Snapcast SERVER · Music Assistant · Assist (STT/TTS/intent) │
                         │  Thread Border Router · wake-word arbitration                │
                         └───────▲───────────────▲───────────────▲────────────────────┘
             WiFi (audio+voice)  │               │               │
                    ┌────────────┴───┐   ┌────────┴───────┐   ┌───┴────────────┐
                    │  Pod — Kitchen │   │  Pod — Living  │   │  Pod — Bedroom │
                    │ Snapclient +   │   │ Snapclient +   │   │ Snapclient +   │
                    │ wake word + mic│   │ wake word + mic│   │ wake word + mic│
                    │ speaker + ring │   │ speaker + ring │   │ speaker + ring │
                    │ Thread ROUTER  │◄─►│ Thread ROUTER  │◄─►│ Thread ROUTER  │  ← Thread mesh
                    └───────┬────────┘   └───────┬────────┘   └───────┬────────┘   (802.15.4)
                            └─── extends coverage for battery sensors, locks, buttons ───┘

"agent everywhere + music everywhere" plane. It is not a WiFi mesh by default — your existing

router/APs cover it. (Optional: pods can run a WiFi repeater, but that's a support headache; skip v1.)

the house and you've blanketed it with an 802.15.4 mesh that the **battery sensors, locks, and

buttons* (starter line) hop through. This* is the mesh that matters, and it's

free — the pods are always on anyway. More pods = stronger sensor mesh, automatically.

The insight: the pods do double duty. They're audio+voice satellites on WiFi and the Thread

backbone for everything low-power. One device makes both the agent and the sensor network omnipresent.


3. Compute — what runs in the plug

Option$RunsThread router?Verdict
Raspberry Pi Zero 2 W~$15Snapclient + wyoming wake word + LED svcvia co-processor (ESP32-H2/C6 or dongle)recommended — real Linux, easy
ESP32-A1S Audio Kit~$8Squeezelite/Snapclient (firmware)nobudget, audio-only, no mesh role
ESP32-C6 / H2~$6wake word + Thread, weak audio✅ nativegreat mesh node, poor speaker
Pi Zero 2 W + ESP32-C6~$21audio+voice (Pi) + Thread router (C6)the "does everything" pod

Recommended pod = Pi Zero 2 W for audio/voice, with an ESP32-C6 (or the hub's border router)

handling Thread. Budget "Pod Mini" (mesh + speaker, no premium mic) = ESP32 only.


4. Audio & the two communication modes

Music (multi-room): each pod runs a Snapcast client; the hub runs the Snapcast server

fed by Music Assistant. Snapcast timestamps every packet so all rooms play bit-synced — walk

the house, no echo/drift. Group/ungroup rooms from the app ("kitchen + living together").

Communication — two features, one hardware set (mic + speaker in every pod):

  1. Broadcast / announce — the agent (or a doorbell, timer, "dinner's ready") plays TTS on

one or all pods. Music Assistant's announce ducks the music, speaks, and resumes. One-way, all rooms.

  1. Intercom / drop-in — 2-way room↔room. "openhome, intercom the bedroom" → the hub bridges the

kitchen pod's mic → bedroom pod's speaker and back. Half or full duplex (full duplex needs the

AEC from §7). This is the "walkie-talkie the house" feature.

Agent everywhere: every pod is a wake-word satellite. Multiple pods will hear "openhome" at once →

the hub does loudest-mic arbitration (linux-voice-assistant / HA assist_satellite already supports

this) so exactly one pod responds. No chorus of confirmations.


5. Per-pod bill of materials

PartRoleProtocol/Notes~CostLink
Raspberry Pi Zero 2 WcomputeWiFi (audio+voice)$15adafruit
MAX98357A I2S ampaudio outI2S$6adafruit
1.75–2″ full-range driver + passive radiatorspeakertuned for a small ported box$6–10Dayton Audio
I2S MEMS mic (INMP441) or 2-mic boardmicfar/mid-field$3–8Adafruit ICS-43434
NeoPixel ring 12–16 (WS2812)status ringdriven over SPI$8adafruit
ESP32-C6 (optional)Thread router802.15.4 + Matter$6adafruit
Hi-Link HLK-20M05 AC-DCmains → 5 V / 4 A (20 W)isolated, for audio peaks$6[search HLK-20M05]
Hardware mute slide switchcuts mic powerprivacy (LED on when muted)$1any SPST
3D-printed wall-plug shell + NEMA 1-15P prongsenclosuregrille + diffuser + vents$3this repo

~$55–65 per pod at qty 1; the point is you buy several. Budget "Pod Mini" (ESP32-A1S, no premium

mic) lands ~$25.


6. Software integration (adds to the hub you already built)

  1. Snapcast server on the hub; Snapclient on each pod (systemd). — https://github.com/snapcast/snapcast
  2. Music Assistant as the source + announce engine. — https://www.music-assistant.io/
  3. wyoming-satellite / linux-voice-assistant on each pod → registers as an assist_satellite

in the hub; wake word local, arbitration central. (Same stack as the mini.)

  1. Thread border router on the hub + pods as routers (OpenThread / the ESP32-C6 RCP).
  2. Intercom = a small hub service that, on intent, opens a two-way Snapcast/RTP stream between

two pods (mic↔speaker). Ships as an openhome add-on.

  1. Zero-config onboarding: pod boots → mDNS-advertises → hub adopts it → you name the room in the app.

7. Debug & design audit (the parts that bite)

  1. Mains in a sealed plug body = safety + heat (the big one). AC-DC + amp + Pi in a small shell

means UL/CE certification, creepage/clearance spacing, fusing, and thermal headroom. Adjustments:

isolated AC-DC module (HLK, pre-certified), vents + internal baffling, keep mains on its own PCB zone,

derate the supply (20 W for a ~10 W load). A "brick + 30 cm pigtail" variant relaxes all of this if

the plug body runs hot — offer both.

  1. "Good speaker" vs a plug's volume. A 2″ driver in a tiny box has no low bass — physics.

Adjustments: ported enclosure + passive radiator, DSP bass EQ (safe limits), and honest

marketing ("room audio," pair two for stereo). For a real music room, group a pod with the mini or a

bigger speaker via Snapcast.

  1. Snapcast sync across many nodes. Default buffering handles it, but a weak-WiFi pod can drift.

Adjustment: per-client latency trim; put pods on good AP coverage (they're on 2.4 GHz).

  1. 2.4 GHz congestion with N pods. Audio + voice + Thread all crowd 2.4 GHz. Adjustments: Pi Zero 2 W

is 2.4-only, so plan AP channels; Thread is 802.15.4 (separate), which actually offloads the sensors

from WiFi — another reason to split the planes.

  1. Wake-word double-trigger. Covered by loudest-mic arbitration (§4) — verify it's enabled or every

pod answers.

  1. Full-duplex intercom needs AEC. Without echo cancellation the far room hears itself. Adjustment:

run software AEC (speexdsp/webrtc) on the pod, or a mic module with hardware AEC (XVF3800) for premium pods.

  1. Vampire power. 6 always-on pods at ~2–3 W idle = ~15 W standby. Adjustment: efficient AC-DC,

low-power idle (LEDs dim/off, Pi governor), publish the number honestly.

  1. Privacy is the product (concept): on-device wake word, hardware mute that cuts

mic power with the ring lit red-on-mute, open firmware. Non-negotiable — it's the whole pitch.


8. Rollout / mesh scaling

and a Thread router — device count and mesh resilience climb together.

9. Adjustments vs. the concept

said "WiFi mesh node + Thread router"; in practice the Thread mesh is the one that earns its keep.

10. Links