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>
This commit is contained in:
359
README.md
359
README.md
@@ -1,33 +1,30 @@
|
|||||||
# Busch-Radio Spotify Bridge
|
<p align="center">
|
||||||
|
<img src="busch_radio_spotify/logo.png" alt="Busch-Radio Spotify Bridge" width="180"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
Spotify-Musik auf dem Busch-Jäger Unterputz-Internetradio – ohne Bluetooth.
|
<h1 align="center">Busch-Radio Spotify Bridge</h1>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
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
|
||||||
|
|
||||||
|
### Funktionsweise
|
||||||
|
|
||||||
```
|
```
|
||||||
Spotify-App
|
Spotify-App → [Spotify Connect] → librespot → PCM → ffmpeg → Icecast2 → HTTP-Stream → Busch-Jäger Radio
|
||||||
│
|
|
||||||
│ 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
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -36,176 +33,96 @@ Busch-Jäger Radio
|
|||||||
|
|
||||||
| Anforderung | Details |
|
| 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 |
|
| Spotify Premium | Pflicht für Spotify Connect |
|
||||||
| Busch-Jäger Radio | Muss benutzerdefinierte Stream-URLs unterstützen |
|
| 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
|
## Installation
|
||||||
|
|
||||||
### 1. Add-on installieren
|
### 1. Repository in HA hinzufügen
|
||||||
|
|
||||||
#### Option A: Repository in HA hinzufügen
|
1. **Einstellungen → Add-ons → Add-on Store**
|
||||||
|
2. Drei Punkte oben rechts → **Repositories**
|
||||||
1. Navigiere zu **Einstellungen → Add-ons → Add-on Store**
|
3. URL eintragen: `https://gitea.bitfire.work/retr0/Busch-Radio-Spotify`
|
||||||
2. Klicke oben rechts auf **⋮ → Repositories**
|
4. **Busch-Radio Spotify Bridge** erscheint im Store
|
||||||
3. Trage die URL dieses Repositories ein
|
5. Installieren (der erste Build dauert ~10–15 Minuten wegen Rust-Kompilierung)
|
||||||
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
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. Add-on konfigurieren
|
### 2. Add-on konfigurieren
|
||||||
|
|
||||||
Navigiere zu **Einstellungen → Add-ons → Busch-Radio Spotify Bridge → Konfiguration**:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
device_name: "Busch-Radio" # Name in der Spotify-App
|
device_name: "Busch-Radio" # Name in der Spotify-App
|
||||||
bitrate: 320 # 96 / 160 / 320 kbps
|
bitrate: 320 # 96 / 160 / 320 kbps
|
||||||
stream_port: 8000 # HTTP-Port des Streams
|
stream_port: 8000 # HTTP-Port des Streams
|
||||||
stream_mount: "/stream.mp3" # URL-Pfad
|
stream_mount: "/stream.mp3" # URL-Pfad
|
||||||
icecast_password: "geheim" # Sicherheitspasswort (bitte ändern!)
|
icecast_password: "geheim" # Icecast-Passwort (bitte ändern)
|
||||||
username: "" # Spotify-Konto (optional, s.u.)
|
|
||||||
password: "" # Spotify-Passwort (optional, s.u.)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
> **Hinweis zu `username`/`password`:** Diese Felder sind optional. Ohne Zugangsdaten
|
### 3. Add-on starten & Spotify autorisieren
|
||||||
> 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. 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://<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:
|
||||||
|
|
||||||
```
|
```
|
||||||
[INFO] Busch-Radio Spotify Bridge v1.0.0
|
http://<homeassistant-ip>:8000/stream.mp3
|
||||||
[INFO] Stream-URL für das Busch-Jäger Radio:
|
|
||||||
[INFO] http://<homeassistant-ip>:8000/stream.mp3
|
|
||||||
[INFO] Wähle 'Busch-Radio' in der Spotify-App als Abspielgerät.
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### 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://<homeassistant-ip>:8000/stream.mp3
|
|
||||||
```
|
|
||||||
|
|
||||||
Ersetze `<homeassistant-ip>` 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
|
**Installation:**
|
||||||
|
|
||||||
Für die Status-Anzeige in HA:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# custom_components-Verzeichnis in HA config kopieren
|
cp -r custom_components/busch_radio_spotify /config/custom_components/
|
||||||
cp -r custom_components/busch_radio_spotify \
|
|
||||||
/config/custom_components/busch_radio_spotify
|
|
||||||
|
|
||||||
# HA neu starten
|
# 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.
|
||||||
|
|
||||||
---
|
**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)
|
|
||||||
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:**
|
|
||||||
|
|
||||||
| Attribut | Beschreibung |
|
| Attribut | Beschreibung |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `stream_url` | Die URL für das Radio |
|
| `stream_url` | Die URL für das Radio |
|
||||||
| `listeners` | Anzahl aktiver Hörer |
|
| `listeners` | Anzahl aktiver Hörer |
|
||||||
| `source_connected` | Ob librespot an Icecast sendet |
|
| `source_connected` | Ob Audio gestreamt wird |
|
||||||
| `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"
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -213,100 +130,47 @@ automation:
|
|||||||
|
|
||||||
### Komponenten
|
### Komponenten
|
||||||
|
|
||||||
| Komponente | Funktion | Version |
|
| Komponente | Funktion |
|
||||||
|---|---|---|
|
|---|---|
|
||||||
| [librespot](https://github.com/librespot-org/librespot) | Spotify Connect Client | Aktuell via cargo |
|
| [librespot](https://github.com/librespot-org/librespot) v0.7.0 | Spotify Connect Client (PCM-Ausgabe via Pipe) |
|
||||||
| [ffmpeg](https://ffmpeg.org) | PCM → MP3 Transkodierung | Via Alpine apk |
|
| [ffmpeg](https://ffmpeg.org) | PCM → MP3 Transkodierung |
|
||||||
| [Icecast](https://icecast.org) | HTTP-Stream-Server | Via Alpine apk |
|
| [Icecast](https://icecast.org) | HTTP-Stream-Server |
|
||||||
|
|
||||||
### Signalfluss im Detail
|
### Signalfluss
|
||||||
|
|
||||||
```
|
```
|
||||||
Spotify CDN → (verschlüsselt, OGG Vorbis)
|
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
|
|||||||
|
|
||||||
```
|
```
|
||||||
busch-radio-spotify/
|
busch-radio-spotify/
|
||||||
├── ha-addon/ # Home Assistant Add-on
|
├── busch_radio_spotify/ # Home Assistant Add-on
|
||||||
│ ├── Dockerfile # Multi-Stage Build (Rust + Alpine)
|
│ ├── Dockerfile # Multi-Stage Build (Rust + Alpine)
|
||||||
│ ├── config.yaml # Add-on Manifest & Optionen
|
│ ├── config.yaml # Add-on Manifest & Optionen
|
||||||
│ ├── build.yaml # Multi-Arch Build-Konfiguration
|
│ ├── build.yaml # Multi-Arch Konfiguration
|
||||||
│ └── run.sh # Startup-Script (Icecast + librespot + ffmpeg)
|
│ ├── run.sh # Startup-Script
|
||||||
│
|
│ ├── icon.png # Add-on Icon (Store)
|
||||||
|
│ └── logo.png # Add-on Logo (Detailseite)
|
||||||
├── custom_components/ # Optionale HA Integration
|
├── custom_components/ # Optionale HA Integration
|
||||||
│ └── busch_radio_spotify/
|
│ └── busch_radio_spotify/
|
||||||
│ ├── __init__.py # Integration Setup
|
│ ├── __init__.py
|
||||||
│ ├── manifest.json # Integration Manifest
|
│ ├── manifest.json
|
||||||
│ ├── media_player.py # Media Player Entity (Icecast-Polling)
|
│ ├── media_player.py
|
||||||
│ ├── config_flow.py # Grafische Einrichtung
|
│ ├── config_flow.py
|
||||||
│ ├── strings.json # UI-Texte
|
|
||||||
│ └── translations/
|
│ └── translations/
|
||||||
│ ├── de.json # Deutsch
|
├── example-config.yaml # Beispielkonfiguration
|
||||||
│ └── en.json # Englisch
|
├── repository.yaml # HA Repository-Manifest
|
||||||
│
|
└── README.md
|
||||||
├── example-config.yaml # Kommentierte Beispielkonfiguration
|
|
||||||
└── README.md # Diese Datei
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 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
|
## Lizenz
|
||||||
|
|
||||||
MIT License – siehe [LICENSE](LICENSE)
|
MIT License
|
||||||
|
|||||||
@@ -23,15 +23,17 @@ RUN apk add --no-cache \
|
|||||||
RUN git clone --depth 1 --branch v0.7.0 \
|
RUN git clone --depth 1 --branch v0.7.0 \
|
||||||
https://github.com/librespot-org/librespot.git /build && \
|
https://github.com/librespot-org/librespot.git /build && \
|
||||||
cd /build && \
|
cd /build && \
|
||||||
# OAuth-Server auf allen Interfaces binden (statt nur localhost).
|
# OAuth-Server auf allen Interfaces binden (statt nur 127.0.0.1).
|
||||||
# Rust-Code kann die Adresse auf verschiedene Weisen schreiben:
|
# 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 \
|
sed -i \
|
||||||
-e 's/127\.0\.0\.1/0.0.0.0/g' \
|
-e 's/TcpListener::bind(socket_address)/TcpListener::bind(std::net::SocketAddrV4::new(std::net::Ipv4Addr::UNSPECIFIED, socket_address.port()))/' \
|
||||||
-e 's/\[127, 0, 0, 1\]/[0, 0, 0, 0]/g' \
|
-e 's/Go back to your terminal :)/Autorisierung erfolgreich! Du kannst diesen Tab schliessen./' \
|
||||||
-e 's/Ipv4Addr::LOCALHOST/Ipv4Addr::UNSPECIFIED/g' \
|
|
||||||
oauth/src/lib.rs && \
|
oauth/src/lib.rs && \
|
||||||
echo "--- oauth/src/lib.rs (Addr-Zeilen nach Patch) ---" && \
|
echo "--- oauth/src/lib.rs (Patch-Zeilen) ---" && \
|
||||||
grep -n "0\.0\.0\|UNSPECIFIED\|127\|LOCALHOST" oauth/src/lib.rs || true && \
|
grep -n "UNSPECIFIED\|Autorisierung\|SocketAddrV4" oauth/src/lib.rs || true && \
|
||||||
cargo build \
|
cargo build \
|
||||||
--release \
|
--release \
|
||||||
--locked \
|
--locked \
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: "Busch-Radio Spotify Bridge"
|
name: "Busch-Radio Spotify Bridge"
|
||||||
version: "1.0.6"
|
version: "1.0.7"
|
||||||
slug: busch_radio_spotify
|
slug: busch_radio_spotify
|
||||||
description: >
|
description: >
|
||||||
Streamt Spotify-Musik als Internet-Radio-Stream für das Busch-Jäger Unterputz-Internetradio.
|
Streamt Spotify-Musik als Internet-Radio-Stream für das Busch-Jäger Unterputz-Internetradio.
|
||||||
|
|||||||
@@ -139,6 +139,15 @@ bashio::log.info "Icecast läuft (PID: ${ICECAST_PID})"
|
|||||||
CREDENTIAL_CACHE="/data/librespot-cache"
|
CREDENTIAL_CACHE="/data/librespot-cache"
|
||||||
mkdir -p "${CREDENTIAL_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="<homeassistant-ip>"
|
||||||
|
fi
|
||||||
|
|
||||||
# ── Librespot-Argumente zusammenstellen ───────────────────────────────────────
|
# ── Librespot-Argumente zusammenstellen ───────────────────────────────────────
|
||||||
# Zeroconf/mDNS funktioniert nicht zuverlässig in Containern, da Port 5353
|
# Zeroconf/mDNS funktioniert nicht zuverlässig in Containern, da Port 5353
|
||||||
# vom Host (systemd-resolved/avahi) bereits belegt ist.
|
# vom Host (systemd-resolved/avahi) bereits belegt ist.
|
||||||
@@ -162,9 +171,23 @@ else
|
|||||||
bashio::log.info "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
bashio::log.info "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
bashio::log.info "ERSTER START – Spotify-Autorisierung erforderlich!"
|
bashio::log.info "ERSTER START – Spotify-Autorisierung erforderlich!"
|
||||||
bashio::log.info ""
|
bashio::log.info ""
|
||||||
bashio::log.info "librespot gibt gleich eine URL aus. Öffne diese"
|
bashio::log.info "1) librespot gibt gleich eine 'Browse to:'-URL aus."
|
||||||
bashio::log.info "im Browser und melde dich mit deinem Spotify-Konto an."
|
bashio::log.info " Kopiere diese URL und öffne sie im Browser."
|
||||||
bashio::log.info "Danach startet das Add-on automatisch durch."
|
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 "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
bashio::log.info "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user