Ohne -re liest ffmpeg den PCM-Stream von librespot so schnell wie
möglich. librespot meldet die Position dann zu schnell an Spotify,
was dazu führt dass Tracks im Sekundentakt wechseln und Stop/Skip
vom Handy nicht funktionieren.
Mit -re wird der Input auf native Framerate gedrosselt (44100 Hz
S16LE Stereo → ~176 kB/s), sodass Position korrekt gemeldet wird.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Bei Spotify-Pause fliesst kurz kein PCM → Icecast trennte ffmpeg
nach 10s. Mit 30s bleibt die Verbindung bei kurzen Pausen stabil.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Busch-Radio iNet 8216 U unterstützt max. 192 kbps und die Formate
MP3, AAC und OGG. Neue Konfigurationsoptionen:
- stream_format: mp3 (Standard) oder aac
- bitrate: 96/128/160/192 kbps (max. des Radios)
Default auf 160 kbps MP3 geändert (war 320 kbps – über Radio-Maximum).
Stream-URL im Log zeigt jetzt die echte HA-IP statt Platzhalter.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v0.7.0 hat Kompatibilitätsprobleme mit Spotifys aktuellem Backend:
Spotify liefert keine Audio-Datei-IDs mehr zurück, alle Tracks
werden als "not available" gemeldet. Der main-Branch enthält Fixes.
--locked entfernt (war nur für v0.7.0 wegen vergen-Konflikt nötig).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Behebt "context is not available. type: Default" Fehler,
bei dem librespot keine Tracks laden konnte. Die Angabe des
Device-Types hilft Spotify den Client korrekt zu klassifizieren.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
librespot schreibt die 'Browse to:'-URL mit println! auf stdout,
das direkt in die ffmpeg-Pipe geht – die URL war dadurch nie im
Log sichtbar, und ffmpeg erhielt Text statt PCM (Absturz-Schleife).
Fix: println! → eprintln! im librespot-Quellcode-Patch, sodass
die URL auf stderr landet und im HA-Log erscheint.
Außerdem: Patch-Verifikation schlägt jetzt mit exit 1 fehl statt
stillschweigend weiterzumachen (|| true → || exit 1).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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>
icon.png → wird im HA Add-on Store angezeigt
logo.png → wird auf der Add-on Detailseite angezeigt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Erweiterter sed-Patch der oauth/src/lib.rs:
- '127.0.0.1' (String-Literal)
- [127, 0, 0, 1] (Array-Syntax)
- Ipv4Addr::LOCALHOST (Rust-Konstante → Ipv4Addr::UNSPECIFIED)
Build gibt die gepatchten Zeilen aus damit der Patch nachvollziehbar ist.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
librespot bindet den OAuth-Callback-Server an 127.0.0.1 (nur lokal
erreichbar). Das macht den OAuth-Flow von Heimnetz-Geräten unmöglich.
Fix: librespot Quellcode wird geklont, oauth/src/lib.rs gepatcht
(127.0.0.1 → 0.0.0.0), und dann mit cargo build kompiliert.
Damit ist http://<ha-ip>:5588 aus dem Browser im Heimnetz erreichbar.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Zeroconf/mDNS schlägt in Containern fehl weil Port 5353 vom Host
(systemd-resolved/avahi) bereits belegt ist. mdns-sd kann den Socket
nicht teilen → librespot: 'discovery disabled'.
Lösung: OAuth-Authentifizierung (der offiziell unterstützte Weg in
librespot 0.7+). Das Gerät registriert sich bei Spotifys Servern und
erscheint ohne lokales mDNS in der Spotify-App.
- --disable-discovery + --enable-oauth + --system-cache /data/librespot-cache
- Credentials werden in /data persistent gespeichert (data:rw)
- Beim ersten Start: URL im Log → Browser öffnen → Spotify autorisieren
- Ab dem zweiten Start: direkt mit gecachten Credentials
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
librespot 0.7+ unterstützt --password nicht mehr (nur noch OAuth/Zeroconf).
Der --password-Arg ließ librespot sofort abstürzen → leere Pipeline.
- username/password aus config.yaml und run.sh entfernt
- librespot nutzt jetzt ausschließlich Zeroconf/mDNS zur Erkennung
- Gerät erscheint automatisch in der Spotify-App im lokalen Netz
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Bugfixes:
- Repository-Struktur für HAOS Add-on Store korrigiert
- args.BUILD_FROM aus build.yaml entfernt (hat BUILD_FROM überschrieben)
- librespot via git+locked gebaut (vergen-gitcl Versionskonflikt behoben)
- native-tls Feature für librespot-oauth aktiviert
- Icecast startet nicht mehr als root (changeowner nobody)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Icecast verweigert den Start als root. Lösung:
- changeowner-Direktive in icecast.xml: wechselt zu nobody nach Start
- Log- und Run-Verzeichnisse gehören nobody für Schreibzugriff
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
--no-default-features deaktiviert auch native-tls, das librespot-oauth
als Pflicht-Feature benötigt (compile_error wenn keins der TLS-Features
aktiv ist). native-tls explizit wieder hinzufügen.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
cargo install von crates.io löst immer die neuesten Abhängigkeiten auf
und zieht vergen-gitcl >=1.0 rein (vergen-lib 9.x), was mit dem
build.rs von librespot-core kollidiert (erwartet vergen-lib 0.1.x).
Mit --git --tag v0.7.0 --locked wird das originale Cargo.lock aus
dem Release-Tag verwendet, das vergen-gitcl 0.x pinnt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v0.8.0 hat einen Build-Fehler (E0277): vergen und vergen-lib liegen in
inkompatiblen Versionen im Dependency-Graph vor, was den Build-Script
von librespot-core bricht. v0.7.0 ist stabil und frei von diesem Bug.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Der Supervisor setzt BUILD_FROM selbst aus build_from[arch].
Das args-Feld hat den Wert überschrieben und auf leer gesetzt.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- ha-addon/ → busch_radio_spotify/ (Ordner muss dem Slug entsprechen)
- repository.yaml im Root hinzugefügt (von HAOS zum Erkennen des Repos benötigt)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Stellt Spotify-Musik via Spotify Connect als HTTP-MP3-Stream bereit,
den das Busch-Jäger Unterputz-Internetradio direkt abspielen kann.
Komponenten:
- ha-addon/: Home Assistant Add-on (librespot + ffmpeg + Icecast2)
- custom_components/: Optionale HA Integration mit Media-Player-Entity
- README.md: Vollständige Installations- und Konfigurationsanleitung
- example-config.yaml: Kommentierte Beispielkonfiguration
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>