Wie wir Sonos-Boxen im Smarthome mit ioBroker und dem dazugehörigen Adapter steuern können, haben wir vor einiger Zeit hier beschrieben. Leider wird der ioBroker-Adapter seit geraumer Zeit nicht mehr weiterentwickelt und immer mehr Nutzer berichten bei Neuinstallationen, dass die Funktionen nicht mehr korrekt angesprochen werden können. Das ist die schlechte Nachricht. Die gute Nachricht ist, dass es eine mächtige Alternative über HTTP-Requests gibt, die allerdings eine eigene Komponente auf einem eigenen Rechner (kann auch z.B. auf dem raspberry PI mit dem ioBroker laufen), die Sonos HTTP API benötigt. Diese Komponente übernimmt die Kommunikation zu den Sonos-Boxen und ist über sehr einfache HTTP-Requests zu steuern. Möchten wir z.B. über die Sonos HTTP API eine Sonos-Box mit dem Namen Küche mit dem Favoriten Gong starten, funktioniert dies mit diesem Aufruf: http://IP-des-SONOS-HTTP-API-SERVERS:5005/Küche/favorite/Gong.

Wer bisher den Adapter genutzt hat, kam auch in den Genuss, dass Statusinformationen in den ioBroker-Objekten aktualisiert wurden, z.B. das Album-Cover oder der Titel des aktuellen Songs. Dies funktioniert mit der SONOS HTTP API nicht mehr so einfach. Entweder man muss a) die Statusinformationen zyklisch immer wieder abrufen, z.B. mit http://IP-des-SONOS-HTTP-API-SERVERS:5005/Küche/state und die HTTP-JSON-Antwort auslesen oder b) über webhooks zwischen dem SONOS HTTP API Server und ioBroker gehen. Im zweiten Fall sendet der SONOS HTTP API Server automatisch über die webhooks an ioBroker die neuen Informationen. Hierfür benötigen in ioBroker ein zusätzliches Script, das die webhook-Informationen empfängt und in entsprechende Datenpunkte bzw. Objekte schreibt. Vorteil dieser Lösung: Wir können die Objekte auch zur Steuerung der Sonos-Boxen nutzen, d.h. müssen nicht die HTTP-Requests absenden.

Folgende Grafik beschreibt den im Vergleich zum ioBroker-Sonos-Adpater etwas komplexeren Aufbau der benötigten Komponenten:

Sonos HTTP API mit ioBroker

Sonos HTTP API mit ioBroker

Wir möchten in mehreren Teilen das Vorgehen und die Installation der benötigten Komponenten Sonos HTTP API und dem webhook-Script beschreiben:

  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

Fangen wir also mit der Installation der SONOS HTTP API auf einer Synology Diskstation und einem raspberryPI an.

Installation als Synology Docker Container

  1. Für die Installation benötigen wir das korrekte Docker-Image, dieses finden wir in der Docker-Anwendung unter Registrierungen
    Docker Image Sonos HTTP API downloaden

    Docker Image Sonos HTTP API downloaden

  2. Image downloaden und unter Abbild image auswählen und starten
    Docker Image Sonos HTTP API starten

    Docker Image Sonos HTTP API starten

  3. In den Einstellungen die Ressourcen und das Netzwerk wie folgt konfigurieren (leider haben wir es bisher nicht geschafft, das Konfigurationsverzeichnis des Docker Containers auf einen freigegeben Ordner der Synology Diskstation zu mappen, wer helfen kann gerne!)
    Sonos HTTP API Docker Einstellungen Synology

    Sonos HTTP API Docker Einstellungen Synology

    Sonos HTTP API Docker Einstellungen Synology

    Sonos HTTP API Docker Einstellungen Synology

  4. Docker Image starten
  5. SONOS HTTP API Server mit http://IP-Diskstation:5005 prüfen, es sollte die Startseite des Servers erscheinen
    Sonos HTTP API Startseite

    Sonos HTTP API Startseite

  6. Mit dem Befehl http://IP-des-SONOS-HTTP-API-SERVERS:5005/NameDeinerSonosBox/state können wir prüfen, ob die Sonos Boxen über den HTTP API Server erreichbar sind.
    Sonos HTTP API state Box

    Sonos HTTP API state Box

Im nächsten Schritt müssen wir noch die Konfiguration für den „Rückkanal“ der Statusinformationen der Sonos-Boxen für die ioBroker-Objekte vornehmen. HIerfür müssen wir den Pfad des webhooks in den Einstellungen des Sonos HTTP API Servers vornehmen. Hierzu editieren wir (oder legen neu an) eine settings.json im root-Verzeichnis des Servers.


Wir haben sehr gute Erfahrungen mit der Synology Diskstation zur Virtualisierung des Smarthomes gemacht. Alle notwendigen Komponenten laufen virtuell auf der Diskstation und benötigen keine weitere Hardware, wie z.B. einen raspberryPI


In unserem Fall ist es leider etwas komplexer, weil die Konfiguration wider jeglicher Definition eines Docker Containers im Container selbst erfolgen muss. Wir müssen also ein Terminal des Docker Containers aufrufen und dort über einen Editor, z.B. vi, die Datei settings.json editieren. IN unserem Fall gehen wir über die Console der Portainer-Oberfläche:

Sonos HTTP API settings webhook ioBroker

Sonos HTTP API settings webhook ioBroker

Sonos HTTP API settings,json editieren

Sonos HTTP API settings,json editieren

In der Konfiguration ergänzen wir den Link zum ioBroker-Server in folgender Form:

{
„webhook“: „http://iobroker_IP:1884/“
}
Im Anschluss starten wir den HTTP API Server neu.
Wie wir die Daten im ioBroker empfangen und die Datenpunkte/Objekte angelegt und genutzt werden können, zeigen wir hier.