A Home Assistant add-on that lets you manage Bluetooth audio devices (A2DP speakers and receivers) from a web UI — with persistent pairing, automatic reconnection, and volume control.
Home Assistant has no built-in way to manage Bluetooth audio devices. Without this app, connecting a Bluetooth speaker means SSH-ing into the host, manually running bluetoothctl to scan, pair, and connect, setting up PulseAudio sinks by hand, and hoping it all survives a reboot. It usually doesn't.
This app gives you a point-and-click UI right in the HA sidebar. Scan, pair, connect, done — and it reconnects automatically when things drop.
- Use to just manage connections - this app makes it easy to manage BT connections, let your other apps use the BT device as normal
- Self contained TTS solution - includes optional Music Player Daemon support to allow use of BT devices for TTS without additional app
- One-click device management — scan, pair, connect, and disconnect from the web UI
- Auto-reconnect — reconnects after disconnects or reboots with configurable exponential backoff
- Per-device idle modes — Power Save (let speaker sleep), Stay Awake (inaudible keep-alive audio), or Auto-Disconnect (timed full disconnect)
- Per-device MPD instances:
- each BT device gets its own Music Player Daemon
- use the MPD integration to expose it as a
media_playerentity in HA for TTS, automations, and volume control - this is not designed for multiroom audio, please use Multiroom Audio App for HAOS
- AVRCP media buttons — per-device toggle for hardware volume buttons and play/pause/skip tracking
- Multi-adapter support — detects all Bluetooth adapters with friendly USB device names; switch between them from the UI
- Real-time monitoring — live Events view for AVRCP/MPRIS/Transport events, plus a filterable Logs viewer with regex search
- Dark mode — automatic system theme detection
- Safe BLE coexistence — uses Classic Bluetooth (BR/EDR) only; HA's BLE integrations (sensors, beacons, ESPHome proxies) continue working without interference
- Security-first — custom AppArmor profile enforcing least-privilege access, all Bluetooth operations go through BlueZ D-Bus (no raw HCI)
| Architecture | Examples |
|---|---|
| amd64 | Intel NUCs, x86-64 VMs |
| aarch64 | Raspberry Pi 4, Raspberry Pi 5 |
| armv7 (not tested) | Raspberry Pi 3 |
| armhf (not tested) | Older ARM devices |
Requirements:
- Home Assistant OS 17.1 or later (or a setup with D-Bus, PulseAudio, and BlueZ)
- A Bluetooth adapter with BR/EDR (Classic Bluetooth) support — built-in or USB dongle
- Target devices must support A2DP (Advanced Audio Distribution Profile)
- Single active adapter — one Bluetooth adapter active at a time (switchable in settings, requires add-on restart)
- recommended to use a dedicated adapater that is left unmanaged by HAOS, however combined adapter should work, YMMV
- No multiroom sync — each speaker is an independent PulseAudio sink; synchronized grouped playback is outside the scope of this add-on, if you want something that does this please consider Multiroom Audio App for HAOS
- No audio receiving — streams audio to speakers only. Cannot receive audio from Bluetooth devices (e.g., a phone streaming music to HA)
- No LE Audio / LC3 — Classic A2DP only; Bluetooth Low Energy audio is not supported
- No HFP/HSP yet — Hands-Free Profile support is planned but waiting on HAOS audio container changes
-
In Home Assistant, go to Settings > Add-ons > Add-on Store
-
Click the three-dot menu (top right) and select Repositories
-
Add the repository URL:
https://github.com/scyto/ha-bluetooth-audio-manager -
Find Bluetooth Audio Manager in the store and click Install
-
Start the app — it appears in the sidebar as BT Audio
Dev channel: To install the development build, enable Show experimental apps in your HA profile settings, then install Bluetooth Audio Manager (Dev) from the store. It tracks the
devbranch and updates on every push.
- Open BT Audio from the sidebar
- Put your speaker in pairing mode
- Click the Add Device tile
- Click Pair next to your device
- Click Connect — the speaker appears as a PulseAudio audio sink
- Go to Settings > System > Audio to select it as the default output
- Use TTS, media player, or automations to play audio through it
Configuration options and per-device settings are documented in the App documentation.
This project was developed with the assistance of AI (Claude by Anthropic) via Claude Code. A human provided direction, reviewed outputs, and made decisions, but the implementation was AI-assisted.

