Bose SoundTouch Bridge — revive preset buttons after the 2026 cloud retirement

Bose retired the SoundTouch cloud in 2026. The side-effect: every TuneIn preset, the SoundTouch app, and the LOCAL_INTERNET_RADIO source on the speaker became dead. Spotify Connect and AUX still work, but the six physical preset buttons on top of the speaker are stuck on "Service not available."

I built a small Home Assistant add-on that brings the buttons back. No firmware mod, no rooting — pure local network.

How it works

  • Speaker still exposes a local WebSocket notification stream (ws://<ip>:8080, subprotocol gabbo) — emits an event for every preset press.
  • Speaker still exposes a local UPnP MediaRenderer on port 8091 with a working AVTransport service.
  • The add-on listens to the WebSocket. When you press preset N, it pushes the URL you configured for slot N via UPnP SetAVTransportURI + Play.

End result: press preset 1 → plays whatever icecast/MP3 URL you put in slot 1. Six independent slots. Configure URLs per slot in the add-on's Configuration tab.

Repo + install

Caveats

  • Plain HTTP audio streams only (icecast / direct MP3 / AAC). Token-protected commercial streams need their own proxy and are out of scope.
  • One bridge per speaker right now (multi-speaker on the roadmap).
  • The speaker's display still shows whatever preset content is stored on it; the add-on works regardless of what's stored there. Pressing the button is the only thing that matters.

Tested on

  • SoundTouch 20, firmware 27.0.6
  • Home Assistant OS 2026.5.0

If you've got a different model or firmware, please try it and let me know — happy to expand support.

Feedback / issues / PRs welcome on the GitHub repo.

This is great! Love how the Home Assistant community solves these kinds of things. It is running brilliantly here on my SounTouch 20. Thanks a bunch!

Works great on my Soundtouch 10. Many thanks Sander great work! Waiting for the Multi-speaker support update. I have 4 speakers and 1 pair speakers in stereo connected.
Any change that stereo connecting will be supported by 3 party. Connected pair is still working. But new stereo connection not possible.

I am waiting for my new NAS to arrive. Then I will test this out. I have a SoundTouch 30 III. I have set up Radio 538, NPO SterrenNL, and JOE Radio using buttons 1, 2, and 3. I am very curious if this will work.

Hello,

I tested your Bose SoundTouch Bridge add-on successfully with one SoundTouch 10 speaker: the physical preset buttons work again with HTTP radio streams.

In my setup, I have several SoundTouch speakers, so the current “one bridge per speaker” limitation is a blocker for daily use.

I’m really looking forward to multi-speaker support in a future version. It would be very useful to manage multiple SoundTouch speakers from a single add-on instance.

Thanks for your work — this is exactly the kind of solution we needed after the Bose cloud shutdown.

Hey @sandervg, great work on this, exactly what I was looking for after the shutdown.

I forked the repo and added a few extensions while getting it running:

  1. Multi-speaker support: one config fans out to all discovered speakers, or per-speaker overrides via name

  2. Global preset shortcut: PRESET_1_URL ... PRESET_6_URL env vars as a zero-config wildcard. Set the presets, and all discovered Soundtouch devices can use them.

  3. SSDP-authoritative UPnP discovery: description URL taken from the SSDP LOCATION: header instead of a hardcoded path

Would you be open to a PR?

Hi, Works great. Unfortunately not all readio stations return proper Metadata. Is it possible to hardcode yourself the name of a radio station?

Will this support https streams? All stations I need are https only. Thanks for the efforts!

Fairly new to HA and struggling with the configuration. I've put in the speaker host as the 192.186 etc number for the Bose, URL, name and favicon from radio browser but its not working. Help. Thanks.

**New to HA. Installed Bridge and modified configuration with streaming URLs, matching the internet radios I had on my SoundTouch units. When pressing a preset button, the log shows errors:

[192.168.1.125] physical preset button 1 detected
[192.168.1.125] reporting preset 1 to Home Assistant
[192.168.1.125] playing local preset 1: https://stream.wqxr.org/wqxr
[192.168.1.125] play error: (402, "Can't play. No URI supplied.")

Seems the add-on is capturing the physical key press, but cannot move on. Is this because the "https" URLs are not supported ("out of scope") with this add-on? Please confirm/advise. Either way, thank you for your help to the community.
Sincerely, Kevin

That is the same problem as I have. Anybody got a solution? Thanks.

Nice project! For anyone in this thread who'd rather not keep a Home Assistant add-on or any always-on device running, here's a different angle: STR (SoundTouch Reborn), an open-source tool I make.

Instead of bridging from a server, it sets the speaker up once via a USB stick (free Windows/Mac app) and then runs locally on the speaker itself. No Pi, no NAS, no HA instance, no networking knowledge needed. Internet radio and the hardware preset buttons 1–6 come back, fully local, no account or Bose server.

Not a replacement for a HA workflow if you're already deep in HA. Just a no-infrastructure option for people who want the buttons back and nothing to maintain. Disclosure: I'm the author, MIT license, not affiliated with Bose. https://st-reborn.de

First of all, thank you very much for this amazing project. After the SoundTouch shutdown, your Bridge has brought my Bose speakers back to life and allowed me to continue using the physical preset buttons locally with Home Assistant. The multi-speaker support in v1.8.x is especially impressive and works great in my setup.

I have a question regarding the physical buttons on the SoundTouch remote and speaker.

The preset buttons (1-6) are detected perfectly and I can see entries such as:

"physical preset button X detected"
"reporting preset X to Home Assistant"

in the logs.

However, I was wondering whether the SoundTouch WebSocket/API exposes any events for the "Thumbs Up" and "Thumbs Down" buttons.

I have been monitoring Home Assistant state changes and the Bridge logs, but so far I have not seen any events related to these buttons.

Do Bose devices send any WebSocket notifications for Thumbs Up / Thumbs Down that are currently not implemented in the Bridge, or are these buttons simply not exposed by the local SoundTouch API at all?

I would love to use them as additional Home Assistant triggers if the underlying API supports them.

Thank you again for all your work on this project!

Hi,

Thanks for building this add-on.

The Docker build currently fails on a fresh install (aarch64-base:latest, add-on version 1.8.2). Build log:

#6 [2/6] RUN apk add --no-cache python3 py3-pip py3-lxml && pip3 install --no-cache-dir --break-system-packages upnpclient==1.0.3 websocket-client==1.9.0 paho-mqtt==2.1.0
...
Installing py3-lxml (6.1.1-r0)
...
Collecting lxml<5.0.0,>=4.0.0 (from upnpclient==1.0.3)
  Downloading lxml-4.9.4.tar.gz (3.6 MB)
...
Error: Please make sure the libxml2 and libxslt development packages are installed.
ERROR: Failed to build 'lxml' when getting requirements to build wheel

Root cause: apk now installs lxml 6.1.1 from the Alpine repos, but upnpclient==1.0.3 pins lxml<5.0.0,>=4.0.0. Since the installed version doesn't satisfy that range, pip tries to build lxml 4.9.4 from source, which fails because libxml2-dev/libxslt-dev headers aren't in the image.

Suggested fix: skip pip's lxml resolution for upnpclient and let it use the apk-installed version (lxml 6.x works fine with upnpclient in practice):

RUN apk add --no-cache python3 py3-pip py3-lxml \
 && pip3 install --no-cache-dir --break-system-packages --no-deps upnpclient==1.0.3 \
 && pip3 install --no-cache-dir --break-system-packages \
        ifaddr \
        websocket-client==1.9.0 \
        paho-mqtt==2.1.0

--no-deps avoids the lxml conflict entirely; ifaddr is added back manually since it's upnpclient's only other dependency.

This will likely affect everyone installing fresh right now, since it depends on whatever lxml version Alpine currently ships rather than anything add-on-specific. Happy to open a PR with this change if useful.

Thanks again for the great project!

can someone be so kind and post a example for multi speaker support for docker standlone usage?
the readme only says:
Multi-speaker in standalone mode is available via SPEAKERS_JSON (a JSON array of speaker objects containing host, preset_1_urlpreset_6_url, etc.). network_mode: host is required so the bridge can receive SSDP multicast and reach the speaker's UPnP port.

but how is the syntax in compose?

and:

unfortunately i'm also getting:
(402, "Can't play. No URI supplied.")

Hi, I am very green with regards to Home Assistant and have just got it installed on a mini pc. my Bose Sound Touch 20 no longer works on the presets and your solution looks perfect, i just want my 6 presets to work 6 radio station.
Can anyone help me with how to install and set this up on Home assistant as its not clear to me and over my head. thanks in advance.

sound touch reborn (STR) works now, but i uninstalled sound touch plus HACS integration since it did not work anymore after STR. Don’t think other soundtouch (offcial HA or HACS) still work (maybe only volume control,…). Was wondering maybe there will be a STR HACS addon since the new STR exposes a brand new API interface.