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>
205 lines
6.2 KiB
Markdown
205 lines
6.2 KiB
Markdown
<p align="center">
|
||
<img src="busch_radio_spotify/logo.png" alt="Busch-Radio Spotify Bridge" width="180"/>
|
||
</p>
|
||
|
||
<h1 align="center">Busch-Radio Spotify Bridge</h1>
|
||
|
||
<p align="center">
|
||
Spotify-Musik auf dem Busch-Jäger Unterputz-Internetradio – ohne Bluetooth.
|
||
</p>
|
||
|
||
---
|
||
|
||
## 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](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] → 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 ~10–15 Minuten wegen Rust-Kompilierung)
|
||
|
||
### 2. Add-on konfigurieren
|
||
|
||
```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" # 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:**
|
||
|
||
```bash
|
||
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](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
|
||
|
||
```
|
||
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, ~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
|
||
|
||
| 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
|