HowTo: Node-Sonos-HTTP-API Installation

Advertisements

In den letzten 2 Jahren hat sich an der Node-Sonos-HTTP_API einiges getan, so dass dieser Beitrag jetzt eine Überarbeitung verdient hat. Insbesondere die Installation hat sich deutlich vereinfacht, aber auch in Sachen Automation ist es ein wenig übersichtlicher geworden. Der Artikel beschreibt die Installation und Konfiguration der Node-Sonos-HTTP-API auf einem Raspberry PI, sowie die Anbindung an das Home Center 2.

Node Sonos HTTP API Installation

Node Sonos HTTP API Installation

Raspberry PI vorbereiten

Benötigte Hardware

Zur Installation auf einem Raspberry wird benötigt:

  • 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 einige Tools für die Verwaltung benötigt.

  • Raspbian Stretch Lite – Speziell für den Raspberry vorbereitetes Linux Betriebssystem.
  • balenaEtcher – Tool um das Raspbian Image auf eine SD Karte zu schreiben.
  • putty – Ein SSH Client um auf dem Linux System Befehle ausführen zu können.
  • WinSCP – bzw. einen anderen SCP Client um Dateien auf dem Linux System in einem Editor bearbeiten zu können.

Die Tools und das Image herunterladen und in einem Ordner bereitlegen. Auf die exakten Versionsnummern nicht geachten werden, Es können auch zwischenzeitlich erschienene Versionen der Programme benutzt werden.

Node Sonos Files

Die für die Installation benötigten Dateien

Installation Betriebssystem

Während die bisherige Anleitung auf eine grafische Installation mit dem Raspberry Tool NOOBS basierte, ist die Installation der Lite Version von Raspbian deutlich weniger aufwändig und kann auch Headless, also ohne Monitor, Maus und Tastatur am Raspberry durchgeführt werden.

Installation Tools und Schreiben der SD Karte

Nun balenaEtcher und WinSCP auf Deinem Rechner installieren. Während der Installationen musst sind keine der Optionen zu ändern, also alles mit den Standardeinstellungen installieren. Nun balenaEtcher starten und die Raspbian ZIP Datei mit „Select Image“ auswählen. Darauf achten, dass in der Mitte die richtige SD Karte ausgewählt ist und den Schreibprozess mit dem Butten „Flash!“ starten.

Der Vorgang dauert je nach Anbindung und SD Karte ein paar Minuten.

balenaEtcher

Alles auswählen und Flash! anklicken

Anpassungen Raspbian

Nach Abschluss der Installation müssen noch 2 Kleinigkeiten auf der SD Karte angepasst werden um wirklich Headless installieren zu können.

SSH Server beim ersten Start aktivieren

Um direkt nach dem ersten Start des Raspberry per SSH zugreifen zu können muss dieser vor dem ersten Start aktiviert werden. Um dies zu erreichen sind die folgenden Schritte notwendig:

  • SD Karte erneut mit Deinem Rechner verbinden
  • Im Explorer auf das Laufwerk mit dem Namen „Boot“ wechseln
  • Dort eine leer Datei anlegen und diese ssh nennen. Nur ssh, keine Dateiendung wie .txt oder ähnliches.
ssh_file_sdcard

Datei „ssh“ anlegen, wie oben markiert (ohne Dateiendung)

Optional: Feste IP Adresse vergeben

Wenn kein Zugriff auf DHCP Server besteht, oder eine feste IP Adresse des Raspberry nach dem Boot gewünscht wird, dann noch eine feste Adresse vergeben. Dazu:

  • Auf der SD Karte (wieder Laufwerk Boot) die Datei cmdline.txt öffnen
  • Der Inhalt sieht in etwa so aus:

 

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=7ee80803-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh
  • Diese Zeile wird nach dem ersten Start des Raspberry automatisch ausgeführt.
  • Um eine feste IP Adresse zu hinterlegen folgendes an die Zeile anfügen und anpassen. Wobei 192.168.1.200 eine im Netzwerk gültige Adresse sein muss und rpi der gewünschte Rechnername ist:
ip=192.168.1.200::192.168.1.1:255.255.255.0:rpi:eth0:off

Wichtig: Es muss alles in einer Zeile stehen und vor dem ip= muss ein Leerzeichen sein.

Rasbian starten und aktualisieren

Nun die gerade beschriebene SD Karte in den Raspberry legen und ihn starten.

Der erste Boot dauert etwa 2-3 Minuten. Danach kann mit Putty (siehe oben) eine Verbindung hergestellt werden.

Putty Verbindung

Putty Verbindung (statt 10.10.10.129 die eigene IP verwenden)

Es kommt ein Sicherheitshinweis, der darauf hinweist, dass Putty den Raspberry bzw. das Betriebssystem darauf (noch) nicht kennt. Diese kann mit „Ja“ bestätigt werden. Es folgt die erste Anmeldung am System mit dem Benutzer pi und dem Passwort raspberry.

Nun die verfügbaren Updates installieren:

sudo apt-get update && sudo apt-get upgrade -y

Je nach Umfang der Updates und Version des Raspberrys kann dieser Vorgang ein paar Minuten dauern.

Bevor Du nun mit der Installation von Node.js beginnst lohnt sich ein Blick in den Artikel zur Installation der API als Docker Container.

Installation NODE.js

Nach der erfolgreichen Installation des Linux-Systems auf dem Raspberry wird nun der benötigte NODE.js Server installiert. Dieser muss erst einmal auf dem System heruntergeladen werden. Dabei ist, je nach Raspberry Generation, auf die richtige Prozessor Architektur zu achten.

Raspberry PI A, B, B+

cd /tmp
wget https://nodejs.org/dist/v10.14.2/node-v10.14.2-linux-armv6l.tar.xz
tar xvf https://nodejs.org/dist/v10.14.2/node-v10.14.2-linux-armv6l.tar.xz 
cd node-v10.14.2-linux-armv6l

Raspberry PI 2 und neuer

cd /tmp
wget https://nodejs.org/dist/v10.14.2/node-v10.14.2-linux-armv7l.tar.xz
tar xvf node-v10.14.2-linux-armv7l.tar.xz
cd node-v10.14.2-linux-armv7l

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

sudo cp -R * /usr/local/
node -v

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

v10.14.2

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

Installation Sonos API

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

cd
wget https://github.com/jishi/node-sonos-http-api/archive/master.zip
unzip master.zip
cd node-sonos-http-api-master

Die Installation

Nun müssen noch die für den Betrieb der Sonos API benötigten NODE.js Module heruntergeladen und installiert werden. Dies erledigt npm (ehemals Node Package Manager) mit dem Befehl:

cd /home/pi/node-sonos-http-api-master
npm install --production

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 SSH Sitzung. Mit WinSCP in das Verzeichnis /home/pi/node-sonos-http-api-master wechseln.

settings.json

Hier muss vorerst nichts konfiguriert werden. Es lohnt sich aber, die Beschreibung der API im gitHub Repository zu lesen. Dort werden einige Alternativen bzgl. der Sprachausgabe beschrieben. Für die Installation und Nutzung mit dem Home Center 2 reicht aber erstmal die Standardstimme von Google.

presets/example.json

Da für den Betrieb mit dem Fibaro Home Center 2 keine Presets benötigt werden, wird diese Datei in example.original umbenannt.

Der erste Start

Die Installation und Konfiguration der Sonos API ist nun vollbracht und es kann der erste Start erfolgen. Dafür führen wir folgende Befehle aus:

npm start

Die Ausgabe sollte in etwa so aussehen:

>  sonos-http-api@1.6.6 start /home/pi/node-sonos-http-api-master
>  node server.js
2018-12-16T14:47:22.075Z INFO Could not find file /home/pi/node-sonos-http-api-master/settings.json
2018-12-16T14:47:22.231Z INFO Presets loaded: {}
2018-12-16T14:47:23.755Z INFO http server listening on 0.0.0.0 port 5005

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:

http://RASPI-IP:5005/bad/say/Super%20das%20hat%20geklappt/de

Wenn alles richtig eingestellt ist, dann hat der Sonos Lautsprecher gerade gesprochen.

Sonos API als Dienst betreiben

Das hat schon ganz gut geklappt. Die Sonos API ist soweit einsatzbereit. Allerdings nur solange die SSH (Putty) Sitzung offen ist, denn beim schließen dieser wird auch die Node.js Instanz beendet.

Um die Sonos API dauerhaft und im Hintergrund laufen zu lassen wird ein weiteres Programm benötigt. Nämlich PM2. Damit ist es möglich Node.js Instanzen im Hintergrund zu starten und unabhängig von einem angemeldeten Benutzer zu betreiben.

Also mit Strg+C die Node.js Instanz beenden.

Installation PM2

Um PM2 zu installieren folgenden Befehl ausführen:

sudo npm install pm2 -g

Es folgt eine ähnliche Installation wie vorher bei der Sonos API. Nur diesmal nicht in dem Ordner in dem wir uns gerade befinden, sondern global (-g Parameter). Daher auch die Ausführung mit sudo (SuperUser Rechte unter Linux).

Am Ende der Installation können vereinzelt Warnungen auftreten. Hierbei handelt es sich um Installationsfehler optionaler Module für PM2 die für die Raspberry Architektur (Arm-Prozessor) nicht verfügbar sind. Dies kann ignoriert werden.

Sonos API mit PM2 verwalten

Mit PM2 die Sonos API in einer neuen Instanz starten

cd
cd node-sonos-http-api-master
pm2 start server.js

Stoppen der Instanz

pm2 stop 0

Instanzinformationen anzeigen

pm2 show 0
pm2 Show

pm2 Show zeigt Informationen zur laufenden Instanz

Unter error log path und out log path sind die Logdateien zu finden.

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.

Node Sonos API VD Konfiguration
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:

local device = fibaro:getSelfId();
local zonename = fibaro:getName(device);
--response = sonos:GET("/"..zonename.."/state")
local ipaddress = fibaro:getValue(device, "IPAddress");
local port = fibaro:getValue(device, "TCPPort");
sonos = Net.FHttp(ipaddress, port);
response = sonos:GET("/"..zonename.."/Favorite/4FM");
local msg = "4FM Radio selected";
fibaro:log(msg);
fibaro:call(device, "setProperty", "ui.lblMsg.value", msg);

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

local device = fibaro:getSelfId();
local zonename = fibaro:getName(device);
--response = sonos:GET("/"..zonename.."/state")
local ipaddress = fibaro:getValue(device, "IPAddress");
local port = fibaro:getValue(device, "TCPPort");
sonos = Net.FHttp(ipaddress, port);
response = sonos:GET("/"..zonename.."/Favorite/NDR%202%20Hamburg");
local msg = "NDR2 selected";
fibaro:log(msg);
fibaro:call(device, "setProperty", "ui.lblMsg.value", msg);

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.

Bildquellen

  • Node Sonos HTTP API Installation: Bastian
  • nodesonosfiles: Bastian
  • balenaEtcher: Bastian
  • ssh_file_sdcard: Bastian
  • putty_first: Bastian
  • pm2 Show: Bastian
Posted in Sonos and tagged , .

68 Comments

  1. Pingback: Sonos Integration 2.0 | Mein kleiner Smart Home Blog

  2. Sehr schön. Danke.
    Ich hatte mich am WE stundenlang mit dem RPI und Noods und npm beschäftigt – leider ohne Erfolg.
    Was mit Sicherheit am fehlenden Basiswissen liegt.. 🙂

    Mit Deiner Anleitung funktioniert es (bzw. bis vor dem VD aus dem HC2 – das kommt später)
    Wahrscheinlich habe ich npm im falsche Pfad gestartet….

    • Moin Hoggle,
      gleich in die Tat umgesetzt, das freut mich. Und das alles funktioniert natürlich noch mehr. Viel Erfolg und Spaß damit.
      Gruß
      Bastian

  3. Also mit „Bad“ als Raumname funktioniert es.
    Wenn ich im Browser „RPI/5005/Küche/play“ nutze, funktioniert es auch für die Küche.
    Aber im VD mag er „Küche“ anscheinend nicht da da nichts passiert. Gibt es für die Umlaute einen Trick?

    Für TTS hast Du Dir einen zusätzlichen Button erzeugt?
    Schlüsselst Du Dir den anzusagenden Text per Globaler Variable hinzu?

    • Hi Hoggle,
      Umlaute sind leider immer wieder ein Problem. Das hatte ich im Artikel gar nicht erwähnt. Ich habe meinen Sonos in der Küche einfach in Kueche umbenannt um diesem Problem aus dem Weg zu gehen.
      Für die TTS Ausgabe habe ich unterschiedliche Herangehensweisen. Da ich es hauptsächlich aus Szenen heraus verwende, habe ich mir hier meist die URL händisch zusammengesetzt und abgeschickt. Aber es geht natürlich auch per Button. Am besten orrientierst Du Dich an den Buttons im VD, denn die machen auch nichts anderes als URLs mittels GET aufzurufen.
      Gruß
      Bastian

      • Hi Bastian,

        Hast du ein kleines Beispiel wie du die URL’s in einer Szene erstellst. Ich habe Probleme mit Spaces. %20 nützt auch nichts…

        Meine aktuelle Version: http:request(„http://192.168.1.18:5005/wohnzimmer/say/“..“Test Test/de-de/50″)

        Danke

        • Hi,

          versuche bitte mal den Text vor dem URL Aufruf in einer Variablen zu definieren und die Variable dann an den Request zu übergeben. Beispiel:
          local msgUrlArmed = "http://10.10.10.3:5005/kueche/say/Alarm%20system%20activated/en-gb/10"

          Gruß
          Bastian

          • Hi,
            Danke für die Antwort. Hat leider nicht funktioniert.

            local http = net.HTTPClient()
            local msg = „http://192.168.1.18:5005/wohnzimmer/say/hallo%20du/de-de/90“
            http:request(msg)

            Gibt es eine Encoding-Funktion für url’s?

          • Hi,

            eine Funktion gibt es für das encoden von Urls leider nicht. Aber es sollte auch so funktionieren.
            Poste mal bitte die vollständige Szene, dann schaue ich mir das mal im Detail an.
            Welche Version der sonos-httpApi nutzt Du?

            Gruß
            Bastian

          • Hier meine ganze Test-Szene:

            –[[
            %% properties
            %% events
            %% globals
            –]]

            local http = net.HTTPClient()
            local msg = „http://192.168.1.18:5005/wohnzimmer/say/hallo%20du/de-de/90“
            http:request(msg)

            Ich nutze v1.2.6 der API

            ——
            Es geht!!

            Da war eine say_v2.js Datei im action Ordner. Diese hat den say action überschrieben…

          • Hi,

            schön, dass es jetzt geklappt hat. Kannst Du noch kurz beschreiben was genau das Problem war? Das hilft bestimmt dem ein oder anderen noch weiter.

            Danke und Gruß
            Bastian

  4. Hallo Bastian,

    ich lese bei Dir jetzt schon länger mit. Deine Anleitungen gefallen mir sehr gut, weiter so!!!
    Ach Dein Einsatz im Forum finde ich gut.

    Gruß Sascha

  5. Hallo!

    Nachdem ich nun schon etliche, vergebliche Stunden damit verbracht hatte, den Server auf meinem Raspberry zum Laufen zu bekommen, hat es mit dieser Anleitung nun endlich funktioniert. Besten Dank daher auch von mir!

    Guten Rutsch!

  6. Hallo Bastian,

    ich danke Dir für die wirklich geniale Arbeit hier auf mkshb.de!!!!
    Bei funktioniert alles wie im How-to beschrieben 😉
    Eine kurze Frage:
    Ich möchte zusätzlich das VD mit meiner Fernedienung (nodon) und einer LUA Szene bedienen, nur leider gehen nicht alle Funktionen am VD an der Fernbedienung!?
    Z.b. mit Play funktioniert es: fibaro:call(221, „pressButton“, „5“);
    Stop/Lauter/Leiser bekomme ich nicht ans laufen…kannst du mir einen Rat geben was ich falsch mache?
    Stop habe ich so versucht: fibaro:call(221, „pressButton“, „6“);

    Vielen Dank schon im voraus!!

  7. Hallo Bastian,

    hast Du vielleicht eine Idee, wie ich nodejs auf einen PI mit LibreElec installieren kann. Dachte mir, dass dieser den Job noch mitmachen kann. Leider gibt es unter LibreElec kein /usr/local Verzeichnis. Des Weiteren habe ich nur minimale Linux Kenntnisse.

    Gruß
    ChrisBeat

    • Hallo ChrisBeat,
      das sollte problemlos funktionieren. Gern kann ich Dich dabei unterstützen. Schick mir mal bitte eine E-Mail über das Kontaktformular. Wenn Du hast mit Skype Kontakt.
      Gruß
      Bastian

  8. Hallo Bastian,

    vielen Dank für deine Hilfe!! Ich habe den Fehler nun gefunden…er saß vorm Computer! 😉 (Hatte einen kleinen Schreibfehler im Script)

    Viele Grüße

  9. Dank Bastian läuft die Node-Sonos-HTTP-API nun auch auf meinem Raspberry PI 3 mit LibreElec

    Super Unterstützung. Danke!

    Gruß
    ChrisBeat

  10. falls jemand ein Start Script für Debian benötigt, damit die API bei jedem reboot automatisch startet.

    Folgende Datei mit einem Editor unter Linux anlagen

    z.B.

    mcedit /etc/init.d/node-sonos-http-api

    folgendes Script zwischen „Start Script“ und „Ende Script“ kopieren und im Editor einfügen:

    #————————— Start Script —————————
    #!/bin/sh
    #/etc/init.d/node-sonos-http-api

    ### BEGIN INIT INFO
    # Provides: node-sonos-http-api
    # Required-Start: $network $syslog
    # Required-Stop: $syslog
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    # Short-Description: Start daemon at boot time for node-sonos-http-api
    # Description: Enable service provided by daemon.
    ### END INIT INFO

    export PATH=$PATH:/usr/local/bin
    export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules

    case „$1“ in
    start)
    exec forever –sourceDir=/home/homebridge/node-sonos-http-api/ -p /home/homebridge/node-sonos-http-api/ server.js
    ;;
    stop)
    exec forever stop –sourceDir=/home/homebridge/node-sonos-http server.js
    ;;
    *)
    echo „Usage: /etc/init.d/nodeup {start|stop}“
    exit 1
    ;;
    esac

    exit 0
    #————————— Ende Script —————————

    Ihr müsst noch das Verzeichnis /home/homebridge/node-sonos-http-api/ an euer Verzeichnis anpassen. Dort liegt das „server.js“ Script drin.

    danach noch folgendes in Debian eingeben

    chmod 755 /etc/init.d/node-sonos-http-api
    update-rc.d node-sonos-http-api defaults

    • Hi valshare,

      danke für das Skript. Irgendwie bekomme ich es aber nicht hin. Ich habe das Verzeichnis /home/homebridge/node… angepasst. Da ich die obige Installation 1:1 befolgt habe ist es bei mir /home/pi/node-sonos-http-api-master.
      Leider funktioniert es nicht. Ich habe daraufhin „pi@raspberrypi:~ $ sudo /etc/init.d/node-sonos-http-api start“ ausprobiert und erhalte die Fehlermeldung „/etc/init.d/node-sonos-http-api: 16: exec: forever: not found“

      Klingt ja fast, als wäre mein hinterlegter Pfad falsch. Ist er meiner Meinung nach aber nicht. Wie gesagt, ich habe Bastians Schritte von oben 1:1 durchgeführt.

      Hat jemand von euch eine Idee, woran es liegen könnte?

      Danke.

      Gruß
      Mr.Coffee

      • Scheinbar lag es bei mir an dem „forever“, welches mich etwas überfordert hat. Ich habe daher nach einem anderen Script gesucht. Nun funktioniert es. Falls jemand Hilfe benötigt, bitte melden.

        • Hi Mr.Coffee
          Ich versuche auch das zu funktionieren zu bekommen, leider ohne Erfolg. Wie hast du das hinbekommenmit einem anderen Script?
          Gruss FrankT

  11. Hallo ChrisBeat und Bastian, ich habe das gleiche Problem das Ihr offensichtlich gelöst habt. Unter Libreelec finde ich kein /usr/local/ Verzeichniss. Habt Ihr vllt. Interesse daran die Lösung für Libreelec hier in den Kommis zu beschreiben? Ich denke das würde noch vielen helfen :-). Wäre super lieb.

    Schönes Wochenende

  12. Hallo zusammen,

    habe de Kommentar erst jetzt gesehen. Hier die Infos:

    mit putty auf PI verbinden
    cd~
    touch .profile
    echo „export PATH=$PATH:/storage/nodejs/bin“ >> .profile

    reboot

    Sonos API Installation
    Anleitung beachten
    http://www.mkshb.de/howto-node-sonos-http-api-installation/

    unter /storage Ordner nodejs erstellen
    cd /storage
    mkdir nodejs

    cd /tmp
    wget https://nodejs.org/dist/v6.9.4/node-v6.9.4-linux-armv7l.tar.gz
    tar -xvf node-v6.9.4-linux-armv7l.tar.gz
    cd node-v6.9.4-linux-armv7l

    cp -R * /storage/nodejs

    Pathvaribale in .Profile bearbeiten und erweitern
    nano .profile

    export PATH=/usr/bin:/usr/sbin:/storage/java/jre/bin:/storage/nodejs/bin

    reboot durchführen und nach dem Login Pathvaribale prüfen
    echo $path

    Im Anschluss prüfen ob NodeJS funktioniert.
    node -v

    cd /tmp/
    wget https://github.com/jishi/node-sonos-http-api/archive/master.zip

    cd /storage/
    Verzeichnis für SonosAPI erstellen
    mkdir sonosAPI

    cd /tmp/
    unzip master.zip
    cd node-sonos-http-api-master

    mv * /storage/sonosAPI
    cd /storage/sonosAPI

    Nun npm installieren
    npm install –production

    touch settings.json
    nano settings.json

    Anschließen in der settings.json datei den VoiceRSS Key eintragen
    { „announceVolume“: 10 ,
    „voicerss“: „xxxxx3xxxaxx9xxxxxx“
    }

    npm nun starten mit
    npm start

    Folgende Meldung sollte erscheinen
    > sonos-http-api@1.2.6 start /storage/sonosAPI
    > node server.js

    2017-01-14T17:51:22.643Z INFO Presets loaded: { example:
    { players:
    [ { roomName: ‚Bathroom‘, volume: 10 },
    { roomName: ‚Kitchen‘, volume: 10 },
    { roomName: ‚Office‘, volume: 10 },
    { roomName: ‚Bedroom‘, volume: 10 },
    { roomName: ‚TV Room‘, volume: 15 } ],
    playMode: { shuffle: true, repeat: ‚all‘, crossfade: false },
    pauseOthers: false,
    favorite: ‚My example favorite‘ } }
    2017-01-14T17:51:23.528Z INFO http server listening on port 5005

    Autostart.sh anpassen
    cd /storage/.config
    nano autostart.sh

    (/storage/nodejs/bin/node /storage/sonosAPI/server.js) &
    einfügen, speichern und reboot

  13. Hi,

    ich bin kurz davor mich auch einmal an den Rasberry ranzutrauen. Ich zögere allerdings noch, da ich einen extra Server nur für Sonos etwas oversized halte. Daher die Frage:
    Kann der Rasberry nach der Node-Sonos-API Installation parallel noch für einen smarten Spiegel verwendet werden? Oder reicht seine Power nicht um mehrere Dinge gleichzeitig zu machen?
    Wie gesagt, ich bin Rasberry Neuling:-)

    Ich danke euch.

    Gruß
    Mr.Coffee

    • Hi Mr. Coffee,

      die Anforderungen durch den Node.js Server sind für den Rasp locker nebenbei zu bewältigen. Aber es kommt natürlich ein wenig auf den Ressourcenhunger Deinens smarten Spiegels an.

      Gruß
      Bastian

      • Hi Bastian,
        danke für die Info. Der Raspberry ist bestellt. Der smarte Spiegel ist noch Zukunftsmusik, aber ich werde mich bestimmt bzgl. des Node.js Servers melden:-)

        VG

  14. Bastian,

    Respekt. Ich hatte überhaupt keine Ahnung vom Raspberry und habe es dank Deiner Anleitung alles hinbekommen!
    Endlich ist Gruppieren möglich und was noch viel wichtiger ist: die Sonos-Wiedergabe wird automatisch nach Unterbrechungen des Hauses fortgesetzt.

    Vielen Dank für Deine ganze Arbeit.

    Gruß
    Mr.Coffee

  15. Hallo,

    Habe leider folgendes Problem. Wenn ich npm start eingebe kommt folgende Meldung:

    pi@raspberrypi:~ $ npm start
    npm ERR! Linux 4.4.50-v7+
    npm ERR! argv „/usr/local/bin/node“ „/usr/local/bin/npm“ „start“
    npm ERR! node v4.0.0
    npm ERR! npm v2.14.2
    npm ERR! path /home/pi/package.json
    npm ERR! code ENOENT
    npm ERR! errno -2
    npm ERR! syscall open

    npm ERR! enoent ENOENT: no such file or directory, open ‚/home/pi/package.json‘
    npm ERR! enoent This is most likely not a problem with npm itself
    npm ERR! enoent and is related to npm not being able to find a file.
    npm ERR! enoent

    npm ERR! Please include the following file with any support request:
    npm ERR! /home/pi/npm-debug.log

  16. Hallo Bastian,

    leider immer noch das selbe Ergebnis

    pi@raspberrypi:~ $ npm cache clean
    pi@raspberrypi:~ $ npm start
    npm ERR! Linux 4.4.50-v7+
    npm ERR! argv „/usr/local/bin/node“ „/usr/local/bin/npm“ „start“
    npm ERR! node v4.0.0
    npm ERR! npm v2.14.2
    npm ERR! path /home/pi/package.json
    npm ERR! code ENOENT
    npm ERR! errno -2
    npm ERR! syscall open

    npm ERR! enoent ENOENT: no such file or directory, open ‚/home/pi/package.json‘
    npm ERR! enoent This is most likely not a problem with npm itself
    npm ERR! enoent and is related to npm not being able to find a file.
    npm ERR! enoent

    npm ERR! Please include the following file with any support request:
    npm ERR! /home/pi/npm-debug.log

    • Hi,

      die Versionen sind zwar schon älter, sollten aber unterstützt werden.
      Es schein mir so, als wenn die Installation der Module nicht sauber durchgelaufen ist. Hat Dein User „pi“ ausreichend Rechte?

      Gruß
      Bastian

      • Hi,

        Er hat bei der Installation nicht gemeckert lief alles durch oder hätte ich die Installation mit Sudo machen müssen? Wie kann ich das nachträglich überprüfen? Kann ich das nochmal Löschen und neu installieren?

        • Hi,
          Du könntest es einfach nochmal laufen lassen. Aber sicherer ist es, wenn Du das Verzeichnis löscht, neu entpackst und es nochmal mit sudo laufen lässt.
          Gruß
          Bastian

          • Hi,

            > sonos-http-api@1.4.0 start /home/pi/node-sonos-http-api-master
            > node server.js

            2017-03-13T10:14:00.166Z INFO Presets loaded: {}
            2017-03-13T10:14:01.175Z INFO http server listening on port 5005

            Daran scheint es gelegen zu haben! Vielen Dank für die Hilfe.

            Lg. Beijonig

  17. Also bin auch gerade an dem Punkt „npm start“ und er schmeißt mir auch Fehler aus:

    pi@raspberrypi:~ $ npm start
    npm ERR! Linux 4.4.11-v7+
    npm ERR! argv „/usr/local/bin/node“ „/usr/local/bin/npm“ „start“
    npm ERR! node v4.0.0
    npm ERR! npm v2.14.2
    npm ERR! path /home/pi/package.json
    npm ERR! code ENOENT
    npm ERR! errno -2
    npm ERR! syscall open

    npm ERR! enoent ENOENT: no such file or directory, open ‚/home/pi/package.json‘
    npm ERR! enoent This is most likely not a problem with npm itself
    npm ERR! enoent and is related to npm not being able to find a file.
    npm ERR! enoent

    npm ERR! Please include the following file with any support request:
    npm ERR! /home/pi/npm-debug.log
    pi@raspberrypi:~ $
    pi@raspberrypi:~ $ npm start
    npm ERR! Linux 4.4.11-v7+
    npm ERR! argv „/usr/local/bin/node“ „/usr/local/bin/npm“ „start“
    npm ERR! node v4.0.0
    npm ERR! npm v2.14.2
    npm ERR! path /home/pi/package.json
    npm ERR! code ENOENT
    npm ERR! errno -2
    npm ERR! syscall open

    npm ERR! enoent ENOENT: no such file or directory, open ‚/home/pi/package.json‘
    npm ERR! enoent This is most likely not a problem with npm itself
    npm ERR! enoent and is related to npm not being able to find a file.
    npm ERR! enoent

    npm ERR! Please include the following file with any support request:
    npm ERR! /home/pi/npm-debug.log

    Wie habt ihr das gelöst , kann jemand helfen?

    Grüße Chris

    ps. server soll neben habridge auf einem pi2 laufen

    • Hallo Christian,

      sorry für die späte Antwort.
      Der Fehler deutet darauf hin, dass die Installation nicht vollständig ist. Hast Du alle Schritte aus dem Artikel ausgeführt? Besonders den „npm install –production“. Hier werden die benötigten Module heruntergeladen und implementiert.

      Grüße
      Bastian

  18. Hallo Bastian, wie ich heute morgen in dem anderen Kommentar geschrieben habe, wollte ich mich am Sonos VD mit Raspi versuchen, die Installation verlief ohne Probleme, einzig bei der screen-Geschichte hatte ich einige Probleme, ich habe mich dann im Netz belesen und herausgefunden, dass ich das screen-Paket erst installieren mußte, danach ging der Aufruf auch vonstatten, so dass ich jetzt auch das VD am Laufen habe, also vielen Dank für Deine Ausführungen, ich bin jetzt ein bis´chen stolz, dass ich es geschafft habe und freue mich schon auf die nächsten Schritte mit meinem HC.

    Viele Grüße

    Salve

    • Hallo Salve,

      danke für die Ergänzung. Ich nahm an, dass Screen in jeder Distribution enthalten ist, aber offenbar ist das nicht der Fall.
      Freut mich, dass Du Erfolge erzielen kannst. Weiter so.
      Grüße
      Bastian

  19. Hallo Bastian,
    nachdem die VD’s in dem HC2 nicht mehr funktionieren, will ich mich mit deiner Variante auseinandersetzen.
    Leider habe ich mit einem RP keinerlei Erfahrung und werde sicher ne Menge Fragen haben.
    Das geht schon damit los, wenn ich das Image geladen habe und auf eine SD Karte kopiert habe, muss ich dann trotzdem die Installationsanleitung abarbeiten? Ich glaube das ist ne Menge Holz für mich, ich möchte ja eigentlich nur solche Sprachausgaben für „Alarmanlage ist an“ oder „Waschmaschine ist fertig“ ausgeben.
    Gruß secundani

    • Moin,

      entweder das Image oder die Installationsanleitung.
      Wenn Du Detailfragen hast, dann ist sicher das Forum der richtige Ort dafür.

      Grüße
      Bastian

  20. Hallo,

    Funktioniert diese Implementierung nach update auf aktuelle Sonos Controller FW auch noch?

    Gruß
    Bernhard

    • Hallo Bernhard,

      ich habe gerade nochmal alles kontrolliert. Meine 4 Sonos Geräte sind alle mit der Version 9.0 ausgestattet und die Bedienung via HTTP API ist wie gewohnt möglich.

      Grüße
      Bastian

  21. Pingback: Sonos Integration 2.0 | Mein kleiner Smart Home Blog

  22. Hallo! Bei mir funktioniert es leider nicht.
    Ich habe die IMG (von dieser Seite ganz oben) auf eine SD installiert. Danach einen PI2 per LAN in Betrieb genommen. Ich bin mit Putty als Root (ohne PW) eingestiegen. Danach habe ich alle Schritte befolgt, aber egal ob ich die Schritte von (Raspberry PI A, B, B+) oder (Raspberry PI 2 und neuer) befolge, bei (sudo cp -R * /usr/local/) kommt folgende Fehlermeldung: -ash: sudo: not found
    Bei der Abfrage (node -v) bekomme ich als Rückmeldung statt: v4.0.0 immer v4.5.0
    Was mache ich falsch? Kann mir da jemand bitte weiterhelfen?
    Danke!

    • Hi,

      wenn Du das Image verwendest, dann brauchst Du die nachfolgenden Schritte nicht durchzuführen. Entweder Image oder manuelle Installation.
      Auch ist das Image nun schon einige Tage als und darauf ist nicht mehr die aktuelle Version installiert. Ich würde die Installation an Deiner Stelle noch einmal komplett manuell durchführen.

      Grüße
      Bastian

  23. Hi Bastian
    Vielen Dank für die super Anleitung! Noch eine Frage bezüglich abspielen von Clips. Ich habe das Image installiert und alles funktioniert einwandfrei, mit Ausnahme das Abspielen von Clips. Ich habe auch die entsprechenden Ordner mit WinSCP nicht gefunden. Also habe ich den Ordner „Clips“ hier angelegt: /flash/apps/sonos-http-api/static und die Datei pipip.mp3 dort eingefügt.
    Nach Aufruf von http://192.168.0.15:5005/Buero/clip/pipip.mp3/10 steht im Logfile folgendes:
    { error: ‚action \’clip\‘ not found‘ }
    Kann es sein, dass die Funktion „clip“ im Image nicht implementiert ist? Falls nicht, kann man diese Funktion nachinstallieren?
    Für deine Rückmeldung danke ich dir bestens

    • Hallo Markus,

      das Image ist leider nicht aktualisiert worden, so dass es eine sehr alte Version der Sonos API beinhaltet.
      Ich empfehle Dir die manuelle Installation, wie im Artikel beschrieben. So bekommst Du auch mehr Einblick in die Funktionsweise der API.

      Grüße
      Bastian

  24. Hallo Bastian,

    ich habe auf meinem 3er die installation ohne Fehler nach Anleitung durchgeführt. Der Start klappt auch, jedoch kommt bei jeglichen say Aufruf die Fehlermeldung:
    error „Buffer.alloc is not a function“
    stack „TypeError: Buffer.alloc is not a function\n at FileTokenizer.AbstractTokenizer (/home/pi/node-sonos-http-api-master/node_modules/music-metadata/node_modules/strtok3/lib/AbstractTokenizer.js:7:33)\n at new FileTokenizer (/home/pi/node-sonos-http-api-master/node_modules/music-metadata/node_modules/strtok3/lib/FileTokenizer.js:20:28)\n at /home/pi/node-sonos-http-api-master/node_modules/music-metadata/node_modules/strtok3/lib/index.js:37:24\n at tryCatch (/home/pi/node-sonos-http-api-master/node_modules/music-metadata/node_modules/es6-promise/dist/es6-promise.js:409:12)\n at invokeCallback (/home/pi/node-sonos-http-api-master/node_modules/music-metadata/node_modules/es6-promise/dist/es6-promise.js:424:13)\n at publish (/home/pi/node-sonos-http-api-master/node_modules/music-metadata/node_modules/es6-promise/dist/es6-promise.js:398:7)\n at flush (/home/pi/node-sonos-http-api-master/node_modules/music-metadata/node_modules/es6-promise/dist/es6-promise.js:128:5)\n at doNTCallback0 (node.js:407:9)\n at process._tickDomainCallback (node.js:377:13)“

    Laut internet muss ich die Version 4 von npm aktualisieren, geht das ohne Probleme oder was ruft diesen Fehler hervor?

    Gruß Rico

  25. Danke hat soweit alles geklappt, was ich jetzt nicht schaffe ist das es im Hintergrund läuft ohne das ich angemeldet bin. Screen wird bei gestarteter npm eingeben?
    Also Ablauf nach dem Start vom pi.
    Verzeichnis…
    Npm Start
    Screen
    Npm Start
    Screen – r
    ? Das keine Ausgaben erfolgen Mist richtig?

    • Hallo Thomas,

      das mit Screen hat mir ohnehin nicht so gut gefallen, daher habe ich Deine Frage zum Anlass genommen den Artikel nach 2 Jahren mal zu überarbeiten. Du findest nun eine andere, in meinen Augen viel schickere Lösung um die Sonos API im Hintegrund laufen zu lassen.

      Beste Grüße
      Bastian

  26. Hallo, danke für den Link. Aber ich bekomme es nicht ganz hin. Evtl. jemand der es mit Docker am laufen hat und mir evtl. helfen kann ? Bekomme gerade mal das Image in Docker geladen- nur weis ich nicht wo ich welche Ordner erstellen muss – bzw. wo die json Dateien rein müssen… hin müssen… Würde mich freuen wenn es mir jemand kurz erklären könnte.. Gruß

    • Moin Campos,

      ich habe noch auf keinem Arm System etwas mit Docker gemacht, aber ich werde es bei Gelegenheit mal auf einem Raspberry einrichten und den Artikel ergänzen.

      Grüße
      Bastian

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Ich akzeptiere