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 per Refresh aktiv, solange der 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 „Datenpunkt-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 → AWTRIX anlegen. Den Skript-Code aus nowplaying_sonos_awtrix.js einfügen und speichern. Prüfen/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 Konstante Typ Default Beschreibung MQTT_INSTANCE String "mqtt.0" ioBroker-Instanzname des MQTT-Adapters (für sendTo(..., "sendMessage2Client", ...)). AWTRIX_PREFIX String "awtrix" MQTT-Prefix deiner AWTRIX (z. B. awtrix → Themen wie awtrix/custom/NowPlaying). APP_NAME String "NowPlaying" Name der Custom-App (wird als Topic und Anzeigename genutzt). LIFETIME_SEC Number 600 Lebensdauer der App in Sekunden, falls kein Refresh mehr kommt. KEEPALIVE_SEC Number 10 Refresh-Intervall in Sekunden, solange Titel vorhanden ist. FORCE_SWITCH Boolean false Bei jedem Refresh aktiv auf die App schalten (awtrix/switch). ICON_MUSIC Number 29944 AWTRIX-Icon-ID für die Anzeige. COLOR_RGB Array [255,255,255] Textfarbe als RGB. TEXT_CASE Number 2 Textdarstellung lt. AWTRIX (z. B. 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-DPs an dein Gerät an (IP/Struktur im Sonos-Adapter kann variieren). Funktionsweise (Kurz) Trigger: on({ id: [title, artist, album], change: "ne" }) Bei Änderung wird mit Debounce (200 ms) updateAwtrix() aufgerufen. Logik: Wenn kein Titel/Artist/Album: App entfernen, Keep-Alive stoppen. Bei neuem Track: Text bauen → sofort publishen → Keep-Alive-Timer starten. Bei gleichem Track: nichts tun; Keep-Alive veröffentlicht regelmäßig neu. Keep-Alive: Alle KEEPALIVE_SEC Sekunden publishCustom(text); sobald title leer ist → App entfernen. MQTT-Themen & Payloads Custom-App veröffentlichen: Topic: /custom/ Payload (Beispiel): { "name": "NowPlaying", "text": "🎵 Artist — Title (Album)", "icon": 29944, "color": [255, 255, 255], "textCase": 2, "lifetime": 600 } Auf App umschalten (optional): Topic: /switch Payload: { "name": "NowPlaying" } App entfernen: Topic: /custom/ Payload: { "name": "NowPlaying", "lifetime": 1 } Das Skript sendet per sendTo("mqtt.X", "sendMessage2Client", { topic, message, retain:false, qos:0 }). Anpassungen & Tipps Mehrere Sonos-Player Lege das Skript mehrfach an (kopieren) und passe je Instanz: APP_NAME (z. B. NowPlaying_Kueche) DP.* auf die jeweiligen Player-Datenpunkte Kürzere/Längere Anzeige Häufigkeit der Refreshs: KEEPALIVE_SEC Max. Lebensdauer ohne Refresh: LIFETIME_SEC Rotation „hart“ anstoßen Setze FORCE_SWITCH = true, wenn viele Apps in der Rotation sind und du bei jedem Refresh zu NowPlaying springen willst. Troubleshooting Keine Anzeige auf der AWTRIX Prüfe, ob der MQTT-Broker erreichbar ist und der ioBroker-MQTT-Adapter verbunden ist. AWTRIX_PREFIX korrekt? (z. B. awtrix vs. matrix/awtrix). APP_NAME stimmt? (Switch bezieht sich auf denselben Namen) Läuft mindestens ein Titel (also DP.title nicht leer)? Payload kommt an, aber keine/komische Darstellung ICON_MUSIC existiert? Ggf. andere Icon-ID testen. TEXT_CASE anpassen (0/1/2 – abhängig von deiner AWTRIX-Firmware). App verschwindet zu schnell LIFETIME_SEC erhöhen. Prüfen, ob KEEPALIVE_SEC zu groß ist (seltener Refresh). App „spammt“ die Rotation FORCE_SWITCH = false belassen. KEEPALIVE_SEC erhöhen (weniger häufige Refreshs). Sonos-Datenpunkte ändern sich nicht Sonos-Adapter prüfen; korrekte Instanz und Player-IDs? Testweise die DPs im Objekt-Baum beobachten. Code Die vollständige Version liegt in nowplaying_sonos_awtrix.js. Sicherheit MQTT-Zugangsdaten werden im ioBroker-MQTT-Adapter gepflegt (nicht im Skript). Das Skript sendet ohne Retain (retain:false) und mit qos:0. Lizenz MIT License – siehe LICENSE. Credits Idee & Umsetzung: Mike AWTRIX Projekt & Icons: Respect an die AWTRIX-Community ioBroker Adapter: Danke an die Maintainer von Sonos/MQTT/JS Changelog v0.0.1 – Erste Veröffentlichung