Bose SoundTouch End-of-Life – Abschaltung Bose Clouddienste: Lösung OpenCloudTouch

Bose SoundTouch 10 und SoundTouch 20 auf einem Sideboard (Symbolbild)

Als Bose die Cloud für die SoundTouch-Lautsprecher abgeschaltet hat, standen bei meiner Mutter Lautsprecher herum, die zwar noch top klingen, aber Presets und Internetradio verloren hatten. Statt sie zu entsorgen, habe ich sie mit OpenCloudTouch (OCT) auf einem Raspberry Pi wiederbelebt. In diesem Beitrag zeige ich Schritt für Schritt, wie ich das umgesetzt habe – inklusive Fernwartung per Tailscale.

Bose SoundTouch 10 und SoundTouch 20 auf einem Sideboard (Symbolbild)
Bose SoundTouch 10 (links) und SoundTouch 20 (rechts) – Symbolbild

Wie funktioniert OpenCloudTouch?

Die SoundTouch-Geräte haben früher für Presets, Radiostreams und Kontoverwaltung bei Bose-Servern nachgefragt. OpenCloudTouch ist ein Open-Source-Projekt, das genau diese Endpunkte lokal nachbildet. Es läuft als ein einzelner Docker-Container (FastAPI-Backend + React-Weboberfläche) und bringt mit:

  • Internetradio mit Belegung der Preset-Tasten 1–6
  • Weboberfläche für Desktop und Smartphone
  • automatische Geräteerkennung per SSDP/UPnP, alternativ feste IPs
  • Multiroom-Zonen
  • Radiosuche über RadioBrowser, TuneIn als Stream-Auflöser für bestehende Presets

⚠️ Achtung: OCT verändert die Konfiguration der Lautsprecher. Die Nutzung erfolgt auf eigene Gefahr – das Projekt weist selbst ausdrücklich darauf hin.

Meine Hardware

KomponenteDetails
LautsprecherBose SoundTouch 10 und SoundTouch 20
ServerRaspberry Pi 3B (armhf/arm64)
BetriebssystemRaspberry Pi OS
SoftwareDocker + Docker Compose
NetzwerkStandard-Kabelrouter vom Provider (keine Fritz!Box)
FernzugriffTailscale auf dem Pi

Schritt 1: Docker auf dem Pi installieren

sudo apt update && sudo apt full-upgrade -y
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker pi
# einmal ab- und wieder anmelden, dann testen:
docker version
docker compose version

Schritt 2: docker-compose.yml anlegen

Ich habe für OCT einen eigenen Ordner im Home-Verzeichnis angelegt:

mkdir -p ~/opencloudtouch && cd ~/opencloudtouch
nano docker-compose.yml
services:
  opencloudtouch:
    image: ghcr.io/opencloudtouch/opencloudtouch:stable
    container_name: opencloudtouch
    restart: unless-stopped
    network_mode: host
    volumes:
      - oct-data:/data
    environment:
      - OCT_DISCOVERY_ENABLED=true
      - OCT_LOG_LEVEL=INFO
      # Fallback, falls die Lautsprecher nicht automatisch gefunden werden:
      # - OCT_MANUAL_DEVICE_IPS=<IP-Lautsprecher-1>,<IP-Lautsprecher-2>

volumes:
  oct-data:

💡 Tipp: network_mode: host ist wichtig. Ohne Host-Netzwerk funktioniert die Geräteerkennung per SSDP/UPnP nicht, weil die Broadcast-Pakete den Container nicht erreichen.

Schritt 3: Container starten

docker compose pull
docker compose up -d
docker compose logs -f

Danach ist die Weboberfläche unter http://<IP-des-Pi>:7777 erreichbar. Der Standard-Login lautet oct / opencloudtouch – das Passwort sollte man direkt ändern.

Schritt 4: Die Lautsprecher vorbereiten – SSH per USB-Stick

Damit die Lautsprecher künftig mit dem Pi statt mit der Bose-Cloud sprechen, muss ihre Konfiguration angepasst werden. Dafür braucht man einen Zugang zum Linux-System im Lautsprecher, also SSH. Ab Werk ist das abgeschaltet. Bose hat aber einen Service-Mechanismus eingebaut: Ein USB-Stick mit einer bestimmten Datei schaltet den Fernzugang frei.

Was man braucht

TeilHinweis
USB-Stickklein und alt reicht völlig, wird komplett formatiert
USB-OTG-AdapterDie SoundTouch-Lautsprecher haben hinten eine Micro-USB-Service-Buchse. Ein normaler Stick passt da nicht direkt rein, man braucht einen Adapter von Micro-USB (Stecker) auf USB-A (Buchse), einen sogenannten OTG-Adapter.
Rechner mit TerminalMac, Linux oder Windows mit eingebautem OpenSSH

Bei meiner Mutter stehen eine Bose SoundTouch 10 und eine Bose SoundTouch 20. Beide haben hinten eine Micro-USB-Service-Buchse und lassen sich auf diesem Weg vorbereiten.

USB-Stick vorbereiten

  1. Stick mit FAT32 formatieren
  2. Im Hauptverzeichnis eine leere Datei namens remote_services anlegen – ganz ohne Dateiendung
  3. Stick sicher auswerfen

Am Mac geht das komplett im Terminal (Laufwerksnummer vorher mit diskutil list prüfen!):

diskutil list
# Achtung: diskX durch die richtige Nummer des USB-Sticks ersetzen!
diskutil eraseDisk FAT32 BOSE MBRFormat /dev/diskX

touch /Volumes/BOSE/remote_services
ls -la /Volumes/BOSE/

diskutil eject /dev/diskX

⚠️ Achtung: Beim Formatieren unbedingt die richtige Disk-Nummer erwischen. Eine falsche Nummer löscht im schlimmsten Fall eine andere Festplatte.

💡 Tipp: macOS legt gern versteckte Dateien wie .Spotlight-V100 oder ._remote_services auf Sticks ab. Das stört normalerweise nicht. Wenn der Lautsprecher den Stick partout nicht annimmt, hilft dot_clean /Volumes/BOSE vor dem Auswerfen. Manche Geräte verlangen außerdem, dass die Partition als „bootfähig“ markiert ist.

Stick einstecken und SSH freischalten

Rückseite eines Bose-SoundTouch-Lautsprechers: Micro-USB-Buchse „SERVICE“ über der AUX-Buchse
Hier kommt der USB-Stick rein: die Micro-USB-Buchse „SERVICE“ auf der Rückseite (über dem AUX-Anschluss).
  1. Lautsprecher einschalten und warten, bis er vollständig hochgefahren ist
  2. Stick über den OTG-Adapter in die Micro-USB-Buchse stecken
  3. Lautsprecher kurz vom Strom trennen und neu starten (Stick bleibt stecken)
  4. Nach dem Neustart ist SSH als root ohne Passwort erreichbar

Die IP-Adresse des Lautsprechers findet man in der Fritz!Box bzw. im Router unter den verbundenen Geräten. Ein schneller Test, ob der Lautsprecher antwortet und welche Firmware er hat:

curl -s http://<IP-Lautsprecher>:8090/info

Per SSH verbinden

Die Lautsprecher verwenden noch alte RSA-Schlüssel, die aktuelle SSH-Versionen standardmäßig ablehnen. Deshalb muss man den alten Algorithmus beim Verbinden ausdrücklich erlauben:

ssh -o HostKeyAlgorithms=+ssh-rsa \
    -o PubkeyAcceptedAlgorithms=+ssh-rsa \
    root@<IP-Lautsprecher>

Damit man das nicht jedes Mal tippen muss, kommt ein Eintrag in die ~/.ssh/config:

Host soundtouch-*
    User root
    HostKeyAlgorithms +ssh-rsa
    PubkeyAcceptedAlgorithms +ssh-rsa

Host soundtouch-kueche
    HostName <IP-Lautsprecher>
ssh soundtouch-kueche

Einmal eingeloggt, kann man sich auf dem Gerät umschauen, z. B.:

uname -a
cat /etc/hosts
df -h

⚠️ Achtung: Auf dem Lautsprecher ist man root. Hier nichts von Hand löschen oder „aufräumen“. Ein falscher Befehl kann den Lautsprecher unbrauchbar machen.

Schritt 5: Einrichtung über den OCT-Assistenten

Das eigentliche Umbiegen der Lautsprecher übernimmt der Einrichtungsassistent von OpenCloudTouch in der Weboberfläche. Er verbindet sich per SSH mit dem Lautsprecher und erledigt die nötigen Schritte automatisch:

  • Sicherung der bestehenden Konfiguration
  • Umleitung der früheren Bose-Server-Adressen auf den Pi
  • Grundkonfiguration der Quellen (Sources.xml)
  • auf Wunsch dauerhafte Aktivierung des Fernzugangs, damit der Stick danach nicht mehr stecken muss

Nach einem Neustart des Lautsprechers meldet er sich am Pi statt bei Bose. Danach kann der USB-Stick abgezogen werden.

💡 Tipp: Manche Modelle bzw. Firmware-Stände nehmen die USB-Freischaltung nicht an. Für einige Geräte gibt es einen Ausweg über die Diagnose-Schnittstelle auf TCP-Port 17000 – Details stehen im Wiki und in den Discussions des Projekts auf GitHub.

Schritt 6: Presets belegen

Sobald die Lautsprecher umgestellt sind, tauchen sie in der Oberfläche auf. Dort lassen sich Radiosender suchen und auf die sechs Preset-Tasten legen. Ein Druck auf die Taste am Lautsprecher spielt den Sender danach wieder ganz normal ab – genau wie früher.

✏️ Hat die Einrichtung der Geräte auf Anhieb geklappt? Gab es Stolpersteine beim USB-Stick?

Schritt 7: Fernwartung mit Tailscale

Da der Pi nicht bei mir steht, wollte ich Updates aus der Ferne einspielen, ohne Ports am Router freizugeben. Tailscale baut dafür ein verschlüsseltes VPN zwischen meinen Geräten auf:

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
# danach den angezeigten Link öffnen und den Pi im Tailscale-Konto freigeben
tailscale ip -4

Ab dann erreiche ich den Pi von überall per SSH über seine Tailscale-IP:

ssh pi@<tailscale-ip>

Updates einspielen

Im November 2026 habe ich die Installation bei meiner Mutter von einer alten 1.2.x-Version auf das aktuelle stable-Image gehoben. Der Ablauf ist kurz:

cd ~/opencloudtouch
docker compose pull
docker compose up -d
# alte Images aufräumen
docker image prune -f

Die Daten (Presets, Geräte) liegen im Volume oct-data und bleiben beim Update erhalten.

Fehlersuche

ProblemLösung
Container startet nichtdocker compose logs opencloudtouch prüfen
Lautsprecher werden nicht gefundennetwork_mode: host setzen, gleiches Netz/WLAN prüfen, ggf. OCT_MANUAL_DEVICE_IPS verwenden
Port 7777 belegtPort über OCT_PORT ändern
Gesundheitscheckdocker ps zeigt den Status healthy

Fazit

Mit einem Raspberry Pi für ein paar Euro und einer halben Stunde Arbeit laufen Lautsprecher wieder, die der Hersteller aufgegeben hat. Durch Docker sind Updates eine Sache von Sekunden, und mit Tailscale muss ich dafür nicht einmal vorbeifahren.

✏️ Dein persönliches Fazit: Was funktioniert wieder, was fehlt dir noch?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert