Im ersten Artikel haben wir beschrieben, wie wir die Sonos HTTP API statt dem ioBroker-Adapter zur Steuerung der Sonos-Boxen einsetzen. Maximal flexibel lassen sich so die Boxen steuern, allerdings fehlt uns für eine vollständige Integration in z.B. eine VIS-Oberfläche noch ein Detail: Die Aktualisierung der Informationen der Sonos-Boxen, was gerade gespielt wird. Über die Info lässt sich in einer Oberfläche z.B. Titel, Album und Sender anzeigen:

Lenny Kravitz – Ride
barba radio. Das Radio von Barbara Schöneberger.

Hierzu müssen die Informationen aber wieder „zurück“ von den Sonos-Boxen in ioBroker geschrieben werden. Man könnte dies manuell über ein Abruf des states einer Box, z.B. über http://http-api-server-IP/Raum/state ermöglichen, allerdings gibt es hierzu einen technisch deutlich besseren Weg: Die sogenannen Webhooks.  Wir haben im ersten Artikel bereits den Sonos HTTP API Server so konfiguriert, dass die Informationen an ioBroker gesendet werden können. Die Sonos HTTP API sendet automatisch bei Update der Sonos-Informationen über einen Webhook die Daten an ioBroker, die dort von einem passenden Script verarbeitet und in Datenpunkte/Objekte geschrieben werden.

Folgende Grafik kennen wir bereits aus dem ersten Artikel, wir ergänzen nun den „Rückweg“ über die Webhooks.
Sonos HTTP API mit ioBroker

Sonos HTTP API mit ioBroker

Hierzu benötigen wir folgendes Script: https://github.com/dwm66/iobroker-scripts/tree/master/SonosAPI

Wir legen hierzu ein neues Javascript an und konfigurieren die Einstellungen des Scripts, wichtig ist die Angabe der korrekten IP und des korrekten Ports des SONOS HTTP API Servers:

var BaseURL = „http://IP-Adresse-SONOSHTTPAPI-Server:5005“;
Außerdem müssen wir eine Logging-Funktion ergänzen, dies können wir entweder direkt am Anfang des Scripts oder über eine globale Funktion lösen. Im globalen Fall müssen wir im Ordner global ein neues Script mit folgenden Inhalt ergänzen und das Script starten:
function dwmlog( message, level, channel) {
    if (typeof channel === 'undefined') {
        channel = debugchannel;
    }
    if ( typeof level === 'undefined')
    {
        level = debuglevel;
    }
    if ( debuglevel >= level ) {
        log (message, channel );
    }
}

Wir speichern auch das zuerst angelegte Script und starten dieses.

Ist die Logging-Funktion nicht korrekt angelegt, wird dies im ioBroker-Log mit folgendem Eintrag quittiert:

javascript.0	2021-02-09 12:31:53.501	error	(11224) at Script.runInContext (vm.js:133:20)
javascript.0	2021-02-09 12:31:53.501	error	(11224) at script.js.ioBroker_home.Sonos_HTTP_API:937:1
javascript.0	2021-02-09 12:31:53.501	error	(11224) at requestSonosZones (script.js.Pollux_home.Sonos_HTTP_API:817:5)
javascript.0	2021-02-09 12:31:53.500	error	(11224) at requestSonosAPI (script.js.Pollux_home.Sonos_HTTP_API:65:5)
javascript.0	2021-02-09 12:31:53.500	error	(11224) ReferenceError: dwmlog is not defined
javascript.0	2021-02-09 12:31:53.500	error	(11224) ^
javascript.0	2021-02-09 12:31:53.500	error	(11224) dwmlog("requestSonosAPI URL: "+url,3);
javascript.0	2021-02-09 12:31:53.499	error	(11224) script.js.ioBroker_home.Sonos_HTTP_API: script.js.Pollux_home.Sonos_HTTP_API:65

Läuft sowohl der Sonos HTTP API Server und auch das webhook-Script korrekt, können wir in den Objekten im javascript-Abschnitt die neu angelegten Objekte finden, z.B. den aktuell abgespielten Titel:

Sonos http api ioBroker Objekte

Sonos http api ioBroker Objekte

Wir haben jetzt erfolgreich den Sonos HTTP API Server und auch unser webhook-Script erfolgreich installiert und können uns im nächsten Artikel um einige Script-Beispiele kümmern:

  1. Installation und Konfiguration SONOS HTTP API als Synology Docker Container
  2. Installation und Konfiguration webhook-Script für ioBroker
  3. Beispiele für die Nutzung der HTTP-Requests und Objekte des webhook-Scripts (Dieser Artikel wird in Kürze erstellt)