Umbenennung: Audiofy heißt jetzt Playwish
Name, Seitentitel, Dienste (playwish-web, playwish-controller), Dienst-Benutzer (playwish), Pfade (/opt/playwish, /usr/local/src/playwish), Vorlagen und Repository-Adresse. „Audiofy“ war bereits von mehreren Produkten belegt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# Audiofy – Musikwünsche für Partys
|
||||
# Playwish – Musikwünsche für Partys
|
||||
|
||||
Gäste scannen einen QR-Code und wünschen sich Songs. Ein **Player** spielt über Spotify
|
||||
zufällige Titel aus einer Grund-Playlist – jeder N-te Titel ist ein Wunsch. Gibt es keine
|
||||
@@ -14,10 +14,10 @@ Admin-Bereich, auch vom Handy.
|
||||
## Aufbau
|
||||
|
||||
```
|
||||
Gast-Handy ──HTTPS──▶ Server: Caddy → audiofy-web (FastAPI + SQLite)
|
||||
Gast-Handy ──HTTPS──▶ Server: Caddy → playwish-web (FastAPI + SQLite)
|
||||
▲ Player-API (Bearer-Token)
|
||||
│ nur ausgehend vom Player
|
||||
Player: raspotify (Spotify Connect) + audiofy-controller
|
||||
Player: raspotify (Spotify Connect) + playwish-controller
|
||||
└─▶ Bluetooth-Lautsprecher (BlueALSA) oder Kabel/HDMI/USB (ALSA)
|
||||
```
|
||||
|
||||
@@ -39,7 +39,7 @@ Portfreigabe am Router.
|
||||
|
||||
## Spotify-App anlegen
|
||||
|
||||
Audiofy steuert Spotify über die offizielle Web API. Dafür braucht jede Installation eine
|
||||
Playwish steuert Spotify über die offizielle Web API. Dafür braucht jede Installation eine
|
||||
eigene, kostenlose „App“ im Spotify-Developer-Bereich. Gäste brauchen nichts davon.
|
||||
|
||||
**Was du brauchst:** das Spotify-Konto, das später abspielt – mit **Premium**.
|
||||
@@ -51,7 +51,7 @@ Die Bezeichnungen im Dashboard können sich leicht ändern; sinngemäß:
|
||||
|
||||
| Feld | Eintrag |
|
||||
|---|---|
|
||||
| App name | z. B. `Audiofy` |
|
||||
| App name | z. B. `Playwish` |
|
||||
| App description | z. B. `Musikwünsche für meine Party` |
|
||||
| Website | leer lassen |
|
||||
| **Redirect URI** | **`http://127.0.0.1:8888/callback`** – genau so, dann „Add“ |
|
||||
@@ -75,7 +75,7 @@ Die Bezeichnungen im Dashboard können sich leicht ändern; sinngemäß:
|
||||
**Was der Development Mode bedeutet:** Neue Apps laufen im „Development Mode“. Dort gilt
|
||||
(Stand 2026): Der App-Besitzer braucht Premium, nur eingetragene Konten dürfen die App
|
||||
nutzen, die Suche liefert höchstens 10 Treffer, nur **eigene** Playlists sind lesbar, und
|
||||
die Nutzung muss **nicht kommerziell** sein. Für Audiofy reicht das völlig – abgespielt
|
||||
die Nutzung muss **nicht kommerziell** sein. Für Playwish reicht das völlig – abgespielt
|
||||
wird nur über dein eigenes Konto.
|
||||
|
||||
**Typische Fehler beim Login**
|
||||
@@ -97,23 +97,23 @@ wird nur über dein eigenes Konto.
|
||||
**Per Einzeiler** – als Benutzer mit sudo-Rechten (oder als root) in einem Terminal:
|
||||
|
||||
```
|
||||
curl -fsSL https://git.wind8000.de/0/audiofy/raw/branch/main/install/get.sh | bash -s -- server
|
||||
curl -fsSL https://git.wind8000.de/0/audiofy/raw/branch/main/install/get.sh | bash -s -- player
|
||||
curl -fsSL https://git.wind8000.de/0/playwish/raw/branch/main/install/get.sh | bash -s -- server
|
||||
curl -fsSL https://git.wind8000.de/0/playwish/raw/branch/main/install/get.sh | bash -s -- player
|
||||
```
|
||||
|
||||
Das Startskript installiert bei Bedarf `git`, holt Audiofy nach `/usr/local/src/audiofy` und
|
||||
Das Startskript installiert bei Bedarf `git`, holt Playwish nach `/usr/local/src/playwish` und
|
||||
startet das passende Install-Skript. Später aktualisieren: denselben Befehl mit `--update`
|
||||
am Ende (`… | bash -s -- server --update`).
|
||||
|
||||
Vorsichtiger – erst ansehen, dann ausführen:
|
||||
|
||||
```
|
||||
curl -fsSLO https://git.wind8000.de/0/audiofy/raw/branch/main/install/get.sh
|
||||
curl -fsSLO https://git.wind8000.de/0/playwish/raw/branch/main/install/get.sh
|
||||
less get.sh
|
||||
bash get.sh server # bzw. player
|
||||
```
|
||||
|
||||
**Oder von Hand:** Repository klonen (`git clone https://git.wind8000.de/0/audiofy.git`) und
|
||||
**Oder von Hand:** Repository klonen (`git clone https://git.wind8000.de/0/playwish.git`) und
|
||||
die Install-Skripte direkt starten:
|
||||
|
||||
**1. Server**
|
||||
@@ -140,7 +140,7 @@ Spotify-Zugang und Playlist ab, installiert raspotify, koppelt auf Wunsch gleich
|
||||
Bluetooth-Lautsprecher und richtet den Controller als Dienst ein. Danach folgt der
|
||||
Spotify-Login für die Wiedergabe-Steuerung.
|
||||
|
||||
**3. Einmalig in der Spotify-App** das neue Gerät (Standard: „Audiofy“) auswählen – im selben
|
||||
**3. Einmalig in der Spotify-App** das neue Gerät (Standard: „Playwish“) auswählen – im selben
|
||||
Netz wie der Player. Damit speichert raspotify seine Anmeldung und ist nach jedem Neustart
|
||||
von selbst wieder da.
|
||||
|
||||
@@ -151,9 +151,9 @@ einschalten und den QR-Code zeigen oder ausdrucken.
|
||||
|
||||
| Aufgabe | Befehl |
|
||||
|---|---|
|
||||
| Status | `systemctl status audiofy-web` (Server) · `systemctl status audiofy-controller raspotify` (Player) |
|
||||
| Logs live | `journalctl -u audiofy-web -f` · `journalctl -u audiofy-controller -f` |
|
||||
| Neustart | `sudo systemctl restart audiofy-web` bzw. `audiofy-controller` |
|
||||
| Status | `systemctl status playwish-web` (Server) · `systemctl status playwish-controller raspotify` (Player) |
|
||||
| Logs live | `journalctl -u playwish-web -f` · `journalctl -u playwish-controller -f` |
|
||||
| Neustart | `sudo systemctl restart playwish-web` bzw. `playwish-controller` |
|
||||
| Update | Einzeiler mit `--update` – oder im Repository `git pull && install/install-server.sh --update` bzw. `install/install-player.sh --update` |
|
||||
|
||||
`--update` ersetzt nur Code, Python-Umgebung und Dienstdatei; Konfiguration, Datenbank,
|
||||
@@ -163,23 +163,23 @@ Caddy, Firewall und raspotify bleiben unverändert.
|
||||
|
||||
| Pfad | Inhalt |
|
||||
|---|---|
|
||||
| `/opt/audiofy/app` | Code (gehört root, der Dienst darf nur lesen) |
|
||||
| `/opt/audiofy/.env` (Server) | Geheimnisse: Spotify, Admin-Passwort-Hash, Turnstile, `PLAYER_API_TOKEN` |
|
||||
| `/opt/audiofy/data/audiofy.db` (Server) | Wünsche, Verlauf, Einstellungen |
|
||||
| `/opt/audiofy/config/.env` (Player) | Geheimnisse: Spotify, `SERVER_URL`, `PLAYER_API_TOKEN`, Lautsprecher |
|
||||
| `/opt/playwish/app` | Code (gehört root, der Dienst darf nur lesen) |
|
||||
| `/opt/playwish/.env` (Server) | Geheimnisse: Spotify, Admin-Passwort-Hash, Turnstile, `PLAYER_API_TOKEN` |
|
||||
| `/opt/playwish/data/playwish.db` (Server) | Wünsche, Verlauf, Einstellungen |
|
||||
| `/opt/playwish/config/.env` (Player) | Geheimnisse: Spotify, `SERVER_URL`, `PLAYER_API_TOKEN`, Lautsprecher |
|
||||
|
||||
Die `.env`-Dateien gehören dem Dienst-Benutzer `audiofy` (Rechte 600). **Sichere sie an einem
|
||||
Die `.env`-Dateien gehören dem Dienst-Benutzer `playwish` (Rechte 600). **Sichere sie an einem
|
||||
sicheren Ort** (z. B. Passwort-Manager) – sie stehen bewusst nicht im Repository.
|
||||
|
||||
**Verwaltung** (interaktiv, im eigenen Terminal):
|
||||
|
||||
```
|
||||
# Server: Admin-Passwort bzw. Turnstile-Schlüssel ändern
|
||||
sudo -u audiofy /opt/audiofy/.venv/bin/python /opt/audiofy/app/verwaltung.py passwort --env /opt/audiofy/.env
|
||||
sudo -u audiofy /opt/audiofy/.venv/bin/python /opt/audiofy/app/verwaltung.py turnstile --env /opt/audiofy/.env
|
||||
sudo -u playwish /opt/playwish/.venv/bin/python /opt/playwish/app/verwaltung.py passwort --env /opt/playwish/.env
|
||||
sudo -u playwish /opt/playwish/.venv/bin/python /opt/playwish/app/verwaltung.py turnstile --env /opt/playwish/.env
|
||||
# Spotify-Login erneuern – Server bzw. Player
|
||||
sudo -u audiofy /opt/audiofy/.venv/bin/python /opt/audiofy/app/auth.py --profil server --env /opt/audiofy/.env
|
||||
sudo -u audiofy /opt/audiofy/.venv/bin/python /opt/audiofy/app/auth.py --profil player --env /opt/audiofy/config/.env
|
||||
sudo -u playwish /opt/playwish/.venv/bin/python /opt/playwish/app/auth.py --profil server --env /opt/playwish/.env
|
||||
sudo -u playwish /opt/playwish/.venv/bin/python /opt/playwish/app/auth.py --profil player --env /opt/playwish/config/.env
|
||||
```
|
||||
|
||||
Danach den jeweiligen Dienst neu starten.
|
||||
@@ -187,18 +187,18 @@ Danach den jeweiligen Dienst neu starten.
|
||||
**Datenbank sichern** (Server):
|
||||
|
||||
```
|
||||
sudo -u audiofy sqlite3 /opt/audiofy/data/audiofy.db ".backup /opt/audiofy/data/sicherung.db"
|
||||
sudo -u playwish sqlite3 /opt/playwish/data/playwish.db ".backup /opt/playwish/data/sicherung.db"
|
||||
```
|
||||
|
||||
## Server härten (empfohlen, von Hand)
|
||||
|
||||
Das Install-Skript ändert die SSH-Konfiguration bewusst **nicht** – damit sperrt man sich
|
||||
leicht aus. Vorlage: `install/vorlagen/sshd-10-audiofy.conf` (anderer Port, nur Schlüssel,
|
||||
leicht aus. Vorlage: `install/vorlagen/sshd-10-playwish.conf` (anderer Port, nur Schlüssel,
|
||||
kein root, nur ein Admin-Benutzer). Vorgehen:
|
||||
|
||||
1. Eigenen Admin-Benutzer mit sudo anlegen, SSH-Schlüssel hinterlegen, Login testen.
|
||||
2. Neuen Port in ufw **und** einer eventuellen Cloud-Firewall öffnen.
|
||||
3. Vorlage ausgefüllt nach `/etc/ssh/sshd_config.d/10-audiofy.conf` legen, `sudo sshd -t`, `sudo systemctl restart ssh`.
|
||||
3. Vorlage ausgefüllt nach `/etc/ssh/sshd_config.d/10-playwish.conf` legen, `sudo sshd -t`, `sudo systemctl restart ssh`.
|
||||
4. **In einer zweiten Sitzung** testen – die alte bleibt offen, bis es klappt.
|
||||
5. Erst dann den alten Port in ufw/Cloud-Firewall schließen und fail2ban auf den neuen Port umstellen.
|
||||
|
||||
@@ -209,7 +209,7 @@ kein root, nur ein Admin-Benutzer). Vorgehen:
|
||||
| Keine Musik, Log: „Lautsprecher nicht verbunden“ | Lautsprecher einschalten – der Player verbindet ihn neu und startet die Musik von selbst. |
|
||||
| Lautsprecher verbindet sich nicht mehr („Permission denied“) | Kopplung verloren. Im Admin unter Einstellungen → Lautsprecher neu suchen und verbinden (Lautsprecher im Kopplungsmodus). |
|
||||
| „Gerät nicht gefunden“ | `systemctl status raspotify`. Nach einer Neuinstallation einmal in der Spotify-App das Gerät auswählen. |
|
||||
| Admin: „Player offline“ | `systemctl status audiofy-controller`, Internet des Players prüfen. Die Musik läuft trotzdem mit der Playlist weiter. |
|
||||
| Admin: „Player offline“ | `systemctl status playwish-controller`, Internet des Players prüfen. Die Musik läuft trotzdem mit der Playlist weiter. |
|
||||
| Admin: „Grund-Playlist nicht lesbar“ | Nur eigene Playlists funktionieren (Spotify Development Mode). |
|
||||
| Befehle „No active device“ | Spotify hatte kein aktives Gerät; „Play“ startet dann die Playlist auf dem Player. |
|
||||
| Nach Neustart bleibt es still | Gewollt, wenn vorher pausiert oder Not-Aus aktiv war – im Admin „Play“ bzw. „Freigeben“. |
|
||||
@@ -231,14 +231,14 @@ cd ../player && python3 -m venv .venv && .venv/bin/pip install -r requirements.t
|
||||
|
||||
Copyright © 2026 Dominic Alexander Windolph
|
||||
|
||||
Audiofy ist freie Software: Du kannst es unter den Bedingungen der **GNU General Public
|
||||
Playwish ist freie Software: Du kannst es unter den Bedingungen der **GNU General Public
|
||||
License**, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder
|
||||
verändern – entweder gemäß Version 3 der Lizenz oder (nach deiner Wahl) jeder späteren
|
||||
Version. Der vollständige Lizenztext steht in [`LICENSE`](LICENSE).
|
||||
|
||||
Audiofy wird in der Hoffnung verbreitet, dass es nützlich ist, aber **ohne jede
|
||||
Playwish wird in der Hoffnung verbreitet, dass es nützlich ist, aber **ohne jede
|
||||
Gewährleistung** – sogar ohne die implizite Gewährleistung der Marktreife oder der
|
||||
Eignung für einen bestimmten Zweck. Details stehen in der GNU General Public License.
|
||||
|
||||
Audiofy ist kein Produkt von Spotify und steht in keiner Verbindung zu Spotify AB.
|
||||
Playwish ist kein Produkt von Spotify und steht in keiner Verbindung zu Spotify AB.
|
||||
Spotify ist eine Marke der Spotify AB.
|
||||
|
||||
Reference in New Issue
Block a user