From 6f4e4081908283458afbc87e56428eaa39197db6 Mon Sep 17 00:00:00 2001 From: retr0 Date: Mon, 6 Apr 2026 22:57:35 +0200 Subject: [PATCH] Release v1.0.7: OAuth-Server korrekt auf 0.0.0.0 gebunden MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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://: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 --- README.md | 367 +++++++++----------------------- busch_radio_spotify/Dockerfile | 16 +- busch_radio_spotify/config.yaml | 2 +- busch_radio_spotify/run.sh | 29 ++- 4 files changed, 142 insertions(+), 272 deletions(-) diff --git a/README.md b/README.md index 7f29e2b..c2d0c92 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,30 @@ -# Busch-Radio Spotify Bridge +

+ Busch-Radio Spotify Bridge +

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

Busch-Radio Spotify Bridge

+ +

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

+ +--- ## 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 -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 +### Funktionsweise + ``` -Spotify-App - │ - │ Spotify Connect (WiFi) - ▼ -┌─────────────────────────────────────────────┐ -│ Home Assistant Add-on │ -│ │ -│ librespot ──(PCM)──▶ ffmpeg ──(MP3)──▶ Icecast │ -│ (Spotify Connect) (Kodierung) (HTTP-Server) │ -└─────────────────────────────────────────────┘ - │ - │ HTTP-Stream: http://ha-ip:8000/stream.mp3 - ▼ -Busch-Jäger Radio +Spotify-App → [Spotify Connect] → librespot → PCM → ffmpeg → Icecast2 → HTTP-Stream → Busch-Jäger Radio ``` --- @@ -36,176 +33,96 @@ Busch-Jäger Radio | Anforderung | Details | |---|---| -| Home Assistant | OS, Supervised oder Container (Add-on benötigt Supervisor) | +| Home Assistant | OS, Supervised oder Container | | Spotify Premium | Pflicht für Spotify Connect | | Busch-Jäger Radio | Muss benutzerdefinierte Stream-URLs unterstützen | -| Netzwerk | HA und Smartphone im gleichen WLAN/LAN | - -> **Wichtig:** Die kostenlose Version von Spotify unterstützt **kein** Spotify Connect. Ein Premium-Abo ist erforderlich. --- ## Installation -### 1. Add-on installieren +### 1. Repository in HA hinzufügen -#### Option A: Repository in HA hinzufügen - -1. Navigiere zu **Einstellungen → Add-ons → Add-on Store** -2. Klicke oben rechts auf **⋮ → Repositories** -3. Trage die URL dieses Repositories ein -4. Das Add-on **Busch-Radio Spotify Bridge** erscheint im Store -5. Installiere es (Kompilierung von librespot dauert ~10-15 Minuten) - -#### Option B: Manuell (für Entwickler) - -```bash -# Repository klonen -git clone https://gitea.bitfire.work/retr0/Busch-Radio-Spotify.git - -# ha-addon-Verzeichnis in HA Add-on-Pfad kopieren -# (unter Home Assistant OS: /addons/busch_radio_spotify) -cp -r busch-radio-spotify/ha-addon /addons/busch_radio_spotify - -# In HA: Einstellungen → Add-ons → Add-on Store → ⋮ → Lokale Add-ons prüfen -``` +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 ~10–15 Minuten wegen Rust-Kompilierung) ### 2. Add-on konfigurieren -Navigiere zu **Einstellungen → Add-ons → Busch-Radio Spotify Bridge → Konfiguration**: - ```yaml -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" # Sicherheitspasswort (bitte ändern!) -username: "" # Spotify-Konto (optional, s.u.) -password: "" # Spotify-Passwort (optional, s.u.) +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) ``` -> **Hinweis zu `username`/`password`:** Diese Felder sind optional. Ohne Zugangsdaten -> wird das Gerät über **Zeroconf/mDNS** automatisch im Netzwerk gefunden – das ist -> die empfohlene Methode. Zugangsdaten werden nur benötigt, wenn mDNS im Netzwerk -> blockiert ist. +### 3. Add-on starten & Spotify autorisieren -### 3. Netzwerk-Port freigeben +Beim **ersten Start** erscheint im Log eine Anleitung. Folge diesen Schritten: -Im Tab **Netzwerk** des Add-ons den Port `8000` auf `8000` mappen (oder einen anderen freien Port wählen). +1. Im Log erscheint eine Zeile wie: + ``` + Browse to: https://accounts.spotify.com/authorize?... + ``` + Kopiere diese URL vollständig und öffne sie im Browser. -### 4. Add-on starten +2. Melde dich mit deinem Spotify-Konto an und erteile die Berechtigung. -Im Tab **Info** auf **Starten** klicken. Die Logs zeigen: +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://: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: ``` -[INFO] Busch-Radio Spotify Bridge v1.0.0 -[INFO] Stream-URL für das Busch-Jäger Radio: -[INFO] http://:8000/stream.mp3 -[INFO] Wähle 'Busch-Radio' in der Spotify-App als Abspielgerät. +http://:8000/stream.mp3 ``` -### 5. Stream im Busch-Jäger Radio eintragen +### 5. Musik abspielen -Im Radio-Menü (je nach Modell verschieden) eine neue Internetradio-Station anlegen: +1. **Spotify-App** öffnen +2. Abspielgerät wechseln → **„Busch-Radio"** auswählen +3. Das Radio spielt den Stream automatisch ab -``` -URL: http://:8000/stream.mp3 -``` +--- -Ersetze `` durch die tatsächliche IP-Adresse deines Home Assistant, z.B. `192.168.1.100`. +## Custom Component (optional) -> **Tipp:** Die IP-Adresse findest du in HA unter **Einstellungen → System → Netzwerk**. +Die Custom Component zeigt den Stream-Status als Media-Player-Entity in HA. -### 6. Optional: Custom Component installieren - -Für die Status-Anzeige in HA: +**Installation:** ```bash -# custom_components-Verzeichnis in HA config kopieren -cp -r custom_components/busch_radio_spotify \ - /config/custom_components/busch_radio_spotify - +cp -r custom_components/busch_radio_spotify /config/custom_components/ # HA neu starten ``` -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. ---- - -## 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) -4. Wähle **"Busch-Radio"** (oder deinen konfigurierten Gerätenamen) -5. Die Musik wird automatisch über den Stream an das Radio übertragen - -> Das Radio muss die Stream-URL bereits abgespielt haben oder neu eingestellt werden, -> sobald Spotify mit dem Abspielen beginnt. - ---- - -## Einrichtung der Stream-URL im Radio (Modellabhängig) - -### Busch-Jäger 8217 U / ähnliche Modelle - -1. Ins Radio-Menü navigieren (meist über die Benutzeroberfläche oder App) -2. **Meine Sender → Sender hinzufügen** oder **Internetradio → Eigene URL** -3. URL eingeben: `http://192.168.1.100:8000/stream.mp3` -4. Namen vergeben: z.B. "Spotify" -5. Speichern und Stream starten - -### Alternativ: Über vTuner/Frontier Silicon Portal - -Einige Busch-Jäger Modelle nutzen vTuner als Radio-Backend: -1. Auf `http://www.wifiradio-frontier.com` registrieren -2. Unter "Meine Sender" → "Sender hinzufügen" die Stream-URL eintragen -3. Im Radio synchronisieren - ---- - -## Custom Component – Media Player Entity - -Nach der Installation der Custom Component erscheint ein neuer Entity in HA: - -**Entity-ID:** `media_player.busch_radio_192_168_1_100` - -| State | Bedeutung | -|---|---| -| `playing` | Mindestens ein Hörer verbunden | -| `idle` | Quelle aktiv, aber kein Hörer | -| `off` | Icecast nicht erreichbar | - -**Attribute:** +**Entity-Attribute:** | Attribut | Beschreibung | |---|---| | `stream_url` | Die URL für das Radio | | `listeners` | Anzahl aktiver Hörer | -| `source_connected` | Ob librespot an Icecast sendet | -| `bitrate_kbps` | Aktuelle Bitrate | - -**Dashboard-Karte (Beispiel):** - -```yaml -type: media-control -entity: media_player.busch_radio_192_168_1_100 -``` - -**Automatisierung – Radio starten wenn Spotify beginnt:** - -```yaml -automation: - alias: "Busch-Radio wenn Spotify spielt" - trigger: - platform: state - entity_id: media_player.busch_radio_192_168_1_100 - to: "playing" - action: - service: notify.mobile_app - data: - message: "Spotify spielt auf dem Busch-Radio" -``` +| `source_connected` | Ob Audio gestreamt wird | --- @@ -213,100 +130,47 @@ automation: ### Komponenten -| Komponente | Funktion | Version | -|---|---|---| -| [librespot](https://github.com/librespot-org/librespot) | Spotify Connect Client | Aktuell via cargo | -| [ffmpeg](https://ffmpeg.org) | PCM → MP3 Transkodierung | Via Alpine apk | -| [Icecast](https://icecast.org) | HTTP-Stream-Server | Via Alpine apk | +| Komponente | Funktion | +|---|---| +| [librespot](https://github.com/librespot-org/librespot) v0.7.0 | Spotify Connect Client (PCM-Ausgabe via Pipe) | +| [ffmpeg](https://ffmpeg.org) | PCM → MP3 Transkodierung | +| [Icecast](https://icecast.org) | HTTP-Stream-Server | -### Signalfluss im Detail +### Signalfluss ``` -Spotify CDN → (verschlüsselt, OGG Vorbis) - → librespot (dekodiert, gibt PCM aus) - → stdout (44100 Hz, S16LE, Stereo = 176.4 KB/s) - → ffmpeg stdin - → MP3-Kodierung (libmp3lame, 320 kbps ≈ 40 KB/s) - → Icecast (HTTP-Streaming-Server) - → Busch-Jäger Radio (HTTP-Client) +Spotify CDN → librespot (dekodiert, PCM auf stdout) + → ffmpeg (44100 Hz / S16LE / Stereo → MP3 320k) + → Icecast (HTTP-Stream) + → Busch-Jäger Radio ``` -### PCM-Format von librespot -- Sample Rate: 44100 Hz -- Bit-Tiefe: 16-bit signed, Little-Endian -- Kanäle: 2 (Stereo) -- Rohe Datenrate: ~172 KB/s +### Hinweise zum Build -### Restart-Verhalten - -Die Pipeline `librespot | ffmpeg` wird bei Absturz automatisch nach 5 Sekunden neu gestartet. Icecast bleibt davon unberührt. +- 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 +- Credentials werden in `/data/librespot-cache/` persistent gespeichert --- ## Fehlerbehebung -### Das Gerät erscheint nicht in der Spotify-App - -**Ursachen & Lösungen:** - -- **Add-on läuft nicht** → Add-on-Status in HA prüfen -- **Anderes WLAN/Subnetz** → Smartphone und HA müssen im selben Netzwerk sein -- **mDNS blockiert** → Spotify-Zugangsdaten in der Add-on-Konfig eintragen -- **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. +| 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 -### librespot und Spotify ToS - -- Dieses Projekt nutzt **librespot**, eine quelloffene Reimplementierung des Spotify-Clients -- Librespot ist ein **Spotify Connect-Client** und kein Downloader/Recorder -- 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 +- 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 --- @@ -314,46 +178,27 @@ Das Passwort in der Custom Component-Konfiguration stimmt nicht mit `icecast_pas ``` busch-radio-spotify/ -├── ha-addon/ # Home Assistant Add-on +├── busch_radio_spotify/ # Home Assistant Add-on │ ├── Dockerfile # Multi-Stage Build (Rust + Alpine) │ ├── config.yaml # Add-on Manifest & Optionen -│ ├── build.yaml # Multi-Arch Build-Konfiguration -│ └── run.sh # Startup-Script (Icecast + librespot + ffmpeg) -│ +│ ├── 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 # Integration Setup -│ ├── manifest.json # Integration Manifest -│ ├── media_player.py # Media Player Entity (Icecast-Polling) -│ ├── config_flow.py # Grafische Einrichtung -│ ├── strings.json # UI-Texte +│ ├── __init__.py +│ ├── manifest.json +│ ├── media_player.py +│ ├── config_flow.py │ └── translations/ -│ ├── de.json # Deutsch -│ └── en.json # Englisch -│ -├── example-config.yaml # Kommentierte Beispielkonfiguration -└── README.md # Diese Datei +├── example-config.yaml # Beispielkonfiguration +├── repository.yaml # HA Repository-Manifest +└── README.md ``` --- -## Geplante Verbesserungen - -- [ ] Stille-Generierung bei Spotify-Pause (verhindert Stream-Abbruch im Radio) -- [ ] Lautstärke-Steuerung über HA (librespot unterstützt DBUS) -- [ ] Track-Metadaten (Titel, Künstler) via librespot-Event-System -- [ ] OGG-Stream Option für bessere Qualität bei gleicher Bitrate -- [ ] Automatischer Start des Radios beim Verbinden (via HA-Automation) - ---- - -## Beitragen - -Issues und Pull Requests sind willkommen auf: -`https://gitea.bitfire.work/retr0/Busch-Radio-Spotify` - ---- - ## Lizenz -MIT License – siehe [LICENSE](LICENSE) +MIT License diff --git a/busch_radio_spotify/Dockerfile b/busch_radio_spotify/Dockerfile index 24bf0ea..8237515 100644 --- a/busch_radio_spotify/Dockerfile +++ b/busch_radio_spotify/Dockerfile @@ -23,15 +23,17 @@ RUN apk add --no-cache \ RUN git clone --depth 1 --branch v0.7.0 \ https://github.com/librespot-org/librespot.git /build && \ cd /build && \ - # OAuth-Server auf allen Interfaces binden (statt nur localhost). - # Rust-Code kann die Adresse auf verschiedene Weisen schreiben: + # OAuth-Server auf allen Interfaces binden (statt nur 127.0.0.1). + # get_authcode_listener() bestimmt die Bind-Adresse aus dem redirect_uri-Parameter. + # Wir patchen den TcpListener::bind-Aufruf direkt, sodass er immer an 0.0.0.0 + # bindet (mit dem gleichen Port wie im redirect_uri angegeben). + # Außerdem ersetzen wir die englische Browser-Meldung durch eine deutsche. sed -i \ - -e 's/127\.0\.0\.1/0.0.0.0/g' \ - -e 's/\[127, 0, 0, 1\]/[0, 0, 0, 0]/g' \ - -e 's/Ipv4Addr::LOCALHOST/Ipv4Addr::UNSPECIFIED/g' \ + -e 's/TcpListener::bind(socket_address)/TcpListener::bind(std::net::SocketAddrV4::new(std::net::Ipv4Addr::UNSPECIFIED, socket_address.port()))/' \ + -e 's/Go back to your terminal :)/Autorisierung erfolgreich! Du kannst diesen Tab schliessen./' \ oauth/src/lib.rs && \ - echo "--- oauth/src/lib.rs (Addr-Zeilen nach Patch) ---" && \ - grep -n "0\.0\.0\|UNSPECIFIED\|127\|LOCALHOST" oauth/src/lib.rs || true && \ + echo "--- oauth/src/lib.rs (Patch-Zeilen) ---" && \ + grep -n "UNSPECIFIED\|Autorisierung\|SocketAddrV4" oauth/src/lib.rs || true && \ cargo build \ --release \ --locked \ diff --git a/busch_radio_spotify/config.yaml b/busch_radio_spotify/config.yaml index 5a650d0..37a02b9 100644 --- a/busch_radio_spotify/config.yaml +++ b/busch_radio_spotify/config.yaml @@ -1,6 +1,6 @@ --- name: "Busch-Radio Spotify Bridge" -version: "1.0.6" +version: "1.0.7" slug: busch_radio_spotify description: > Streamt Spotify-Musik als Internet-Radio-Stream für das Busch-Jäger Unterputz-Internetradio. diff --git a/busch_radio_spotify/run.sh b/busch_radio_spotify/run.sh index 6955b07..edb85cc 100644 --- a/busch_radio_spotify/run.sh +++ b/busch_radio_spotify/run.sh @@ -139,6 +139,15 @@ bashio::log.info "Icecast läuft (PID: ${ICECAST_PID})" CREDENTIAL_CACHE="/data/librespot-cache" mkdir -p "${CREDENTIAL_CACHE}" +# ── IP-Adresse des Hosts ermitteln (für OAuth-Anleitung) ───────────────────── +HA_IP=$(ip route get 1 2>/dev/null | awk '{for(i=1;i<=NF;i++) if($i=="src") print $(i+1)}' | head -1) +if [ -z "${HA_IP}" ]; then + HA_IP=$(hostname -I 2>/dev/null | awk '{print $1}') +fi +if [ -z "${HA_IP}" ]; then + HA_IP="" +fi + # ── Librespot-Argumente zusammenstellen ─────────────────────────────────────── # Zeroconf/mDNS funktioniert nicht zuverlässig in Containern, da Port 5353 # vom Host (systemd-resolved/avahi) bereits belegt ist. @@ -162,9 +171,23 @@ else bashio::log.info "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" bashio::log.info "ERSTER START – Spotify-Autorisierung erforderlich!" bashio::log.info "" - bashio::log.info "librespot gibt gleich eine URL aus. Öffne diese" - bashio::log.info "im Browser und melde dich mit deinem Spotify-Konto an." - bashio::log.info "Danach startet das Add-on automatisch durch." + bashio::log.info "1) librespot gibt gleich eine 'Browse to:'-URL aus." + bashio::log.info " Kopiere diese URL und öffne sie im Browser." + bashio::log.info "" + bashio::log.info "2) Melde dich mit deinem Spotify-Konto an" + bashio::log.info " und erteile die Berechtigung." + bashio::log.info "" + bashio::log.info "3) Dein Browser wird danach weitergeleitet auf:" + bashio::log.info " http://127.0.0.1:5588/login?code=..." + bashio::log.info " Diese Seite schlägt fehl – das ist normal." + bashio::log.info "" + bashio::log.info "4) WICHTIG: Ersetze in der Adressleiste" + bashio::log.info " '127.0.0.1' durch '${HA_IP}'" + bashio::log.info " → http://${HA_IP}:5588/login?code=..." + bashio::log.info " und drücke Enter." + bashio::log.info "" + bashio::log.info "5) Bei Erfolg siehst du: 'Autorisierung erfolgreich!'" + bashio::log.info " Das Add-on startet danach automatisch." bashio::log.info "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" fi