BoseFix32 — lokaler SoundTouch-Cloud-Ersatz auf einem ESP32

Begonnen von tostmann, 21 Mai 2026, 00:26:36

Vorheriges Thema - Nächstes Thema

tostmann

Bose hat am 6. Mai 2026 die SoundTouch-Cloud abgeschaltet. Damit gehen auf den Speakern Presets, NowPlaying, Stereo-Pairing, Updates etc. ins Leere. Die Firmware kann nicht gepatcht werden — die Boxen sprechen weiter ihr BMX-Cloud-Protokoll, nur niemand antwortet mehr.

BoseFix32 ist eine Firmware für einen handelsüblichen ESP32. Wer hier mitliest hat vermutlich eh schon einen ESP32 für andere FHEM-Sachen rumliegen — das reicht. Für die nicht-Bastler in der Familie (Mutti, Oma, der Nachbar mit der SoundTouch im Wohnzimmer): jeder 5-€-ESP32 vom Distributor tut's, geflasht wird per Chrome-Browser auf install.busware.de/bosefix/ — einmal "Connect" klicken, dauert ~30 Sekunden, fertig. Wer auch das nicht selbst machen will: ein technik-affiner Bekannter flasht den Stick einmalig, dann läuft er autonom im LAN. Keine Cloud, kein Account, kein Abo. Eine USB-Stromversorgung und WLAN reichen.

Was es kann:
  • SoundTouch 10 / 20 / 30 entdeckt sich via SSDP + Auto-Discovery
  • Migration in einem Klick: rewrite der Cloud-URLs am Speaker via Telnet :17000, Presets bleiben erhalten
  • TuneIn-Stations spielen direkt (Live-Resolver gegen radiotime.com)
  • Custom Stream-URLs als Preset (z.B. Fritzbox-Radio, RadioBrowser-Stationen)
  • DLNA / UPnP / Bluetooth-Presets als Passthrough — Speaker spricht den DLNA-Server eh direkt an, BoseFix32 reicht das ContentItem nur durch
  • Stereo-Pair / Multi-Room-Gruppen, NowPlaying-Telemetrie, Preset-Long-Press-Push
  • Web-UI auf http://bosefix.local/ für alles — discovery, migration, presets, gruppen
  • Diagnostic-Snapshot per Knopfdruck wenn was nicht klappt — JSON-Dump kann direkt an den Maintainer hochgeladen werden

Was es nicht kann:
  • Spotify (technisch möglich über Connect+OAuth, aber eigenes Projekt)
  • Amazon Prime Music (war nie eine eigene BMX-Source, lief nur über die App)
  • Andere Bose-Speaker als SoundTouch 10/20/30 — andere Modelle ungetestet

Installation: https://install.busware.de/bosefix/ — der Webflasher erkennt den ESP automatisch, Chrome / Edge öffnen, "Connect" klicken, fertig. Es geht jeder ESP32 den ihr rumliegen habt: classic, S3, C3, C6 — alle vier Targets werden gebaut und im Webflasher angeboten. Empfehlung wenn ihr neu kauft: ein ESP32-S3-DevKitC-1-N16R8 (~10 €) wegen 16 MB Flash und 8 MB PSRAM, mehr Headroom für künftige Features. Funktioniert aber auch auf einem 4-MB-ESP32 classic aus der Schublade.

Quellen:

Stand: v0.6.0 ist gerade frisch released (DLNA-Passthrough + Diagnostic-Snapshot). OTA-Update von älteren Versionen läuft.

Feedback, Bug-Reports und vor allem Snapshots von Geräten die exotische Source-Types nutzen sind willkommen — der Diagnostic-Snapshot-Knopf im WebUI lädt das direkt an mich hoch (ohne WLAN-Passwort, ohne Tokens — nur Speaker-MAC, FW-Version, Source-XMLs).

So long,
Dirk

P.S.: Ich war doch verwundert wie viele Bose-Nutzer es außer mir gibt und wie eine solche Firma einfach den Schalter umlegen kann — lasst es uns eine Warnung sein ...

tostmann


Antwort auf: https://forum.fhem.de/index.php?topic=144574.msg1363970#msg1363970

Schön, dass das Update durchgelaufen ist und DLNA jetzt wieder funktioniert. Zu deinen Punkten der Reihe nach:

DLNA-Preset NEU anlegen
Aktuell nein. BoseFix32 reicht ein DLNA-ContentItem, das der Speaker schon hatte, 1:1 wieder zurueck — er bringt also seine alten Presets ueber die Migration. Aber: einen DLNA-Server zu browsen (Ordner aufklappen, Track waehlen, als Preset speichern) heisst, einen UPnP/ContentDirectory-Client im ESP32 zu haben. Das ist substantieller Aufwand und steht aktuell nicht auf der Liste — ehrlicher Stand. Was als Workaround geht: wenn du die Stream-URL deines Fritzbox-Webradios oder einer DLNA-Quelle direkt kennst (z.B. aus der Fritzbox-UI rauskopiert), kannst du sie als "Direct stream (URL)" in BoseFix32 als Preset speichern. Das ist dann technisch INTERNET_RADIO, nicht STORED_MUSIC, aber fuer Webradio-Streams ist das identisch von der Funktion.

Spotify
Ehrlich nein. Spotify Connect vom Handy laeuft ja schon — der Speaker spricht da direkt mit dem Spotify-Dienst, BoseFix32 ist gar nicht im Pfad. Damit Playlists als Preset gehen wuerde, brauchen wir Spotify-OAuth + die Spotify-Web-API fuer Playlist-Browsing + die ContentItem-Struktur source="SPOTIFY". Das ist ein eigenes Projekt — kein "kommt naechste Woche". Vorlaeufiger Tipp: in der BoseConnect-/SoundTouch-Hardware-Buttons-1-6 ueber Spotify Connect zu mappen geht ja eh nicht, das funktioniert nur ueber dieses Long-Press am Speaker — und genau das macht BoseFix32 fuer alle anderen Quellen. Spotify ist die Luecke, ja.

bosest 7-20
Bose-Speaker haben hardware-seitig Buttons 1-6. Die Slots 7-20 die das FHEM-Modul "bosest" anbietet sind eine FHEM-Erweiterung — das Modul merkt sich die ContentItems lokal und sendet sie per /select an den Speaker, ohne dass es einen physischen Button-Press dafuer gaebe. Technisch interessant, BoseFix32 macht das aktuell nicht — denkbar als WebUI-Feature ("zusaetzliche Quick-Picks ohne Long-Press"), aber kein konkretes Date.

Amazon Prime Music in Bosman
Danke fuer den Hinweis. Wenn Bosman das hinkriegt waere das eine extra Source. Bei BoseFix32 nicht geplant — Amazon-API ist hostile, OAuth, Geo-Locked, das wird nur zum Frust.

Snapshot — welcher Speaker?
Der beste Snapshot fuer mich ist: ein bereits migrierter Speaker, der ein funktionierendes DLNA-Preset enthaelt. Also genau der, an dem du jetzt nach dem v0.6.0-Update das DLNA-Preset wieder siehst. Da lese ich das echte ContentItem im rohen XML-Format heraus und sehe, wie dein DLNA-Server (Fritzbox?) die UPnP-URL formatiert. Mit diesem Format kann ich beurteilen, ob man eine "DLNA-URL hinterlegen"-UI bauen koennte, ohne einen vollen UPnP-Browser zu implementieren. Snapshot frisch nach Reset oder vor Migration brauchst du nicht zu uebernehmen — frisch zurueckgesetzt hat eh nichts drin und unmigriert hat keine relevanten Daten mehr (Cloud ist aus). Klick einfach im WebUI auf den Speaker, dann auf "Diagnostic snapshot" → "Send to maintainer". Kein Account, kein Token, kein WLAN-Passwort enthalten.

6 von 8 Geraeten — der wichtigste Punkt
Das ist ein echter Bug oder Setup-Problem, dem will ich nachgehen. Was BoseFix32 macht:

  • SSDP-Multicast M-SEARCH auf 239.255.255.250:1900, ST=urn:schemas-upnp-org:device:MediaRenderer:1, 4 Sekunden lauschen
  • Bekannte IPs aus dem NVS (alle frueher gesehenen Speaker) abklopfen
  • Active-Scan ueber /24 wenn entsprechend konfiguriert
  • Manuelle IP: HTTP-GET http://IP:8090/info, erwartet wird ein XML mit "<info deviceID=...>"

Damit ein Speaker NICHT entdeckt wird, muss mindestens einer dieser Punkte fehlschlagen. Diagnose-Schritte die mir helfen wuerden:

  • Welche Bose-Modelle sind die 2 fehlenden? (SoundTouch 10/20/30, Wave SoundTouch, SoundTouch 130/300/520, Wireless Link Adapter, Soundbar, ...)
  • IP-Adressen der 2 fehlenden Speaker — bekommst du die aus deinem Router oder aus FHEM/bosest? Bitte gegen die manuell adden im BoseFix32-WebUI testen.
  • Wenn manuell-add fehlschlaegt: auf einer Shell folgendes absetzen:curl -v http://<fehlende-ip>:8090/infoBekommst du da ein XML zurueck das mit "<info deviceID=..." beginnt? Oder gibt es Connection-Refused / Timeout / anderen Inhalt?
  • Sind alle 8 Geraete im selben Subnetz (gleiches /24)? Multicast/SSDP geht nur innerhalb des Broadcast-Domain.
  • Hast du IGMP-Snooping auf deinem Switch oder Multicast-Filtering auf dem AP? Auf Aruba- oder Unifi-Setups verschluckt das gerne SSDP-Antworten — fuer 6 von 8 Geraeten klappt es dann zufallsverteilt.

Wenn du mir die Modelle der 2 fehlenden Speaker und das curl-Ergebnis vom /info-Endpoint nennst, finden wir die Ursache schnell. Bei einem v.a. Multicast-Problem koennte ich auch nochmal mehr Spam-Logging in den Discovery-Code einbauen — dann sieht man im seriellen Output von BoseFix32 welche IPs auf M-SEARCH antworten und welche nicht.

So long,
Dirk