HowTo: Node-Sonos-HTTP-API Installation

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.

Das könnte Dich auch interessieren...

46 Antworten

  1. Hoggle sagt:

    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….

  2. Hoggle sagt:

    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?

    • Bastian sagt:

      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

      • bercht-a sagt:

        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

        • Bastian sagt:

          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

          • bercht-a sagt:

            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?

            • Bastian sagt:

              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

          • bercht-a sagt:

            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…

            • Bastian sagt:

              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

  3. Sascha sagt:

    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

  4. Shingoo sagt:

    Da schließe ich mich doch gleich mal an. Danke Dir!!!

  5. Daniel sagt:

    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. Tino sagt:

    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. ChrisBeat sagt:

    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

    • Bastian sagt:

      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. Freevalley sagt:

    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. ChrisBeat sagt:

    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. valshare sagt:

    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

    • Bastian sagt:

      Hi,
      vielen Dank für das Startscript.
      Gruß
      Bastian

    • Mr.Coffee sagt:

      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

      • Mr.Coffee sagt:

        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.

  11. Michael sagt:

    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. ChrisBeat sagt:

    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. Mr.Coffee sagt:

    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

    • Bastian sagt:

      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

      • Mr.Coffee sagt:

        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. Mr.Coffee sagt:

    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. Beijonig sagt:

    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. Beijonig sagt:

    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

  17. Beijonig sagt:

    pi@raspberrypi:~ $ npm -v
    2.14.2
    pi@raspberrypi:~ $ node -v
    v4.0.0

    • Bastian sagt:

      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

      • Beijonig sagt:

        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?

        • Bastian sagt:

          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

          • Beijonig sagt:

            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

  18. Christian Hunsicker sagt:

    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

    • Bastian sagt:

      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

  19. Salve sagt:

    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

    • Bastian sagt:

      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

  1. 9. Oktober 2016

    […] nachfragen. Bei entsprechender Resonanz mache ich mich gleich ans Werk. Den Artikel zur Installation von Node.js und der API habe ich mittlerweile hier veröffentlicht. Ich freue mich über jedes […]

Kommentar verfassen