Beiträge von sschuste

    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

    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

    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:

    Code
    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:


    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

    Der Ordner beginnt mit einem Punkt: .homebridge. Alles Dateien und Ordner, die mit einem . beginnen, werden versteckt.


    Im Öffnen-Dialog kann man unten ein passendes Häkchen setzen:




    Show items starten with "."


    Das sollte helfen.


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


    Code
    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

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



    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

    Und ich scheitere an lint:

    Lint meint nur:

    Code
    Error: Parse error on line 11:
    ...e-input-controls": ['menu', 'topmenu']	
    -----------------------^
    Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', ']', got 'undefined'

    Stefan

    Es wird nur die Anfangszeit vorgezogen. Die Endzeit bleibt, daher der Schalter ist länger Ein: Offsetdauer + Termindauer.

    Ich finde den Kalender toll, aber ich benutze ihn nicht für die Müllabfuhr. Bei mir kommen die nämlich einfach klingeln und suchen sich die Tonne dann selber raus. Ich benutze ihn für Fußballspiele von Eintracht Frankfurt. Bei mir soll der Kalender das Radio anmachen, und der Anfangsoffset ist prima, weil ich jetzt das Radio fünf Minuten vorher einschalten kann. Danke dafür, jetzt isses perfekt für mich.


    Tatsächlich fangen Fußballspiele eigentlich nie vor dem geplanten Datum an. Sie enden dafür manchmal später: Nachspielzeit, Verlängerung, das Spiel hat vielleicht später begonnen als geplant oder das Publikum hat in der Halbzeitpause das Stadion abgerissen und es muss jetzt erst ein neues gebaut werden. In meinem Fall wäre also ein Offset nach dem Termin ganz brauchbar, aber um ehrlich zu sein: da das Ende des Termins in keinem Fall absehbar ist, wüsste ich auch keinen Offset, und am Ende läuft es dann genau darauf hinaus, dass ich das Radio wie schon jetzt einfach manuell abstelle.


    Wie dem auch sei: ich wollte nur mal eine Kalenderanwendung vorstellen, die sich nicht an Müll orientiert... obwohl... wenn ich an das Spiel gegen Stuttgart denke...


    Stefan

    Ja. Sieht erstmal hässlicher aus als es wirklich ist. Ich mach's so auf der Shell:


    curl -H "Content-Type: application/json" -X PUT -d '{"effect":"colorloop"}' http://192.168.1.2/api/FmA2tRUxWr7pAi4DLjBsHF491bhcf5o5F3C1Uyk9/groups/2/action/


    Um das nachzumachen, musst du einen User auf der Hue-Bridge anlegen. Der User im obigen Beispiel heißt FmA2tRUxWr7pAi4DLjBsHF491bhcf5o5F3C1Uyk9. Der funktioniert bei dir nicht, sondern du musst deinen eigenen Usernamen kreieren.


    Das ist sehr einfach. Folge dieser Anleitung: https://www.developers.meethue.com/documentation/getting-started

    Einfach nachmachen.


    Wenn es dir gelungen ist, öffnest du ein neues Browserfenster und rufst auf:


    http://192.168.1.2/api/FmA2tRU…91bhcf5o5F3C1Uyk9/lights/


    Wobei du natürlich die IP-Adresse deiner Hue-Bridge einsetzt und deinen neuen Usernamen. Ein unleserlicher JSON-Verhau sollte deinen Bildschirm füllen. Um ihn leserlich zu machen, kopiere ihn und validiere ihn bei jsonlint.com. Oder gib auf der Shell ein:


    curl -H "Content-Type: application/json" -X GET http://192.168.1.2/api/FmA2tRUxWr7pAi4DLjBsHF491bhcf5o5F3C1Uyk9/lights/ | python -m json.tool


    Auch hier wieder deine IP-Adresse und deinen Usernamen verwenden, aber das sollte wohl inzwischen klar sein, oder? ;)


    Das Ergebnis ist in beiden Fällen ein lesbarer JSON-Output, der deine Lampen anzeigt. Das wird mit dem API-Request lights gemacht. Steht hinter dem Usernamen.


    Mein Beispiel ganz oben enthält den API-Request für groups. Damit sind die gruppierten Lampen gemeint, also beispielsweise Wohnzimmer oder Flur. Bei mir hat das Wohnzimmer die Nummer 2:


    curl -H "Content-Type: application/json" -X GET http://192.168.1.2/api/FmA2tRUxWr7pAi4DLjBsHF491bhcf5o5F3C1Uyk9/groups/ | python -m json.tool


    ergibt ein Ergebnis, das bei mir diesen Wust enthält:

    Wie man sieht, hat Wohnzimmer die Nummer 2. Das Beispiel schaltet also den Colorloop für den ganzen Raum ein. Wenn du eine einzelne Lampe loopen willst, musst du sie mit dem Request lights ermitteln. Was sich also bei dir ändern wird: /groups/2/action könnte sowas wie /lights/5/action sein.


    So, und das Ganze wird wieder ausgeschaltet mit:

    curl -H "Content-Type: application/json" -X PUT -d '{"effect":"none"}' http://192.168.1.2/api/FmA2tRUxWr7pAi4DLjBsHF491bhcf5o5F3C1Uyk9/groups/2/action/


    Auf dem Raspi könnte man nun ein Shell-Script namens loopy.sh schreiben und dieses per homebridge-cmd aufrufen:

    Bash
    #!/bin/bash
    
    if [ "$1" == "on" ]; then
            curl -H "Content-Type: application/json" -X PUT -d '{"effect":"colorloop"}' http://192.168.1.2/api/FmA2tRUxWr7pAi4DLjBsHF491bhcf5o5F3C1Uyk9/groups/2/action/
    else
            curl -H "Content-Type: application/json" -X PUT -d '{"effect":"none"}' http://192.168.1.2/api/FmA2tRUxWr7pAi4DLjBsHF491bhcf5o5F3C1Uyk9/groups/2/action/
    fi

    Ja, das geht auch eleganter, aber es funktioniert mit (nachdem man noch ein flottes chmod +x loopy.sh eingegeben hat):


    /home/pi/loopy.sh on und /home/pi/loopy.sh off.


    Viel Vergnügen.


    Stefan