🎵 AWTRIX NowPlaying – Sonos → AWTRIX Custom App (ioBroker)
Zeigt den aktuell laufenden Song von Sonos als eigene AWTRIX Custom-App an:
🎵 Künstler — Titel (Album) – hält sich per Keep-Alive in der Rotation, solange ein Titel läuft.
Getestet mit ioBroker (Javascript Adapter) + MQTT Adapter und einer AWTRIX mit MQTT-Support für Custom-Apps.
🚀 Features
- Liest Titel / Artist / Album aus Sonos-Datenpunkten
- Baut automatisch die Anzeige:
🎵 Künstler — Titel (Album) - Keep-Alive: hält die App aktiv, solange ein Titel vorhanden ist
- Automatisches Entfernen der App, sobald keine Titelinfos mehr da sind
- Optionales FORCE_SWITCH: bei jedem Refresh auf die App umschalten
- Debounce-Logik (200 ms) gegen Flattern bei Trackwechseln
🧩 Voraussetzungen
- ioBroker mit:
- Javascript Adapter (zum Ausführen des Skripts)
- MQTT Adapter (als Client zum MQTT-Broker; verwendet
sendMessage2Client) - Sonos Adapter (liefert
current_title,current_artist,current_album)
- AWTRIX (mit MQTT-Support für Custom-Apps)
- Ein erreichbarer MQTT-Broker (falls nicht in ioBroker integriert)
⚙️ Installation
- In ioBroker den Javascript-Adapter öffnen → neues Script
NowPlaying Sonos → AWTRIXanlegen - Den Code aus
nowplaying_sonos_awtrix.jseinfügen - Folgende Werte anpassen:
MQTT_INSTANCE,AWTRIX_PREFIX- Sonos-Datenpunkte unter
DP.title / artist / album
- Skript starten
→ Beim ersten laufenden Titel sollte auf der AWTRIX die App NowPlaying erscheinen.
🔧 Konfiguration
| Variable | Typ | Standardwert | Beschreibung |
|---|---|---|---|
MQTT_INSTANCE |
String | "mqtt.0" |
ioBroker-Instanzname des MQTT-Adapters |
AWTRIX_PREFIX |
String | "awtrix" |
MQTT-Prefix der AWTRIX (z. B. awtrix/custom/NowPlaying) |
APP_NAME |
String | "NowPlaying" |
Name der Custom-App |
LIFETIME_SEC |
Number | 600 |
Lebensdauer der App in Sekunden (wenn kein Refresh kommt) |
KEEPALIVE_SEC |
Number | 10 |
Intervall für den Refresh in Sekunden |
FORCE_SWITCH |
Boolean | false |
Bei jedem Refresh auf die App umschalten |
ICON_MUSIC |
Number | 29944 |
AWTRIX-Icon-ID |
COLOR_RGB |
Array | [255,255,255] |
RGB-Farbe für Text |
TEXT_CASE |
Number | 2 |
Textdarstellung (0 = normal, 1 = upper, 2 = smart) |
DP.title |
String | Beispiel | Sonos-Datenpunkt current_title |
DP.artist |
String | Beispiel | Sonos-Datenpunkt current_artist |
DP.album |
String | Beispiel | Sonos-Datenpunkt current_album |
⚠️ Hinweis: Passe die Sonos-Datenpunkte an dein Gerät an – IP und Struktur können variieren.
🧠 Funktionsweise
-
Trigger:
on({ id: [DP.title, DP.artist, DP.album], change: "ne" }, scheduleUpdate);Bei Änderung wird
updateAwtrix()mit Debounce (200 ms) aufgerufen. -
Logik:
- Kein Titel → App entfernen, Keep-Alive stoppen
- Neuer Track → Text bauen, sofort publishen, Keep-Alive starten
- Gleicher Track → Keep-Alive aktualisiert regelmäßig selbst
-
Keep-Alive:
AlleKEEPALIVE_SECSekunden wirdpublishCustom()aufgerufen.
Sobald kein Titel mehr vorhanden ist → App wird automatisch entfernt.
📡 MQTT-Themen & Payloads
Custom-App veröffentlichen
Topic:
<AWTRIX_PREFIX>/custom/<APP_NAME>
Payload:
{
"name": "NowPlaying",
"text": "🎵 Artist — Title (Album)",
"icon": 29944,
"color": [255, 255, 255],
"textCase": 2,
"lifetime": 600
}
Auf App umschalten (optional)
Topic:
<AWTRIX_PREFIX>/switch
Payload:
{ "name": "NowPlaying" }
App entfernen
Topic:
<AWTRIX_PREFIX>/custom/<APP_NAME>
Payload:
{ "name": "NowPlaying", "lifetime": 1 }
Das Skript sendet über:
sendTo("mqtt.X", "sendMessage2Client", { topic, message, retain: false, qos: 0 });
🛠️ Anpassungen & Tipps
Mehrere Sonos-Player
- Skript duplizieren
APP_NAME(z. B.NowPlaying_Kueche) undDP.*anpassen
Anzeige-Dauer / Refresh
- Anzeige-Frequenz →
KEEPALIVE_SEC - Ablaufzeit ohne Refresh →
LIFETIME_SEC
Direkter Wechsel auf NowPlaying
FORCE_SWITCH = truesetzen, um bei jedem Refresh direkt zu wechseln
🧰 Troubleshooting
| Problem | Mögliche Ursache / Lösung |
|---|---|
| Keine Anzeige | MQTT-Broker nicht erreichbar, falsches Prefix oder kein Song aktiv |
| App verschwindet zu schnell | LIFETIME_SEC erhöhen |
| Zu häufige Refreshs | KEEPALIVE_SEC erhöhen |
| Falsches Icon oder Textformat | ICON_MUSIC oder TEXT_CASE anpassen |
| App spammt Rotation | FORCE_SWITCH = false lassen |
| Keine Daten von Sonos | Sonos-Adapter prüfen (korrekte Player-IDs?) |
💾 Code
Die vollständige Version liegt in:
nowplaying_sonos_awtrix.js
🔒 Sicherheit
- MQTT-Zugangsdaten werden im ioBroker-MQTT-Adapter verwaltet
- Kein Retain (
retain:false), QoS = 0 → kein Risiko veralteter Nachrichten
📜 Lizenz
MIT License – siehe LICENSE
👏 Credits
- Autor: Mike
- AWTRIX-Projekt: Community & Entwickler
- ioBroker Adapter: Sonos, MQTT & Javascript
🧾 Changelog
| Version | Datum | Änderungen |
|---|---|---|
| v0.0.1 | 2025-10-27 | Erste Veröffentlichung |