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