Multiroom Audio System

sendspin-bt-bridge
Home Assistant
Music Assistant
BT Bridge (per zone)
BT Adapter (hciX)
Bluetooth Speaker
User (remote / outside)
%%{init: { "theme": "base", "themeVariables": { "background": "#0d1117", "mainBkg": "#111827", "nodeBorder": "#1e3a5f", "clusterBkg": "#0a0f1a", "clusterBorder": "#1c2a3e", "titleColor": "#e2e8f0", "edgeLabelBackground": "#0d1117", "lineColor": "#334155", "primaryColor": "#111827", "primaryTextColor": "#e2e8f0", "primaryBorderColor": "#1e3a5f", "secondaryColor": "#0f172a", "tertiaryColor": "#0a0f1a", "fontFamily": "Inter, sans-serif", "fontSize": "14px" } }}%% graph TB subgraph CTRL[" HA + MA — Control Layer "] direction LR HA["🏠 Home Assistant\nAutomation · Dashboards · Scenes"] MA["🎵 Music Assistant\nStreaming · Playlists · EQ"] HA <-->|"Media Players API"| MA end U["🧑‍💻 User\nTerrace (outside building)"] U -.->|"Web UI / VPN"| HA subgraph Z1[" 📍 Living Room "] direction TB BR1["🔗 sendspin-bt-bridge\nRaspberry Pi 5"] subgraph Z1AD["BT Adapters"] direction LR A1H0["ᛒ hci0"] A1H1["ᛒ hci1"] end SP1["🔊 JBL Charge 5"] SP2["🔊 Bose SoundLink Max"] SP3["🔊 Sony SRS-XB43"] SP4["🔊 Harman Kardon Aura"] end subgraph Z2[" 📍 Kitchen "] direction TB BR2["🔗 sendspin-bt-bridge\nRaspberry Pi 4"] subgraph Z2AD["BT Adapters"] direction LR A2H0["ᛒ hci0"] A2H1["ᛒ hci1"] end SP5["🔊 JBL Flip 6"] SP6["🔊 UE Hyperboom"] SP7["🔊 Anker Soundcore Motion"] end subgraph Z3[" 📍 Conference Room "] direction TB BR3["🔗 sendspin-bt-bridge\nMini PC / NUC"] subgraph Z3AD["BT Adapters"] direction LR A3H0["ᛒ hci0"] A3H1["ᛒ hci1"] end SP8["🔊 JBL PartyBox 110"] SP9["🔊 Sonos Move 2"] SP10["🔊 Bang & Olufsen A1"] SP11["🔊 Marshall Emberton III"] end subgraph Z4[" 📍 Terrace "] direction TB BR4["🔗 sendspin-bt-bridge\nRaspberry Pi Zero 2W"] subgraph Z4AD["BT Adapters"] direction LR A4H0["ᛒ hci0"] end SP12["🔊 Ultimate Ears Epicboom"] SP13["🔊 JBL Xtreme 3"] end %% MA → Bridges (each bridge = independent MA player) MA -->|"Player: Living Room"| BR1 MA -->|"Player: Kitchen"| BR2 MA -->|"Player: Conference"| BR3 MA -->|"Player: Terrace"| BR4 %% Bridge → Adapters BR1 --> A1H0 BR1 --> A1H1 BR2 --> A2H0 BR2 --> A2H1 BR3 --> A3H0 BR3 --> A3H1 BR4 --> A4H0 %% Adapters → Speakers A1H0 --> SP1 A1H0 --> SP2 A1H1 --> SP3 A1H1 --> SP4 A2H0 --> SP5 A2H0 --> SP6 A2H1 --> SP7 A3H0 --> SP8 A3H0 --> SP9 A3H1 --> SP10 A3H1 --> SP11 A4H0 --> SP12 A4H0 --> SP13 %% Node styles classDef haStyle fill:#0c1f38,stroke:#18b0ff,stroke-width:2px,color:#93c5fd,rx:10 classDef maStyle fill:#13103a,stroke:#6366f1,stroke-width:2px,color:#a5b4fc,rx:10 classDef brStyle fill:#0a2030,stroke:#22d3ee,stroke-width:1.5px,color:#67e8f9,rx:8 classDef adStyle fill:#071c14,stroke:#10b981,stroke-width:1px,color:#6ee7b7,rx:6 classDef spStyle fill:#1a1200,stroke:#f59e0b,stroke-width:1px,color:#fcd34d,rx:6 classDef userStyle fill:#0b0f14,stroke:#94a3b8,stroke-width:1.5px,color:#e2e8f0,rx:10 class HA haStyle class MA maStyle class BR1,BR2,BR3,BR4 brStyle class A1H0,A1H1,A2H0,A2H1,A3H0,A3H1,A4H0,A4H1 adStyle class SP1,SP2,SP3,SP4,SP5,SP6,SP7,SP8,SP9,SP10,SP11,SP12,SP13 spStyle class U userStyle