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>
Spotify-Musik auf dem Busch-Jäger Unterputz-Internetradio – ohne Bluetooth.
Spotify-Musik auf dem Busch-Jäger Unterputz-Internetradio – ohne Bluetooth.
</p>
---
## Problem
## Problem
Das **Busch-Jäger Unterputz-Internetradio**(z.B. 8217 U) kann nur vordefinierte oder eigene Internetradio-Streams abspielen. Es hat kein Bluetooth und keine Spotify-Integration. Spotify-Musik lässt sich damit direkt nicht wiedergeben.
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
## Lösung
Dieses Projekt enthält:
Dieses Projekt besteht aus zwei Teilen:
1.**Home Assistant Add-on**–erzeugt ein virtuelles **Spotify Connect-Gerät** im Netzwerk und stellt das Audio als HTTP-MP3-Stream bereit
1.**Home Assistant Add-on**–startet ein virtuelles Spotify Connect-Gerät ([librespot](https://github.com/librespot-org/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
2.**Custom Component** (optional) – zeigt den Stream-Status als Media-Player-Entity in HA an
Dann unter **Einstellungen → Integrationen → Integration hinzufügen → Busch-Radio Spotify Bridge** einrichten.
Dann unter **Einstellungen → Integrationen → Busch-Radio Spotify Bridge** einrichten. Das Passwort muss mit `icecast_password` aus der Add-on-Konfiguration übereinstimmen.
---
**Entity-Attribute:**
## Bedienung
1. Öffne die **Spotify-App** auf Smartphone oder Computer
2. Spiele ein Lied ab
3. Tippe auf das **Gerät-Symbol** (unten in der App)
Spotify CDN → librespot (dekodiert, PCM auf stdout)
→ librespot (dekodiert, gibt PCM aus)
→ ffmpeg (44100 Hz / S16LE / Stereo → MP3 320k)
→ stdout (44100 Hz, S16LE, Stereo = 176.4 KB/s)
→ Icecast (HTTP-Stream)
→ ffmpeg stdin
→ Busch-Jäger Radio
→ MP3-Kodierung (libmp3lame, 320 kbps ≈ 40 KB/s)
→ Icecast (HTTP-Streaming-Server)
→ Busch-Jäger Radio (HTTP-Client)
```
```
### PCM-Format von librespot
### Hinweise zum Build
- Sample Rate: 44100 Hz
- Bit-Tiefe: 16-bit signed, Little-Endian
- Kanäle: 2 (Stereo)
- Rohe Datenrate: ~172 KB/s
### Restart-Verhalten
- librespot wird aus dem Quellcode kompiliert (Rust, ~10–15 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
Die Pipeline `librespot | ffmpeg` wird bei Absturz automatisch nach 5 Sekunden neu gestartet. Icecast bleibt davon unberührt.
- Credentials werden in `/data/librespot-cache/` persistent gespeichert
---
---
## Fehlerbehebung
## Fehlerbehebung
### Das Gerät erscheint nicht in der Spotify-App
| Problem | Lösung |
|---|---|
**Ursachen & Lösungen:**
| „Busch-Radio" erscheint nicht in Spotify | OAuth-Autorisierung abschließen (Logs prüfen) |
| Stream-Seite nicht erreichbar | Icecast-Status: `http://ha-ip:8000` |
- **Add-on läuft nicht** → Add-on-Status in HA prüfen
| OAuth-Weiterleitung schlägt fehl | Normal – `127.0.0.1` in Adressleiste durch HA-IP ersetzen |
- **Anderes WLAN/Subnetz** → Smartphone und HA müssen im selben Netzwerk sein
| Stream bricht bei Pause ab | Normal – Radio nach Fortsetzen neu verbinden |
- **mDNS blockiert** → Spotify-Zugangsdaten in der Add-on-Konfig eintragen
| Build schlägt fehl | Logs im Add-on Store prüfen |
- **Gerätename bereits vergeben** → `device_name` in der Konfig ändern
- **Firewall** → Port 5353 (mDNS/UDP) und Port 8000 (TCP) freigeben
### Kein Audio / Stream leer
```bash
# Im Browser öffnen – sollte die Icecast-Statusseite zeigen:
http://homeassistant-ip:8000
# Wenn das funktioniert, aber kein Audio:
# → In Spotify das Gerät "Busch-Radio" auswählen und abspielen
```
### Stream bricht ab beim Pausieren
Das ist das erwartete Verhalten: Wenn Spotify pausiert, sendet librespot nichts mehr an Icecast. Das Radio verliert die Verbindung.
**Lösung:** Nach dem Fortsetzen der Wiedergabe in Spotify den Stream im Radio kurz stoppen und wieder starten.
*Zukünftige Verbesserung: Stille-Generierung bei Pause geplant.*
### ffmpeg startet nicht / Kodierungsfehler
```bash
# Add-on Logs prüfen auf Zeilen wie:
[WARNING][ffmpeg] ...
# Häufige Ursachen:
# - libmp3lame nicht installiert (ffmpeg ohne MP3-Support)
# - Icecast-Passwort stimmt nicht überein
# - Port 8000 bereits belegt
```
### Icecast antwortet mit 401 (in der Custom Component)
Das Passwort in der Custom Component-Konfiguration stimmt nicht mit `icecast_password` im Add-on überein. Integration neu einrichten.
---
---
## Rechtliche Hinweise
## Rechtliche Hinweise
### librespot und Spotify ToS
- Dieses Projekt nutzt **librespot**, eine Open-Source-Reimplementierung des Spotify-Clients
- Audio wird **nicht gespeichert** – ausschließlich live gestreamt
- Dieses Projekt nutzt **librespot**, eine quelloffene Reimplementierung des Spotify-Clients
- Ausschließlich für den **privaten Heimgebrauch** gedacht
- Librespot ist ein **Spotify Connect-Client** und kein Downloader/Recorder
- **Spotify Premium** ist für Spotify Connect erforderlich
- Audio wird **nicht gespeichert**– nur live gestreamt
- Die Nutzung im privaten Heimbereich ist technisch weitgehend akzeptiert, kann aber gegen **Abschnitt 2.5** von Spotifys Nutzungsbedingungen verstoßen
- **Spotify Premium ist erforderlich** – kostenlose Konten funktionieren nicht
- Dieses Projekt ist ausschließlich für den **persönlichen Privatgebrauch** gedacht
### Verwendete Open-Source-Lizenzen
- **librespot** – MIT License
- **ffmpeg** – LGPL 2.1+ / GPL 2+
- **Icecast** – GPL 2
---
---
@@ -314,46 +178,27 @@ Das Passwort in der Custom Component-Konfiguration stimmt nicht mit `icecast_pas
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.