Files
public-scripts/ioBroker-Skripte/AWTRIX Now Playing Sonos/Readme.md
2025-10-27 12:27:16 +01:00

207 lines
5.3 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.
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