Files
Busch-Radio-Spotify/README.md
retr0 6f4e408190 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>
2026-04-06 22:57:35 +02:00

205 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<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 ~1015 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, ~1015 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