Files
Busch-Radio-Spotify/README.md
retr0 6f4e408190 Release v1.0.7: OAuth-Server korrekt auf 0.0.0.0 gebunden
Die bisherigen Patches zielten auf Muster, die in oauth/src/lib.rs
nicht vorhanden sind. Der tatsächliche Bind-Aufruf ist
TcpListener::bind(socket_address) – dieser wird jetzt direkt durch
SocketAddrV4::new(Ipv4Addr::UNSPECIFIED, port) ersetzt.

Dadurch ist der OAuth-Callback-Server unter http://<ha-ip>:5588
erreichbar. Der Benutzer ersetzt nach der Spotify-Weiterleitung
127.0.0.1 durch die HA-IP in der Adressleiste.

run.sh erkennt die HA-IP automatisch und zeigt eine klare
Schritt-für-Schritt-Anleitung beim ersten Start.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-06 22:57:35 +02:00

6.2 KiB
Raw Blame History

Busch-Radio Spotify Bridge

Busch-Radio Spotify Bridge

Spotify-Musik auf dem Busch-Jäger Unterputz-Internetradio ohne Bluetooth.


Problem

Das Busch-Jäger Unterputz-Internetradio kann nur Internetradio-Streams abspielen. Es hat kein Bluetooth und keine Spotify-Integration. Spotify-Musik lässt sich damit direkt nicht wiedergeben.

Lösung

Dieses Projekt besteht aus zwei Teilen:

  1. Home Assistant Add-on startet ein virtuelles Spotify Connect-Gerät (librespot) und stellt das Audio als MP3-Stream über Icecast bereit
  2. Custom Component (optional) zeigt den Stream-Status als Media-Player-Entity in HA an

Funktionsweise

Spotify-App → [Spotify Connect] → librespot → PCM → ffmpeg → Icecast2 → HTTP-Stream → Busch-Jäger Radio

Voraussetzungen

Anforderung Details
Home Assistant OS, Supervised oder Container
Spotify Premium Pflicht für Spotify Connect
Busch-Jäger Radio Muss benutzerdefinierte Stream-URLs unterstützen

Installation

1. Repository in HA hinzufügen

  1. Einstellungen → Add-ons → Add-on Store
  2. Drei Punkte oben rechts → Repositories
  3. URL eintragen: https://gitea.bitfire.work/retr0/Busch-Radio-Spotify
  4. Busch-Radio Spotify Bridge erscheint im Store
  5. Installieren (der erste Build dauert ~1015 Minuten wegen Rust-Kompilierung)

2. Add-on konfigurieren

device_name: "Busch-Radio"       # Name in der Spotify-App
bitrate: 320                      # 96 / 160 / 320 kbps
stream_port: 8000                 # HTTP-Port des Streams
stream_mount: "/stream.mp3"       # URL-Pfad
icecast_password: "geheim"        # Icecast-Passwort (bitte ändern)

3. Add-on starten & Spotify autorisieren

Beim ersten Start erscheint im Log eine Anleitung. Folge diesen Schritten:

  1. Im Log erscheint eine Zeile wie:

    Browse to: https://accounts.spotify.com/authorize?...
    

    Kopiere diese URL vollständig und öffne sie im Browser.

  2. Melde dich mit deinem Spotify-Konto an und erteile die Berechtigung.

  3. Dein Browser wird danach weitergeleitet auf eine URL wie:

    http://127.0.0.1:5588/login?code=...
    

    Diese Seite schlägt fehl das ist normal.

  4. Ersetze in der Adressleiste 127.0.0.1 durch die IP deines Home-Assistant-Servers und drücke Enter:

    http://<homeassistant-ip>:5588/login?code=...
    
  5. Bei Erfolg zeigt der Browser: Autorisierung erfolgreich!
    Das Add-on startet danach automatisch durch.

Die Credentials werden dauerhaft unter /data/librespot-cache/ gespeichert — dieser Schritt ist nur einmalig nötig.

4. Stream im Radio eintragen

Trage folgende URL im Busch-Jäger Radio ein:

http://<homeassistant-ip>:8000/stream.mp3

5. Musik abspielen

  1. Spotify-App öffnen
  2. Abspielgerät wechseln → „Busch-Radio" auswählen
  3. Das Radio spielt den Stream automatisch ab

Custom Component (optional)

Die Custom Component zeigt den Stream-Status als Media-Player-Entity in HA.

Installation:

cp -r custom_components/busch_radio_spotify /config/custom_components/
# HA neu starten

Dann unter Einstellungen → Integrationen → Busch-Radio Spotify Bridge einrichten. Das Passwort muss mit icecast_password aus der Add-on-Konfiguration übereinstimmen.

Entity-Attribute:

Attribut Beschreibung
stream_url Die URL für das Radio
listeners Anzahl aktiver Hörer
source_connected Ob Audio gestreamt wird

Technische Details

Komponenten

Komponente Funktion
librespot v0.7.0 Spotify Connect Client (PCM-Ausgabe via Pipe)
ffmpeg PCM → MP3 Transkodierung
Icecast HTTP-Stream-Server

Signalfluss

Spotify CDN → librespot (dekodiert, PCM auf stdout)
           → ffmpeg (44100 Hz / S16LE / Stereo → MP3 320k)
           → Icecast (HTTP-Stream)
           → Busch-Jäger Radio

Hinweise zum Build

  • librespot wird aus dem Quellcode kompiliert (Rust, ~1015 Min.)
  • Der OAuth-Server wird beim Build gepatcht: bindet an 0.0.0.0 statt 127.0.0.1, damit der Browser-Login aus dem Heimnetz funktioniert
  • Credentials werden in /data/librespot-cache/ persistent gespeichert

Fehlerbehebung

Problem Lösung
„Busch-Radio" erscheint nicht in Spotify OAuth-Autorisierung abschließen (Logs prüfen)
Stream-Seite nicht erreichbar Icecast-Status: http://ha-ip:8000
OAuth-Weiterleitung schlägt fehl Normal 127.0.0.1 in Adressleiste durch HA-IP ersetzen
Stream bricht bei Pause ab Normal Radio nach Fortsetzen neu verbinden
Build schlägt fehl Logs im Add-on Store prüfen

Rechtliche Hinweise

  • Dieses Projekt nutzt librespot, eine Open-Source-Reimplementierung des Spotify-Clients
  • Audio wird nicht gespeichert ausschließlich live gestreamt
  • Ausschließlich für den privaten Heimgebrauch gedacht
  • Spotify Premium ist für Spotify Connect erforderlich

Projektstruktur

busch-radio-spotify/
├── busch_radio_spotify/         # Home Assistant Add-on
│   ├── Dockerfile               # Multi-Stage Build (Rust + Alpine)
│   ├── config.yaml              # Add-on Manifest & Optionen
│   ├── build.yaml               # Multi-Arch Konfiguration
│   ├── run.sh                   # Startup-Script
│   ├── icon.png                 # Add-on Icon (Store)
│   └── logo.png                 # Add-on Logo (Detailseite)
├── custom_components/           # Optionale HA Integration
│   └── busch_radio_spotify/
│       ├── __init__.py
│       ├── manifest.json
│       ├── media_player.py
│       ├── config_flow.py
│       └── translations/
├── example-config.yaml          # Beispielkonfiguration
├── repository.yaml              # HA Repository-Manifest
└── README.md

Lizenz

MIT License