Beiträge von sschuste

    In meinem Fall hatte ich die von Signify ungeliebten LivingWhites in Verdacht

    Das könnte sein. An meiner Hue-Bridge hängt eine reine Hue-Umgebung plus zwei Paulmann-Zigbee-Controller. Bei mir treten keine Probleme auf. Es wäre sicherlich gut, wenn diejenigen, deren Konfiguration ständig gestört wird, mal die angeschlossenen Geräte benennen. Vielleicht kann man so den Fehler eingrenzen.

    Wäre es nicht einfacher und unterm strich günstiger eine Wärmelampe zu kaufen, die sich automatisch wieder abschaltet?

    Noch günstiger wäre es, einen Fön für 17€ zu kaufen. Ok, da geht dann gar nichts mehr automatisch und man muss ihn auch noch in einer Hand halten, während man mit der anderen das Kind wickelt, aber wenn es vor allen Dingen um günstiger geht, dann ist der Fön unschlagbar.

    Ehrlich gesagt verstehe ich das Problem gar nicht richtig. Ich nutze auch beide Apps und habe in der HueApp und der HomeKit App genau die gleichen Raum- und Gerätenamen vergeben. Umsortiert wird bei mir nichts.

    Dem schließe ich mich an, aber ich drücke auch nie wieder auf "Hue - Siri" synchronisieren.

    Plugin deinstalliert, Node upgedatet, Plugin installiert. Die HB musste dann 2x starten aber es läuft. Danke für den Tipp sschuste

    Naja, es stand tatsächlich im Log:


    [27/10/2020, 23:31:57] [Broadlink RM] [INFO] Discovered Broadlink RM Mini (2737) at 192.168.1.157 (37:fb:37:53:db:aa)

    [27/10/2020, 23:31:57] [Broadlink RM] Broadlink RM won't detect device failures due to a version conflict with "net-ping". Please run "npm r homebridge-broadlink-rm -g && npm i homebridge-broadlink-rm -g" to resolve.

    sudo chown -R $USER /usr/local && npm install -g --unsafe-perm homebridge-logic

    Alternativ hättest du auch La Paloma pfeifend gegen das Auto deines Nachbarn treten können. Um ehrlich zu sein, wäre das auch die bessere Tat gewesen.


    Der Befehl sudo chown -R $USER /usrlocal/ ändert den Besitzer aller Dateien im Verzeichnis /usr/local vom Besitzer root auf den aktuell eingeloggten User, wahrscheinlich pi. Dateien des Systems, die einmal root gehört haben und vielleicht auch anderen System-Usern, gehören nun pi.


    In meinem Verzeichnis /usr/local befinden sich:

    ls -laR /usr/local/* | wc -l  (warten, warten, warten...)


    442392 Dateien, die irgendwem gehören, höchstwahrscheinlich root, aber möglicherweise auch anderen Anwendern, und bei dir gehen sie nun alle pi. Das wird möglicherweise keine Auswirkungen haben, aber eine gute Idee war das nicht.

    Error: EACCES: permission denied, mkdir '/var/lib/homebridge'

    Der Prozess homebridge hat keine Rechte, in diesem Verzeichnis etwas anzulegen. Hier wäre es interessant zu wissen, wie du die Homebridge installiert hast, unter welchem User die Homebridge läuft und wie die Rechte dieses Verzeichnisses und seines Inhaltes gesetzt sind. Zudem wäre es interessant zu wissen, wie deine config.json für homebridge-logic aussieht.

    Logddatei, groß, Teil 1:

    Kein Wunder, dass sie groß ist, nachdem du dich entschieden hast, das Log des ganzen Systems zu posten. Kannst du den Befehl mal denen, den du verwendet hast, damit wir das ein bisschen optimieren können?

    Deine Logik heißt also:


    Wenn die Temperatur größer ist als 21,8º, dann schalte die Heizung an, aber nur dann, wenn die Temperatur gleichzeitig unter 19,5º liegt. Nun frage ich mich, wann in deinem Haushalt die Temperatur jemals über 21,8º und gleichzeitig unter 19,5º lag und wann das jemals eintreten soll.


    Wenn sich die aktuelle Temperatur irgendwie ändert, dann schalte die Heizung ein, wenn sie unter 19,5º liegt.


    Etwa so:

    Guten Morgen, hoffentlich kann mir jemand helfen?

    Alle Automationen funktionieren immer so, dass sie ausgelöst werden, wenn ein Ereignis eintritt, nicht wenn ein bestimmter Wert existiert. Deine Automation wartet darauf, dass die Heizung ausgeschaltet wird.


    Beispielsweise würde eine Automation, die einfach nur sagt:

    Temperatur < 19,6º: schalte die Heizung an

    wunderbar funktionieren, wenn die Temperatur von 20º auf 19º sinkt, aber nicht mehr, wenn die Temperatur von 15º auf 14º sinkt. Denn eine Automation legt fest: sobald die Temperatur die Grenze von 19,6º unterschreitet, mach die Heizung an. Sie sagt nicht: wenn die Temperatur unter 19,6º liegt.

    jetzt ist die Frage wie ich den Schalter zu einem Taster mache da es ja eine einmalige Funktion ist welche ich nicht ein und ausschalten will sondern nur betätigen

    Mit HomeKit nicht darzustellen. Da gibt's nur Schalter. Man kann mit einer Homebridge einen Schalter bauen, der nach x Sekunden wieder ausgeschaltet wird - auch hier kein richtiger Taster, aber er tut zumindest so.

    Hier scheitert es leider schon an meinem Verständnis da mal -u, ein ander mal --user verlangt wird

    Der Unterschied zwischen -u und --user ist mit drei Worten beschreiben: es gibt keinen. Sie bedeuten das gleiche, sie machen das gleiche, sie verhalten sich gleich. Die kurze Version -u ist die, die man vor 20 Jahren verwendete, da gab's nur die, bis dann einer auf die Idee kam, man könne doch zur Abwechslung etwas selbsterklärende Optionsbezeichner verwenden.


    So bedeutet

    --data das gleiche wie -d

    --request das gleiche wie -X

    --header das gleiche wie -h

    und curl kennt noch viele Dutzende anderer Optionen.


    Diese ausführlichen Optionsbezeichner können im Gegensatz zu den kurzen aus vielen Zeichen bestehen. Die kurzen nur aus einem einzigen Buchstaben, wobei Groß- und Kleinschreibung unterschieden werden. Damit curl nicht durcheinander kommt, denn in --request steht ja auch ein -r drin (und das macht was völlig anderes), werden die langen Bezeichner mit zwei Minuszeichen (--) angeführt.


    Das ist inzwischen ein Standard bei vielen Programmen. Welche Optionen es gibt und wie die Bezeichner heißen, kann man im Manual nachschlagen, beispielsweise mit man curl (Blättern mit Leertaste, Abbruch mit q).


    Beispielsweise kann man die Homebridge starten mit dem Befehl:

    homebridge -I -Q -C -U /var/homebridge oder genauso gut mit:

    homebridge --insecure --no-qrcode --color --user-storage-path /var/homebridge


    und was bedeutet überhaupt -X

    Ein Webserver kennt verschiedene Methoden. Alles, was man mit http:// anspricht, ist im Grunde ein Webserver. So ist also auch die Lametric einer, oder genauer: sie stellt einen bereit. Die Methoden, die man gegen Webserver anwenden kann, sind GET, POST PUT, DELETE und andere, wobei nicht jeder Webserver alle unterstützt. Letztendlich werden diese Methoden dazu benutzt, um Daten zwischen dem Browser (in diesem Falle: curl) und dem Server (in diesem Falle Lametric) auszutauschen. Mit dem -X (oder --request) wird curl mitgeteilt, welche Methode angewendet werden soll.


    GET ist die Standardmethode, also kann man im curl-Befehl das -X GET auch weglassen. Dein Safari macht im Grunde immer ein GET, um eine Seite aufzurufen, aber wenn's dann ins eingemachte geht wie beispielsweise beim hin und her von Daten beim Online-Shopping oder hier im Forum beim Posten von Daten, dann macht der Safari auch POST und PUT, auch wenn man das weder unmittelbar sieht noch irgendwie mitbekommt.


    Noch ein Punkt zu curl: Der einzige Parameter, der ohne einen Optionsbezeichner wie -h oder -u aufgerufen wird, ist die URL selbst. Wenn im curl-Befehl also etwas steht, was keinen Optionsbezeichner hat, dann ist es immer die Serveradresse, die curl benutzen soll. Daher hat weiter oben dein Befehl eine Fehlermeldung geworfen:


    curl GET http://192.168.178.xx:8080/api/v2/device/wifi --user dev:4d71e9f8105e...


    Curl glaubt nun, du willst einen Server namens GET verwenden. Und gibt dann zurück:

    curl: (6) Could not resolve host: GET (gleichbedeutend mit: es konnte keine IP-Adresse für den Server GET gefunden werden).


    Jedenfalls habe ich den Befehl zum ändern der Lautstärke im Terminal eingegeben und nur ein > bekommen was wohl nur bedeutet das nichts passiert ist...zumindest weiss ich nicht wie ich das interpretieren soll.

    In nahezu 100% aller Fälle bedeutet das, dass ein Anführungszeichen (") oder ein Tick (') fehlt und das du jetzt bitte noch was eingeben sollst. Ich glaube nicht, dass ich diese Anzeige mehr als 150.000 mal in meinem Leben gesehen habe. Jeder sieht die, wenn er sehr krude Kommandos mit vielen Anführungszeichen auf der Shell eingibt und jeder sucht sich dann die Augen blind. Das kannst du 30 Jahre lang machen und bekommst trotzdem ein >.


    Ich baue schwierige Befehle wie solche curl-Befehle mit einem Haufen JSON drin immer in Textedit zusammen. Erst nehme ich das JSON-Zeugs, formatiere es, so das ich halbwegs sehen kann, ob es korrekt ist (und schieb's auch gern nach JSONlint rein), dann bringe ich das in eine Zeile, dann schreibe ich -d' davor und ein ' dahinter und so bastel ich mir Stück für Stück den Befehl zusammen. Auf der Shell ist das nur was für Autisten oder Fans von hohem Frustlevel.

    curl -X PUT -u 'dev:4d71e9f8105exx5d9exxxxxxab6' -H 'Content-Type: application/json' -d '{"volume" : 50}‘ http://192.168.178.53:8080/api/v2/device/audio

    -d '{"volume" : 50} <-- was soll das dahinten für ein Ding sein? Sind wir hier im Französichunterricht? Das muss kein `, sondern ein ' sein.

    Die Doku ist mager, aber trotzdem gut :-D Aber sie könnte besser sein, indem die Herrschaften einfach mal gleich den curl-Befehl da hinschreiben.


    Es gibt zwei Möglichkeiten mit dem Audio:

    • Die eingestellte Lautstärke abfragen.
      Methode: GET.
      URL: Raspi-IP-Adresse + ":" + Port + /api/v2/device/audio.
      Also so ähnlich wie du es schon hast, aber halt nur so ähnlich. Sieht dann so aus:
      curl -X GET --user dev:4d71e9f8105xxxxxx4675441c955b3b8e3274b5d9e1a9723b760ab6 http://192.168.178.999:8080/api/v2/device/audio
    • Die eingestellte Lautstärke verändern.
      Methode: PUT.
      URL: Raspi-IP-Adresse + ":" + Port + /api/v2/device/audio.
      Die URL ist gleiche wie oben, aber hier muss nun noch die neue Lautstärke übergeben werden und zwar in JSON wie schon weiter oben
      beschrieben (und nicht, indem du hinten einfach mal die Zahl anhängst, nur weil dein Innerstes sich weigert, noch mal mit diesem shitty-JSON herumzumachen).

    Also muss da wieder der curl-Befehl zusammen gebastelt werden:

    curl -X PUT -u 'dev:4d71e9f8105e3c5b76c5213xxxxxb5d9e1a9723b760ab6' -H 'Content-Type: application/json' -d 'ZHE_JSON_STUFF' http://192.168.178.999:8080/api/v2/device/audio


    Und ZHE_JSON_STUFF ist laut Doku das hier:

    Code
    {
    "volume" : 100
    }

    Der muss in eine Zeile gebracht werden:

    {"volume" : 100}


    und da oben zwischen die Ticks eingebaut werden:

    …n/json' -d '{"volume" : 100}' http://192…


    oder:

    …n/json' -d '{"volume" : 20}' http://192…



    So sollte es gehen, aber ich habe es nicht getestet.

    Ich werde das mit diesen Json Strings in diesem leben denke nicht mehr auf die kette kriegen. Das sind für mich böhmische Dörfer...

    JSON ist nicht so schwierig. Schwierig ist es, einen Befehl wie deinen curl-Befehl da oben in Anführungszeichen zu setzen, weil er schon Anführungszeichen enthält. Das ist tricky und ziemlich unübersichtlich und ich kenn nur wenige, die dafür nicht mindestens drei Anläufe brauchen.


    Erstmal muss der Befehl richtig geschrieben werden:

    curl - X POST - u 'dev:4d71x... ist nicht richtig. Es darf nicht - X heißen, sondern muss -X sein. Zwischen dem Minus und dem X darf kein Leerzeichen stehen. Das gleiche gilt für -u, -H und -d.


    Dann nehmen wir das Ding mal auseinander:

    curl

    -X POST

    -u 'dev:4d71xxxxxxxxxx76c52137abxxxb5d9e1axxxxx60ab6'

    -H 'Content-Type: application/json'

    -d 'viel krudes JSON'

    http://192.168.178.999:8080/api/v2/device/notifications


    Wie man sieht, wir curl mit fünf Parameternaufgerufen. Der letzte ist die Maschine die angesprochen werden soll: deine Lametric. Der erste ist die Methode, mit der Daten übergeben werden sollen: POST. Die anderen sind der User -u, der HTTP-Header -H und die Daten, die gesendet werden sollen, -d. Genau hinsehen! Das was hinter -u, -H und -d folgt, wird in Ticks (') eingeschlossen. Bei dir fehlt schon mal der Tick hinter deinem JSON-Zeugs.


    Das hier hier der JSON-Code. Deiner war falsch und dieser hier ist zumindest richtiges JSON. Ich habe ihn aber nicht an meiner Lametric ausprobiert.

    Dieser Code enthält Anführungszeichen! So kann man ihn zwar mit curl versenden, und so wäre er auch richtig in einem Shell-Script, aber so funktioniert er nicht in config.json. Aber wir brauchen ihn zunächst in jedem Fall in einer einzigen Zeile, also so:

    Code
    {"priority":"warning","model":{"cycles":0,"frames":[{"icon":"8440","text":"HELLO"}]},"sound":{"category":"notifications","id":"cat"}}


    Dein Befehl lautet also

    curl -X POST -u 'dev:4d71xxxxxxxxxx76c52137abxxxb5d9e1axxxxx60ab6' -H 'Content-Type: application/json' -d 'DEIN-JSON' http://192.168.178.999:8080/api/v2/device/notifications


    DEIN-JSON ersetzt du mit copy&paste mit dem JSON-Code, der da oben zu sehen ist.

    So könnte der curl-Befehl von der Shell abgesendet werden und damit kannst du testen, ob deine Lametric tatsächlich den Text HELLO zeigt und dazu das Geräusch cat abspielt.


    Wenn du das in config.json einsetzen willst, musst du den gesamten curl-Befehl in Anführungszeichen setzen. Das ist blöde, weil der Befehl schon Anführungszeichen enthält.

    Code
    {
    "accessory": "CmdTrigger",
    "name": "Neustart Raspi",
    "command": "curl-Befehl"
    },

    Daher müssen die Anführungszeichen im curl-Befehl maskiert werden, so dass das cmdtrigger-Plugin diese nicht als seine eigenen Anführungszeichen interpretiert. Das kann man mit Suchen und Ersetzen machen, damit es nicht Fluchen und Entsetzen wird.


    Ersetze alle " durch \" ergibt dann diesen curl-Befehl:

    curl -X POST -u 'dev:4d71xxxxxxxxxx76c52137abxxxb5d9e1axxxxx60ab6' -H 'Content-Type: application/json' -d '{\"priority\":\"warning\",\"model\":{\"cycles\":0,\"frames\":[{\"icon\":\"8440\",\"text\":\"HELLO\"}]},\"sound\":{\"category\":\"notifications\",\"id\":\"cat\"}}' http://192.168.178.999:8080/api/v2/device/notifications


    So sollte der Befehl in config.json funktionieren. So funktioniert er nicht mehr auf der Shell oder in einem Shell-Script!


    Bitte beachten: ich habe davon nichts ausprobiert und das alles kann daher immer noch Fehler enthalten.