Hallo Stefan
ok danke, werde das am Wochenende mal probieren, da kann ich ähnlich wie Volume das hinzufügen als Playliste/XXX
Gruß Jörg
Hallo Stefan
ok danke, werde das am Wochenende mal probieren, da kann ich ähnlich wie Volume das hinzufügen als Playliste/XXX
Gruß Jörg
Kann ich denn meine Sonos Lautsprecher irgendwie mit HomeKit ansteuern?
"Hey Siri, mach Lala im Bad" oder sowas?
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?
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?!
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:
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
Alles anzeigenHm 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?!
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...
Vier mal 0.0.0.0 kann nicht sein,
Entweder 127.0.0.1 oder die ipadresse der raspberry verwenden
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.
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
[Unit]
Description=Sonos API
After=network-online.target
Wants=network-online.target
[Service]
User=sonosapi
WorkingDirectory=/usr/bin/node-sonos-http-api-master
ExecStart=/usr/bin/node server.js
Restart=on-failure
RestartSec=30
[Install]
WantedBy=multi-user.target
Alles anzeigen
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.
[Unit]
Description=Sonos API
After=network-online.target
Wants=network-online.target
[Service]
User=sonosapi
WorkingDirectory=/home/pi/node-sonos-http-api-master
ExecStart=/usr/local/bin/node server.js
Restart=on-failure
RestartSec=30
[Install]
WantedBy=multi-user.target
Alles anzeigen
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.