Multiroom Audio System

sendspin-bt-bridge
Home Assistant
Music Assistant
BT Bridge (per zone)
BT Adapter (hciX)
Bluetooth Speaker
User (terrace)
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 U userStyle class BR1,BR2,BR3,BR4 brStyle class A1H0,A1H1,A2H0,A2H1,A3H0,A3H1,A4H0 adStyle class SP1,SP2,SP3,SP4,SP5,SP6,SP7,SP8,SP9,SP10,SP11,SP12,SP13 spStyle