HowTo: Node-Sonos-HTTP-API Installation

HowTo: Node-Sonos-HTTP-API Installation

9. Oktober 2016 59 2.718 Von Bastian

Der Artikel Sonos Integration 2.0 hat doch mehr Anklang gefunden als ich dachte. Auf Wunsch einiger Leser nun dieser Artikel: Node-Sonos-HTTP-API Installation. Das HowTo zeigt die Installation auf einem Raspberry Pi sowie der Einrichtung der Sonos API.

Update – Image verfügbar

[dropcap] E[/dropcap] s ist jetzt auch ein fertiges Image für den Raspberry PI verfügbar. Um das Image auf eine SD Karte zu übertragen ist wird das Programm Win32DiskImager (unter Windows) bzw. dd (unter MacOS) genutzt. Das Skript ist so implementiert, dass es automatisch ausgeführt und bei einem Abbruch neugestartet wird.

Download Link

Nach erfolgtem Boot ist der Zugriff auf die Maschine mit Putty und dem User root ohne Passwort möglich. Die API befindet sich im Pfad /flash/apps/sonos-http-api. Die Logs werden unter /flash/logs/http-api.log gespeichert. und können für das Debugging mit dem nachfolgenden Befehl „live“ angezeigt werden:

Raspberry PI vorbereiten

Benötigte Hardware

Zur Installation auf einem Raspberry benötigst Du:

  • Raspberry Pi (Empfehlung Pi Modell B+ oder neuer)
  • min. 8 GB SD Karte
  • Mini-USB Netzteil
  • Netzwerkkabel oder ggf. ein WLAN Modul (Beim Pi3 inklusive)

Benötigte Software

Zur Einrichtung des Pi und dem Betrieb des fertigen Rechners werden auf Deinem Windows/Mac einige Tools für die Verwaltung benötigt.

  • NOOBS – OS Installer für den Raspberry
  • putty
  • WinSCP bzw. einen anderen SCP Client

Installation Betriebssystem

Die Grundinstallation des Betriebssystems wird bereits im Artikel OpenRemote Installation ausführlich behandelt. Die Schritte sind bis inklusive „Aktualisierung des Betriebssystems“ identisch und können dem Artikel entnommen werden.

Installation NODE.js

Nach der Installation und Aktualisierung des Linuxsystems auf dem Raspberry Pi beginnt nun die Installation des Node.js Servers.

Wie im Artikel OpenRemote Installation beschrieben wird eine Verbindung mit Putty und dem Benutzer pi (Passwort: raspberry) benötigt um die nachfolgenden Installationsschritte durchzuführen.

Manuelle Installation

Im Raspbian Apt-Repotitory ist die Version 0.10.29 von Node.js vorhanden. Allerdings wird für den Betrieb der Sonos API mindestens die Version 4.0 benötigt. Daher muss diese manuell heruntergeladen und entpacken werden.

Raspberry PI A, B, B+

Raspberry PI 2 und neuer


Anschließend den kompletten Verzeichnisinhalt nach /usr/local kopieren und testen.


Es sollte die Version des Node.js Servers ausgegeben werden.


Weicht die Ausgabe ab und es erscheint eine Meldung die auf eine Speicher- oder Architekturverletzung hindeutet, dann hast Du die falsche Version heruntergeladen (arm v6 anstatt v7 oder anderes herum). In diesem Fall ist das Prozedere mit der jeweils anderen Version zu wiederholen.

Installation Sonos API

Nachdem der Node.js Server nun einsatzbereit ist, geht es an die Installation der Node-Sonos-HTTP-API. Dafür ins Home Verzeichnis des Users Pi wechseln, das master.zip File herunterlade und entpacken:

Die Installation

Nun müssen noch die Module innerhalb heruntergeladen, installiert und dem Node.js Server bekannt gemacht werden. Dies tut der folgende Befehl. Es erfolgt während der Installation keine Ausgabe. Aber: keine Panik das System arbeitet:


Nach der Installation wird eine Liste von Modulen und Paketen ausgegeben die nun für den Node.js bereit stehen. Solange keine Fehlermeldungen (in rot) auftauchen ist alles in Ordnung.

Die Konfiguration

Nach der Installation folge die Konfiguration. Jetzt ist es sinnvoll, eine WinSCP Verbindung zum Raspberry herzustellen. Konfigurationsdateien lassen sich mit einem Windows/Mac Editor einfacher anpassen als in der Shell. Mit WinSCP in das Verzeichnis /home/pi/node-sonos-http-api-master wechseln.

settings.json

Als erstes eine Datei mit dem Namen settings.json anlegen und dort folgendes eintragen:


Anstatt der xxx muss hier der voicerss.org API Key eingetragen werden damit das TTS funktioniert.

presets/example.json

Diese Datei wird in example.original umbenannt. Da für den Betrieb mit dem Fibaro Home Center 2 keine Presets benötigt werden bzw. wir uns zu einem späteren Zeitpunkt damit beschäftigen können.

Der erste Start

Eigentlich ist nun schon alles eingerichtet und der erste Start kann erfolgen. Dafür führen wir folgende Befehle aus:


Die Ausgabe sollte in etwa so aussehen:


Ist das der Fall, ist alles richtig gelaufen und die API steht zur Verfügung.

Ein kleiner Test

Die API hört auf den Namen des Raumes. In diesem Beispiel gehe ich davon aus, dass ein Sonos Player im Raum „Bad“ steht und in den Sonos Favoriten eine Playlist mit dem Namen Charts existiert.

In einem Browser folgende URL öffnen:


Raum- und Playlistname sind ggf. anzupassen. Die Namen sind in der Sonos App zu finden.

Die Wiedergabe wird mit dem Aufruf der URL gestoppt (bzw. pausiert):

Beenden und im Hintergrund starten

Mit Strg+C wird die Node.js Instanz beendet. Um die API laufen zu lassen, wenn kein Benutzer am Rapberry angemeldet ist, wird Screen benötigt. Damit ist es möglich Node.js im Hintergrund zu starten und User unabhängig zu betreiben.

Screen wird mit dem gleichnamigen Befehl geststartet:


Es öffnet sich sozusagen eine Shell in der Shell in der der Node.js Prozess erneut gestartet wird:


Der API-„Dienst“ wird gestartet und steht für Anfragen zur Verfügung. Um wieder auf die original Shell zu gelangen Strg+A+D nacheinander drücken (also Strg gedrückt halten, A und dann D). Um zur Screen Instanz zurückzukehren


Die API läuft nun im Hintergrund und wir können die Putty Session beenden, ohne das diese beendet wird.

Einrichten des virtuellen Devices

Das virtuelle Device kann unten heruntergeladen und ins Home Center 2 importiert werden. Hier ist zu beachten, dass der Name des VDs dem Namen des Sonos Raumes entsprechen, die IP des Raspberry und der Port 5005 eingetragen werden müssen.

Download “Node-Sonos-VD” node-sonos-api-VD.zip – 62-mal heruntergeladen – 2 KB

Node Sonos API VD Konfiguration

Node Sonos API VD Konfiguration

Innerhalb des virtuellen Devices gibt es noch etliche Möglichkeiten der Konfiguration. Auf diese gehe ich hier nur Teilweise ein, bei Bedarf einfach über die Kommentarfunktion nachfragen.

Einrichten eines Radiosenders

Im VD unter Radio Favourite kannst Du eigene Radiosender hinterlegen dafür ist es notwendig den Button zu bearbeiten. Die hier zum Download zur Verfügung gestellte Version beinhaltet insgesamt 6 Sender. Der LUA Code ist dabei immer gleich aufgebaut:


Um einen eigenen Radiosender einzutragen muss dieser in Deinen Sonos Favoriten sein. Dafür in der Sonos App unter Radio von TuneIn den gewünschten Sender raussuchen, auf die 3 Punkte daneben klicken und unter dem Punkt Mehr… dann Sender zu Sonos-Favoriten hinzufügen auswählen. Wichtig ist die exakte Bezeichnung des Senders. Wenn der Sender bei TuneIn beispielsweise NDR 2 Hamburg heißt, muss Du diesen Namen im VD auch exakt so angeben.

Beispiel NDR 2 Hamburg


WICHTIG: Leerzeichen in Namen von Favoriten, Playlisten und TTS sind IMMER durch %20 zu ersetzen.

Die Konfiguration der übrigen Button im virtuellen Device funktioniert nach demselben Prinzip. Wenn hier Fragen auftauchen, dann gern als Kommentar unter dem Artikel.

Zusammenfassung

Ich hoffe das HowTo ist verständlich und die Node-Sonos-HTTP-API Installation gelingt auf Anhieb. Gern stehe ich mit Rat und Hilfe zur Seite, wenn es Probleme geben sollte und freue mich über jede Art von Feedback.

Bastian

Moin, ich heiße Bastian und bin Autor dieser kleinen bescheidenen Seite. Zwanghaft, ja fast schon neurotisch beschäftige ich mich seit Jahren mit jedem erdenklichen technischen Schnick-Schnack. Nichts, was einen Stecker hat ist vor mir sicher. So war es klar, dass ich eines Tages das Haus auf den Kopf stellen und alles vernetzen würde.

Da ich bei meinem Vorhaben sehr viel Hilfe und Unterstützung in diversen Foren, Blogs und Boards erfahren habe, möchte ich diesen Blog zum sammeln meiner Smarthome- und Technikerrungenschaften nutzen um der Community zumindest ein klein wenig was zurückgeben zu können.

Artikel teilen