Und was ist jetzt der Unterschied vom http Plugin wenn man den curl Befehl auch in CMDtrigger einfügen kann?
Es gibt keinen
. Vielleicht geht es ein bisschen schneller.
Stefan
Und was ist jetzt der Unterschied vom http Plugin wenn man den curl Befehl auch in CMDtrigger einfügen kann?
Es gibt keinen
. Vielleicht geht es ein bisschen schneller.
Stefan
Die API könnte man vielleicht so einsetzen, aber warum? Ob ich nun das iPhone rauskrame und Home aufrufe oder ob ich das iPhone rauskrame und die Sonos-App aufrufe, um die Anlage lauter oder leiser zu stellen, ist doch völlig wumpe.
Außerdem: wo ist das blöde Phone schon wieder? ![]()
Ich setze die API nur in Szenen ein, wie zum Beispiel "Kinoabend", wo ich die Lautstärke auf einen bestimmten Wert einstelle. Aber vielleicht hat jemand bessere Ideen, die mir mal wieder entgangen sind.
Stefan
Kann man als Command auch einen http Befehl absetzen?
zB. http://rasp-ip:5005/Wohnzimmer/volumes/+5
Um so per Trigger das Volume Up der Sonos Boxen zu steuern?
http://rasp-ip/:5005/Wohnzimmer/volumes/+5 ist eine Adresse und kein Programm. Für solche Adressen nutzt du ja sonst auch deinen Browser und rufst die nicht einfach in den Raum (noch nicht
). Aber du kannst diese Adresse mit dem Programm curl aufrufen:
curl http://rasp-ip:5005/Wohnzimmer/volume/+5
und das als Command nutzen.
Allerdings bietet sich hier dann auch gleich das Plugin homebridge-http an.
Stefan
Hier ein paar Befehle zum Herumspielen:
tail -f /var/log/homebridge.log zeigt dir das Log und seine Updates in Echtzeit. Abbruch mit ctrl-c oder strg-c
wc -l /var/log/homebridge.log zeigt dir, wieviele Zeilen das Log hat
grep Scheduling /var/log/homebridge.log | wc -l zeigt dir, wieviele Zeilen davon das Wort Scheduling enthalten
ls -lh /var/log/homebridge.log zeigt dir die Größe des Logs
So. Du kannst deine Logs "rotieren" lassen. Das bedeutet, dass das Programm logrotate sich ihrer annimmt und damit was Schönes macht:
1. es beendet das Loggen in eine Datei, nennt sie um und beginnt das Schreiben in eine neue Datei
2. es komprimiert alte Logs nach einer Weile
3. es löscht alte Logs nach einer Weile
Ein ls -l /var/log/homebridge.log* könnte so etwas bei dir anzeigen:
pi@raspberrypi:/etc/logrotate.d $ ls -l /var/log/homebridge.log*
-rw-r--r-- 1 root adm 91909 Mar 5 21:21 /var/log/homebridge.log
-rw-r--r-- 1 root adm 2346637 Mar 5 06:22 /var/log/homebridge.log.1
-rw-r--r-- 1 root adm 250440 Feb 25 06:12 /var/log/homebridge.log.2.gz
-rw-r----- 1 root adm 87000 Feb 5 06:10 /var/log/homebridge.log.3.gz
-rw-r----- 1 root adm 52390 Jan 29 06:18 /var/log/homebridge.log.4.gz
pi@raspberrypi:/etc/logrotate.d $
Man sieht die Datei homebridge.log. Das ist die aktuelle Logdatei, in die gerade alles mögliche hinein geschrieben wird. Die Datei homebridge.log.1 ist eine ältere Logdatei. Sie hört dort auf, wo die aktuelle beginnt. Die restlichen Dateien mit der Endung .gz sind noch ältere Logs, die dort aufhören, wo die nächste anfängt, und die inzwischen komprimiert wurden. Sie sind von 1-4 durchnummeriert. Bevor die Nummer 4 zur Nummer 5 werden kann, wird sie ganz automatisch gelöscht.
Das wird alles von logrotate erledigt, und das nicht nur für eine Datei, sondern für viele andere. Machst du ein
ls -l /var/log
dann siehst du andere Logs, die nichts mit homebridge zu tun haben und die ebenfalls durchnummeriert sind. Auch hier war logrotate am Werk.
Wenn deine homebridge.log-Dateien schon eine solche Nummerierung haben wie im Beispiel dargestellt, dann musst du nichts weiter unternehmen. Falls nicht, musst du logrotate konfigurieren.
Dazu musst du entweder eine neue Konfigurationsdatei anlegen oder du machst es dir leicht und verwendest eine vorhandene. Die folgende Anleitung verwendet eine vorhandene logrotate-Konfigurationsdatei. Also auf geht's:
sudo nano /etc/logrotate.d/rsyslog
Du siehst etwas Ähnliches wie bei mir:
/var/log/syslog
{
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
invoke-rc.d rsyslog rotate > /dev/null
endscript
}
/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/sonos-http-api-master.log
/var/log/messages
{
rotate 4
weekly
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
invoke-rc.d rsyslog rotate > /dev/null
endscript
}
Alles anzeigen
Das wird so gelesen:
1. Zeile /var/log/syslog
Mit dieser Datei soll alles das gemacht werden, was in den geschweiften Klammern dahinter steht:
daily rotieren, 7 Versionen davon aufheben, komprimieren und weiteres Zeugs. Uns hier völlig wurscht. Geschweifte Klammer zu.
Weiter unten kommt eine ganze Liste von Dateien, beginnend mit /var/log/mail.info und endend mit /var/log/messages. Diese Liste kann bei dir anders aussehen. Aber hier setzen wir an. Der Inhalt zwischen den geschweiften Klammern sagt diesmal, dass wöchentlich rotiert werden soll und vier Versionen aufgehoben werden sollen.
Setze nun einfach hinter /var/log/messages und vor die öffnende geschweifte Klammer { deine homebridge.log ein. Sieht dann so aus:
.
.
.
/var/log/cron.log
/var/log/debug
/var/log/messages
/var/log/homebridge.log
{
rotate 4
weekly
missingok
.
.
.
Alles anzeigen
Alles andere lässt du so, wie es ist. Ich hab die Darstellung nur ein bisschen verkürzt, damit du das besser sehen kannst. Also: da sollen nicht diese Punkte rein, sondern es soll nur der Dateiname /var/log/homebridge zusätzlich eingetragen werden.
Speichern. Fertig. Das war's. Logrotate wird täglich ausgeführt, aber du kannst das auch manuell aufrufen:
sudo /etc/cron.daily/logrotate
Viel Erfolg.
Stefan
Der User sonosapi wollte auf das HomeVerzeichnis von pi zugreifen, und ich schätze, da hats geknallt:
User=sonosapi
WorkingDirectory=/home/pi/node-sonos-http-api-master
Das passt nicht zusammen. Wenn der Dienst unter dem User sonosapi laufen soll, dann kopiere das Verzeichnis node-sonos-http-api-master in das Homeverzeichnis von User sonosapi.
sudo cp -av /home/pi/node-sonos-http-api-master /home/sonosapi
sudo chown -R sonosapi:sonosapi /home/sonosapi/node-sonos-http-api-master
und passe in /etc/systemd/system/sonos-http-api-master.service das WorkingDirectory an:
User=sonosapi
WorkingDirectory=/home/sonosapi/node-sonos-http-api-master
Dann sollte es klappen.
Stefan
Heißt dein systemd file nicht sonosapistart.service?
Dann müsstest du:
sudo systemctl enable sonosapistart
sudo systemctl restart sonosapistart
sudo journalctl -au sonosapistart
verwenden.
Stefan
Versuch's mal hiermit:
sudo systemctl start homebridge && sudo journalctl -f -u homebridge
Stefan
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
Genauso kannst du sie löschen.
Es hängt von der Konfiguration deines Raspi ab, ob die selber gelöscht wird oder nicht. Bei mir wird sie das nach einer Weile. Dafür sorgt ein Dienst namens logrotate.
Wenn ich ein ls auf meine Logdateien in /var/log mache, dann sehe ich folgendes:
pi@raspberrypi:~ $ ls -l /var/log/daemon.log*
-rw-r--r-- 1 root adm 2323998 Mar 4 18:51 /var/log/daemon.log
-rw-r--r-- 1 root adm 4864865 Feb 25 06:12 /var/log/daemon.log.1
-rw-r----- 1 root adm 87000 Feb 5 06:10 /var/log/daemon.log.2.gz
-rw-r----- 1 root adm 52390 Jan 29 06:18 /var/log/daemon.log.3.gz
-rw-r----- 1 root adm 11393 Jan 21 06:11 /var/log/daemon.log.4.gz
pi@raspberrypi:~ $
Mein scharfes Auge (dank dieser Rossmann-Brille für 3,99) sieht dort fünf Dateien mit dem Namen daemon.log oder ähnlich. Vier davon sind ältere Logs mit den Eintragungen vergangener Tage, und drei davon sind komprimiert mit dem gzip-Programm und tragen die Endung .gz (äquivalent zu .zip auf anderen Systemen). Die aktuelle Datei heißt daemon.log.
Ist das bei auch so für deine Homebridge-Logs? Gibt's da auch sozusagen verschiedene Versionen?
ls -l /var/log/homebridge*
Wenn nicht, dann solltest du das nachrüsten. Wahrscheinlich befindet sich auch ein logrotate auf deinem System. Die Konfigurationsdatei(en) für logrotate befinden sich in /etc/logrotate.d. Git es bei dir sowas?
ls -l /etc/logrotate.d
Es ist immer hilfreich, wenn wir hier den output derartiger Befehle sehen.
Stefan
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
Jo, sieht langweilig aus. Setz das tail -f mal auf /var/log/homebridge.log an. Geht übrigens mit jedem Logfile in /var/log oder sonstwo.
Stefan
The value of the capability argument is not permitted for a file. Or the file is not a regular (non-symlink) file
set_cap mag offenbar keine Symlinks. Bitte checke nach, wo node wirklich liegt, mit einem herzhaften:
ls -l /opt/node/bin/node
Kommt dabei so etwas heraus wie
lrwxrwxrwx 1 pi pi 13 Mar 4 17:24 /opt/node/bin/node -> /usr/lib/node/bin/node
dann wende den set_cap-Befehl auf den Teil an, der rechts vom Pfeilchen (->) steht.
Versuche, node-gyp als root auszuführen:
sudo su -
/usr/local/lib/node_modules
node-gyp rebuild
Alles ohne Gewähr.
Stefan
Ach ja: ab und zu mal den Füllstand der Platte checken: entweder mit der Homebridge App (sehr bequem) oder per Terminal (unleserlicher).
pi@raspberrypi:~ $ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 15G 1.8G 13G 13% /
devtmpfs 458M 0 458M 0% /dev
tmpfs 462M 0 462M 0% /dev/shm
tmpfs 462M 30M 433M 7% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 462M 0 462M 0% /sys/fs/cgroup
/dev/mmcblk0p1 41M 21M 20M 52% /boot
pi@raspberrypi:~ $
Das Filesystem /dev/root ist deine SD Card. In meinem Falle sind 1,8 GB benutzt und noch 13 GB frei.
Stefan
Puh, das Plugin hat die ganze Nacht im millisekunden tackt mein Log gefüllt. Warum ist das denn so?? Gibt es die möglichkeit den Log zu leeren??
Klar, wenn wir bloß wüssten wo dein log ist ![]()
1) Homebridge stoppen.
2) rm /var/log/daemon.log
3) Homebridge starten
Wenn du in Echtzeit zusehen willst, wie sich das log füllt:
tail -f /var/log/daemon.log (Abbruch mit strg-c oder ctrl-c)
Logs können deine Festplatte (SD, NAS, alle Festplatten dieser Welt) füllen. Ist die Platte voll, kann es lustige Effekte geben, weil ja nun nichts mehr geschrieben werden kann. Während die Effekte lustig sind, wirst du es möglicherweise nicht so lustig finden ![]()
Stefan
Ordner und Dateien, deren Namen mit einem . beginnen, werden als versteckte Dateien behandelt. Möglicherweise musst du in deinem WinSCP einstellen, dass versteckte Dateien angezeigt werden.
Stefan
Woher weis das Haus, wo ich wohne?
Das Haus weiß rein gar nichts. Dein iPhone weiß das. Wenn du dich in die Nähe der Geo-Koordinaten für dein Haus bewegst, dann registriert das dein Phone und löst eine Aktion aus.
Beim Rest kann ich dir leider nicht helfen. Ich bin hier nur einer.
Stefan
Aber der Anyone erschliesst mich noch nicht so vom Nutzen.
Den kann man dazu benutzen, um beispielsweise seine Wohngemeinschaft nicht frierender Dunkelheit auszusetzen:
Automation:
Wenn ich das Haus verlasse, dann schalte Licht und Heizung aus, außer es ist noch jemand (Anyone) zu Hause.
Wenn man nur zu zweit lebt, kann man das auch anders lösen, aber wenn man zwölf Kinder geplant hat, kann man sich mit Anyone ersparen, alle neuen Monate die Automation anzupassen ![]()
Stefan
... da werd ich hellhörig
wo konfiguriert man den Ort der config.json?
Du kannst den Pfad bestimmen, an dem homebrigde nach seinen Dateien sucht. Das betrifft nicht nur die config.json, sondern alle Dateien, die man im ~/.homebridge-Verzeichnis findet: also die Datei config.json und die beiden Verzeichnisse accessories und persist.
Das wird mit dem Parameter -U gemacht:
homebridge -U /var/lib/homebridge
Das kannst du so in dein Startscript eintragen.
homebridge --help gibt weitere Infos (kann bei laufender Homebridge ausgeführt werden).
pi@raspberrypi:~ $ homebridge --help
Usage: homebridge [options]
Options:
-h, --help output usage information
-V, --version output the version number
-P, --plugin-path [path] look for plugins installed at [path] as well as the default locations ([path] can also point to a single plugin)
-U, --user-storage-path [path] look for homebridge user files at [path] instead of the default location (~/.homebridge)
-D, --debug turn on debug level logging
-I, --insecure allow unauthenticated requests (for easier hacking)
Alles anzeigen
Der Übersicht halber habe ich im obigen Output die Avahi-Warnings entfernt.
Stefan
Atom habe ich mal auf Linux-Maschinen getestet. Schon ok. Auf dem Mac nutze ich TextWrangler. Damit kann man eine Textdatei auch direkt über sftp laden. Das ist eigentlich das, was du suchst.
Ich selbst bearbeite meine config.json immer über die Shell mit vim. Sicherlich nicht die Art von Software, auf die du stehst ![]()
Deine config.json befindet sich entweder in /root/.homebridge/config.json (nicht toll) oder in /home/pi/.homebridge/config.json. Ich hab sie bei mir nach /var/lib/homebridge/config.json verfrachtet.
Stefan