Files
2025-10-27 12:35:14 +01:00
..
.
2025-10-27 12:35:14 +01:00

🎵 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

  1. In ioBroker den Javascript-Adapter öffnen → neues Script NowPlaying Sonos → AWTRIX anlegen
  2. Den Code aus nowplaying_sonos_awtrix.js einfügen
  3. Folgende Werte anpassen:
    • MQTT_INSTANCE, AWTRIX_PREFIX
    • Sonos-Datenpunkte unter DP.title / artist / album
  4. 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

  1. Trigger:

    on({ id: [DP.title, DP.artist, DP.album], change: "ne" }, scheduleUpdate);
    

    Bei Änderung wird updateAwtrix() mit Debounce (200 ms) aufgerufen.

  2. 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
  3. Keep-Alive:
    Alle KEEPALIVE_SEC Sekunden wird publishCustom() 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) und DP.* anpassen

Anzeige-Dauer / Refresh

  • Anzeige-Frequenz → KEEPALIVE_SEC
  • Ablaufzeit ohne Refresh → LIFETIME_SEC

Direkter Wechsel auf NowPlaying

  • FORCE_SWITCH = true setzen, 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