207 lines
5.3 KiB
Markdown
207 lines
5.3 KiB
Markdown
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:
|
||
|
||
<AWTRIX_PREFIX>/custom/<APP_NAME>
|
||
|
||
|
||
Payload (Beispiel):
|
||
|
||
{
|
||
"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 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 |