homebridge-zp | Sonos http Api

  • Moinsen,


    irgendwie stoße ich gerade auf ein Problem bei der Einrichtung.


    Ich bin wie folgt vorgegangen:


    1. Installation Sonos API

    wget https://github.com/jishi/node-…tp-api/archive/master.zip

    unzip master.zip

    cd node-sonos-http-api-master


    2. Module und Co mit Node js Server bekannt gemacht

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


    3. mit einem Editor den Startjob " sonos-http-api-master" angelegt

    dir="/home/pi/node-sonos-http-api-master"

    cmd="npm start"

    user="pi"


    4. Die Datei nach /ect/inid.d kopiert und wie folgt ausgeführt:

    sudo chmod 755 /etc/init.d/sonos-hp-api-master


    5. Raspi durchgestartet


    6. https://ipvomRaspi:5005/Wohnzimmer/mute ausprobiert ohne Effekt


    7. sudo npm start direkt ausprobiert und gesehen:

    INFO http server listening on 0.0.0.0 port 5005


    Irgendwie scheint der Dienst nicht auf der IP vom Raspi zu agieren.

    Ich habe noch kein homebridge-http Plugin installiert.

    Ist dies evtl die Krux dafür?

    homebridge-http

  • Läuft den die API ?

    sudo /etc/init.d/sonos-http-api-master status


    Ich habe das hier im Script


    dir="/home/pi/node-sonos-http-api-master"

    cmd="node server.js"

    user="root"


    User Root nur weil meine Hombridge als Root läuft.

  • Machst du das um es im autostart zu haben? Klingt nach einer guten Idee

  • Hm wenn ich eine Status Abfrage durchführe erhalte ich keine Rückmeldung.

    Installiert habe ich sie.

    Wenn ich npm -start ausführe bekomme ich auch die Meldung, dass der Server auf 0.0.0.0 Port 5005 horcht.


    Dies führe ich unter note-sonos-http-api-master aus (geändert entsprechend Deines Startjobs)

    dir="/home/pi/node-sonos-http-api-master"

    cmd="node server.js"

    user="pi"


    Aber ich habe keinen node server.js dort im Verzeichnis.

    Evtl. liegt es noch am Pfad hier? Mal schauen, wo die node server.js liegt.


    Nachtrag:


    Ok ...wenn ich sudo node server.js aufrufe habe ich den gleichen Effekt mit http server listening on 0.0.0.0 port 5005


    Aber warum erhalte ich denn keine Rückmeldung auf die Status Abfrage. Was anderes macht doch mein Cronjob auch nicht unter init.d


    Muss ich vorab noch eine andere node Version installieren?!

    3 Mal editiert, zuletzt von Hunter ()

  • Aber ich habe keinen node server.js dort im Verzeichnis.

    Evtl. liegt es noch am Pfad hier? Mal schauen, wo die node server.js liegt

    Stimmt. Aber du hast in /home/pi/node-sonos-http-api-master eine server.js liegen. Und meiner Meinung nach läuft dein Server auch. Teste mal mit:


    curl -I http://0.0.0.0:5005


    Da erwarte ich jetzt ein:


    HTTP
    pi@raspberrypi:~/legacy $ curl -I http://0.0.0.0:5005
    HTTP/1.1 200 OK
    server: node-static/0.7.9
    cache-control: max-age=3600
    Etag: "126639-4669-1512746704000"
    Date: Sun, 04 Mar 2018 17:58:41 GMT
    Last-Modified: Fri, 08 Dec 2017 15:25:04 GMT
    Content-Type: text/html
    Content-Length: 4669
    Connection: keep-alive


    Zweite Zeile: 200 OK ist dein Freund. Hast du so ein Ergebnis vorzuweisen?


    Das sollte auch passieren bei:


    curl -I http://localhost:5005

    curl -I http://<IP-Adresse deine Pi ohne spitze Klammern>:5005


    Stefan

  • Machst du das um es im autostart zu haben? Klingt nach einer guten Idee

    Ja

    Andere Node Version brauchst du nicht. Sonst nochmal von vorn anfangen. In diesem Tread ist alles beschrieben.

  • Hm irgendwas scheint wirklich nicht zu passen.

    curl -I http://0.0.0.0:5005


    curl: (7) Failed to connect to 0.0.0.0 port 5005: Connection refused

  • Kannst du auch sagen was ich genau machen muss damit es automatisch startet?

  • Kannst du auch sagen was ich genau machen muss damit es automatisch startet?

    Steht hier alles geschrieben. Deshalb habe ich hier mal den Tread erstellt. Du musst ein Startscript erstellen.

  • Wenn ich den Server händisch starte erhalte ich die folgende Meldung:


    pi@raspberrypi:~ $ curl -I http://0.0.0.0:5005

    HTTP/1.1 200 OK

    server: node-static/0.7.9

    cache-control: max-age=3600

    Etag: "288685-4669-1516892402000"

    Date: Sun, 04 Mar 2018 19:56:13 GMT

    Last-Modified: Thu, 25 Jan 2018 15:00:02 GMT

    Content-Type: text/html

    Content-Length: 4669

    Connection: keep-alive


    Also irgendwie greift mein Autostart File nicht.

    Nur was mache ich falsch :/


    Nicht wundern .. habe meine Start Datei jetzt noch einmal neu angelegt als sonosapistart ...


    pi@raspberrypi:/etc/init.d $ sudo service sonosapistart restart

    Warning: sonosapistart.service changed on disk. Run 'systemctl daemon-reload' to re load units.

    Job for sonosapistart.service failed because the control process exited with error code.

    See "systemctl status sonosapistart.service" and "journalctl -xe" for details.

    pi@raspberrypi:/etc/init.d $ systemctl daemon-reload

    ==== AUTHENTICATING FOR org.freedesktop.systemd1.reload-daemon ===

    Authentication is required to reload the systemd state.

    Multiple identities can be used for authentication:

    1. ,,, (pi)

    2. root

    Choose identity to authenticate as (1-2): 1

    Password:

    ==== AUTHENTICATION COMPLETE ===


    pi@raspberrypi:/etc/init.d $ sudo service sonosapistart restart

    Job for sonosapistart.service failed because the control process exited with error code.

    See "systemctl status sonosapistart.service" and "journalctl -xe" for details.

    pi@raspberrypi:/etc/init.d $ systemctl status sonosapistart.service

    ? sonosapistart.service

    Loaded: loaded (/etc/init.d/sonosapistart; generated; vendor preset: enabled)

    Active: failed (Result: exit-code) since Sun 2018-03-04 21:18:56 CET; 57s ago

    Docs: man:systemd-sysv-generator(8)

    Process: 1441 ExecStart=/etc/init.d/sonosapistart start (code=exited, status=203/


    Mar 04 21:18:56 raspberrypi systemd[1]: Starting sonosapistart.service...

    Mar 04 21:18:56 raspberrypi systemd[1]: sonosapistart.service: Control process exit

    Mar 04 21:18:56 raspberrypi systemd[1]: Failed to start sonosapistart.service.

    Mar 04 21:18:56 raspberrypi systemd[1]: sonosapistart.service: Unit entered failed

    Mar 04 21:18:56 raspberrypi systemd[1]: sonosapistart.service: Failed with result '

    lines 1-11/11 (END)

    ? sonosapistart.service

    Loaded: loaded (/etc/init.d/sonosapistart; generated; vendor preset: enabled)

    Active: failed (Result: exit-code) since Sun 2018-03-04 21:18:56 CET; 57s ago

    Docs: man:systemd-sysv-generator(8)

    Process: 1441 ExecStart=/etc/init.d/sonosapistart start (code=exited, status=203/EXEC)


    Mar 04 21:18:56 raspberrypi systemd[1]: Starting sonosapistart.service...

    Mar 04 21:18:56 raspberrypi systemd[1]: sonosapistart.service: Control process exited, co

    Mar 04 21:18:56 raspberrypi systemd[1]: Failed to start sonosapistart.service.

    Mar 04 21:18:56 raspberrypi systemd[1]: sonosapistart.service: Unit entered failed state.

    Mar 04 21:18:56 raspberrypi systemd[1]: sonosapistart.service: Failed with result 'exit-c


    Ich bin echt ratlos warum er mein Startscript nicht mag... :(

    Einmal editiert, zuletzt von Hunter ()

  • Das scheint auch gar nicht mal das Problem zu sein.

    Wenn ich den Server händisch starte kann ich einen http Befehl vom Webbrowser absetzen und die Sonos Gruppe muten.


    Die Frage ist, warum mein Script für den Autostart nicht korrekt arbeitet.

    Der 3zeiler liegt korrekt im Verzeichnis /etc/init.d

    Muss ich für den Pi User noch mehr Berechtigungen einrichten?

    Hatte ja deswegen oben mein Ergebnis geposted als ich ein Start vom Script durchgeführt hatte.

  • Run 'systemctl daemon-reload' to re load units.

    Job for sonosapistart.service failed because the control process exited with error code.

    See "systemctl status sonosapistart.service" and "journalctl -xe" for details.

    pi@raspberrypi:/etc/init.d $ systemctl daemon-reload

    ==== AUTHENTICATING FOR org.freedesktop.systemd1.reload-daemon ===

    Authentication is required to reload the systemd state.


    sudo systemctl deamon-reload


    Steht alles da, die systemtools stehen nur root zur Verfügung.

    :)

  • Reicht es aus diesen Befehl

    sudo systemctl daemon-reload

    abzusetzen, um dem Problem Herr zu werden?


    Ok .. reicht natürlich nicht. Wie auch immer ich jetzt dem User Pi die Berechtigung gebe, das Script auszuführen.:/

  • Der 3zeiler liegt korrekt im Verzeichnis /etc/init.d

    Wie sieht der aus?

    Einfach etwas umbenennen ist wie umziehen aber der Post nicht Bescheid sagen.

    Ich bin mir sicher das es nichts mit rechten zu Tuhen hat.

    Vor allem fehlt der Hinweis kommt der selbe Fehler oder ein neuer

    Was hast du getrieben, lief es schonmal, hast du was kurz vorher installiert?


    Ich kann dir sagen mein System läuft, sag mir warum?

  • Das Startscript hat sich noch nie sauber starten lassen.

    Habe auch heute erst angefangen, die Sonos HTTP Api einzubinden.


    Im Ordner /etc/init.d/ liegt eine Datei namens sonosapistart.sh

    Der Inhalt der Datei lautet:

    dir="/home/pi/node-sonos-http-api-master"

    cmd="npm start"

    user="pi"


    sudo chmod 755 /etc/init.d/sonosapistart.sh wurde durchgeführt.


    Wenn ich den Dienst/Service nun starten will schlägt dies schon fehl.


    sudo service sonosapistart.sh start


    Job for sonosapistart.service failed because the control process exited with error code.

    See "systemctl status sonosapistart.service" and "journalctl -xe" for details.


    Wenn ich mich in dem Ordner /home/pi/node-sonos-http-api-master befinde kann ich den Befehl npm-start sauber absetzen.


    Nachdem ich nun einen Neustart aus der App heraus vom Raspi gemacht habe laufen nun auch alle meine anderen Plugins auf einen Fehler. :(

    Mal schauen, wie ich das jetzt wieder behoben kriege.


    Hat wohl nur etwas lang gedauert bis alles wieder zum Starten bewegt werden konnte.

    2 Mal editiert, zuletzt von Hunter ()

  • Wenn per systemd starten willst, dann entferne das Startscript aus /etc/init.d. Verschiebe es mit


    mv /etc/init.d/sonosapistart.sh /home/pi


    in das Homeverzeichnis von Pi. Ich empfehle das Verschieben, damit man das Startscript immer noch hat, falls man es dann vielleicht doch noch braucht. Systemd benötigt diese Startscripts in /etc/init.d nicht, benutzt sie aber, wenn sie vorhanden sind.


    Danach lege diese Datei an:


    sudo nano /etc/systemd/system/sonos-http-api-master.service

    (oder verwende am besten die von dir bereits erstellte Datei in /etc/systemd/system)


    mit diesem Inhalt

    Die Pfade für WorkingDirectory und ExecStart musst du natürlich an deine Gegebenheiten anpassen. Den Pfad für ExecDirectory findest du heraus mit


    which node


    Und das WorkingDirectory ist bei dir im HomeDir von pi, oder? /home/pi/node-sonos-httpd-api-master oder so?


    Danach


    sudo systemctl daemon-reload

    sudo systemctl enable node-sonos-http-api-master

    sudo systemctl restart node-sonos-http-api-master

    sudo journalctl -au  sonos-http-api-master


    So funktioniert es bei mir. Wenn es bei dir dann auch klappt, kannst du das Backup deines Startscriptes löschen:


    sudo rm /home/pi/sonosapistart.sh


    Ich habe den Start aller Dienste auf meinem Raspi auf systemd umgestellt, damit mein Gebastel mit den Startscripten ein Ende hat. Viel Erfolg wünsche ich dir.


    Stefan

  • Whoaw sschuste


    erst einmal vielen Dank für die ausführliche Anleitung.

    Leider stoße ich doch noch auf einen Fehler.


    Hier habe ich die beiden Pfade angepasst.

    Wenn ich diesen Befehl absetze erhalte ich nun die Meldung:


    pi@raspberrypi:~ $ sudo systemctl enable node-sonos-http-api-master

    Failed to enable unit: File node-sonos-http-api-master.service: No such file or directory


    Muss der Befehl abgesetzt werden auf den Ordner oder auf die erstellte Service Datei?



    Wenn ich statt dessen die 3 Befehle so absetze:


    sudo systemctl enable sonos-http-api-master

    sudo systemctl restart sonos-http-api-master

    sudo journalctl -au sonos-http-api-master


    und dazu habe ich noch einmal den ExecStart von /usr/local/bin/node auf /usr/bin/node geändert.


    Dann erhalte ich nach dem 3. Befehl eine Fehlerschleife:


    Mar 05 10:03:12 raspberrypi systemd[1]: sonos-http-api-master.service: Main process exited, code=exited, status=217/USER

    Mar 05 10:03:12 raspberrypi systemd[1]: sonos-http-api-master.service: Unit entered failed state.

    Mar 05 10:03:12 raspberrypi systemd[1]: sonos-http-api-master.service: Failed with result 'exit-code'.

    Mar 05 10:03:42 raspberrypi systemd[1]: sonos-http-api-master.service: Service hold-off time over, scheduling restart.

    Mar 05 10:03:42 raspberrypi systemd[1]: Stopped Sonos API.

    Mar 05 10:03:42 raspberrypi systemd[1]: Started Sonos API.

    2 Mal editiert, zuletzt von Hunter ()