Beiträge von sschuste

    aber sobald ich die config ändere, geht gar nichts mehr

    Du änderst die config, indem du beispielsweise deinen Lebenslauf dort einfügst, und dann funktioniert das nicht. Hab ich das jetzt richtig interpretiert? Vielleicht dürften wir einen Blick auf das Log werfen? Das erspart uns eine Menge Spekulation.


    Stefan

    1. Benötige ich in Homebridge noch dieses Plugin?

    homebridge-hue-utils

    Nein.

    2. Wird bei Abfrage der Hue-Bridge User ID über den „Clip API Debugger“ und dem Drücken auf den Hue Bridge Button möglicherweise jedesmal eine neue User ID ausgegeben?

    Ja.

    3. Mit dem Befehl ph -H <IP.HueBridge> -u <USER-ID> outlet -V

    Kommt folgende Info raus. ph outlet: /resourcelinks/34879: 1 outlets

    Was stelle ich mit der der Info an?

    Das weiß ich nicht. Ich habe die Shell-Befehle nie benutzt.

    4. Die Nr. 34879. Was ist das? Die ID eines HUE-Divice?

    Das weiß ich auch nicht, aber die Hue-Device-Id sind normalerweise sehr klein und fangen bei 1 an.

    5. Bisher habe ich meine „config.json“ noch nicht für die HUE Bridge erweitert. Muss ich das noch? Deswegen blöd gefragt, weil ja alle HUE-Lampen bei mir in HomeKit auftauchen und natürlich somit bedienbar sind – bis auf die Osram Smart+ Steckdose.

    Du musst homebridge-hue installieren und konfigurieren. Bei mir hat das Folgende gereicht:

    Code
    1. {
    2. "platform": "Hue",
    3. "host": "192.168.1.23",
    4. "lights": true,
    5. "users": {
    6. "001788XXXX216401": "woDE2lQYLP1mfUGji674vergiss-es8UK0mbuqWs"
    7. }
    8. },

    lights:true unterdrückt, dass die Hue-Lichts erneut und damit doppelt angezeigt würden. Ich habe übrigens nur zwei Fremdlampen in Betrieb und keine Steckdose.


    Den Usernamen erhält man beim ersten Start von homebridge-hue, indem man homebridge neu startet und sich das Log anzeigen lässt:


    sudo systemctl homebridge restart; sudo journalctl -fau homebridge


    Finger bereit halten zum Knopf drücken.


    Stefan

    Der Shell-Befehl lautet bei mir für mein externes Trackpad:

    ioreg -c BNBTrackpadDevice | grep '"BatteryPercent" =' | sed "s/[^0-9]//g"


    und für die Tastatur:

    ioreg -c AppleBluetoothHIDKeyboard | grep '"BatteryPercent" =' | sed "s/[^0-9]//g"


    und für die Maus:

    ich habe keine.


    Dabei kommt dann einfach eine Zahl heraus, die die Batteriekapazität angibt. Aber wie geht's weiter? Der Ansatz von Gerrit.Fries , einen Apache-Webserver dafür laufen zu lassen, war mir persönlich zu fett für die eine kleine Aufgabe. Ich habe erst mit dem Gedanken gespielt, mir einen eigenen Server in Javascript zu programmieren, aber habe dann Node Red verwendet.


    Node Red ist ein Tool, das sehr leicht zu installieren ist (sowohl auf einem Mac als auch auf einem Raspi) und das es einem erlaubt, auf grafische Art und Weise zu programmieren. Meine Javascript-Kenntnisse sind sehr, sehr mager, aber ich bin in der Lage, mir was zurecht zu fummeln. Und es ist sehr einfach, die eigenen Ergüsse mit anderen Node Red-Benutzern zu teilen. Es ist tatsächlich fast ein Klacks, einen Webserver in Javascript zu programmieren (ich glaube, das sind nur drei oder vier Zeilen Code, die man aus dem Internet kopiert), aber noch viel einfacher ist es, Node Red zu verwenden.


    Programmiert wird im Browser. Das einzig Ärgerliche ist, das mit der letzten Version auf einmal alles in deutscher Sprache angezeigt wird, was nicht so schlimm wäre, wenn die Übersetzung aus dem Englischen nicht so schauerlich wäre. Daher nehme ich als Browser Chrome, den ich so eingestellt habe, dass er alles in Englisch macht. Ich bin das so gewöhnt, ich kann auch keine deutsche Shell im Terminal ertragen.



    So sieht das bei mir aus, ich hab mal einen Screenshot gemacht und mit Sprechblasen kommentiert. So etwas nennt man in Node Red-Sprache einen Flow, und den kann man mit anderen teilen. Hier ist er:

    Code
    1. [{"id":"883badb.f65bc5","type":"exec","z":"369d80e.2abcb","command":"ssh [email protected] /usr/sbin/ioreg -c AppleBluetoothHIDKeyboard | grep '\"BatteryPercent\" =' | sed \"s/[^0-9]//g\"","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"Get keyboard battery value","x":780,"y":1640,"wires":[["bc29640b.85a9c8"],[],[]]},{"id":"b9c4c636.4773b8","type":"inject","z":"369d80e.2abcb","name":"Every hour","topic":"","payload":"","payloadType":"date","repeat":"3600","crontab":"","once":false,"onceDelay":0.1,"x":530,"y":1640,"wires":[["883badb.f65bc5"]]},{"id":"4d1763.1418e89c","type":"homekit-service","z":"369d80e.2abcb","bridge":"7524e8b8.7da908","name":"Keyboard","serviceName":"HumiditySensor","manufacturer":"Stefan Schustereit","model":"Node-Red","serialNo":"1","characteristicProperties":"{}","x":1240,"y":1640,"wires":[[]]},{"id":"bc29640b.85a9c8","type":"function","z":"369d80e.2abcb","name":"Prepare value","func":"msg.payload = { \"CurrentRelativeHumidity\": msg.payload.trim() };\nreturn msg;","outputs":1,"noerr":0,"x":1040,"y":1640,"wires":[["4d1763.1418e89c"]]},{"id":"62188cbb.f4c9d4","type":"exec","z":"369d80e.2abcb","command":"ssh homeb[email protected] /usr/sbin/ioreg -c BNBTrackpadDevice | grep '\"BatteryPercent\" =' | sed \"s/[^0-9]//g\"","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"Get trackpad battery value","x":780,"y":1700,"wires":[["acb4e69d.be23f8"],[],[]]},{"id":"980f76f3.820a58","type":"inject","z":"369d80e.2abcb","name":"Every hour","topic":"","payload":"","payloadType":"date","repeat":"3600","crontab":"","once":false,"onceDelay":0.1,"x":530,"y":1700,"wires":[["62188cbb.f4c9d4"]]},{"id":"7a0e8d00.b80634","type":"homekit-service","z":"369d80e.2abcb","bridge":"7524e8b8.7da908","name":"Trackpad","serviceName":"HumiditySensor","manufacturer":"Stefan Schustereit","model":"Node-Red","serialNo":"1","characteristicProperties":"{}","x":1240,"y":1700,"wires":[[]]},{"id":"acb4e69d.be23f8","type":"function","z":"369d80e.2abcb","name":"Prepare value","func":"msg.payload = { \"CurrentRelativeHumidity\": msg.payload.trim() };\nreturn msg;","outputs":1,"noerr":0,"x":1040,"y":1700,"wires":[["7a0e8d00.b80634"]]},{"id":"7524e8b8.7da908","type":"homekit-bridge","z":"","bridgeName":"Node-RED","pinCode":"030-45-111","port":"","manufacturer":"Stefan Schustereit","model":"Node-RED","serialNo":"1.0"}]

    Sieht hässlich aus, aber egal. Das kopiert man einfach und fügt es in Node Red wieder ein, macht noch ein paar Anpassungen für das eigene Netz und das war's dann auch schon. In diesem Fall muss Node Red vorher durch HomeKit-Fähigkeiten erweitert werden, indem man über das Menü über Manage Palette - Install das Modul @plasma2450/node-red-contrib-homekit-bridged nachinstalliert. Ist so wie Homebridge-Plugins zu installieren.


    Gerrit.Fries , ich weiß genau, dass dir Node Red eine Menge Spaß machen würde. Es verbraucht auch nicht mehr Power als ein Apache Webserver, wahrscheinlich sogar weniger.


    Stefan

    Sieht so aus, als hättest du erst deinen Raspi ausgeschaltet und dann den Befehl ph -H auf einem anderen Rechner eingegeben.


    Ich weiß nicht, wie du deinen Raspi installiert hast, aber wenn du die Forenanleitung genutzt hast, dann steht da drin, dass man die Homebridge mit sudo systemctl stop homebridge anhält und mit sudo systemctl start homebridge wieder startet.


    Stefan

    weiß man wodurch das genau getriggered wird? Also wo genau der bug vom Plugin mit der Anleitung zusammen liegt?

    Ja. Der Programmierer von homebridge-config-ui-x startet den Prozess sudo -n journalctl -o cat -n 500 -f -u homebridge -u homebridge-config-ui-x, um die Ausgabe davon im Webinterface anzuzeigen. Klickt man dann auf einen anderen Bereich im Webinterface wie zum Beispiel den Config-Editor oder die Status-Seite, dann wird der Prozess journalctl mit sudo -n kill -9 wieder gestoppt.


    Die Konfiguration der Forenanleitung lässt aber den Befehl kill mit root-Rechten (also per sudo) nicht zu. Er wird zwar ausgeführt, aber er schlägt fehl, was das System verschweigt, weil sudo mit dem Parameter -n aufgerufen wurde. Der Parameter steht für "keine Ausgabe, auch wenn etwas schief geht". Man bekommt also nicht mit, dass journalctl nicht beendet werden konnte.


    So läuft journalctl also weiter, und wenn man wieder auf die Loganzeige klickt, wird ein weiteres Mal journalctl gestartet. Das passiert jedes Mal, und so nach ungefähr 125 Mal ist dann Feierabend: journalctl beschwert sich über fehlende file descriptors und anstatt des Logs wird eine Fehlermeldung angezeigt:

    Code
    1. Loading logs using "systemd" method...
    2. CMD: sudo -n journalctl -o cat -n 500 -f -u homebridge
    3. Failed to get journal fd: Too many files open
    4. The log tail command "-n journalctl -o cat -n 500 -f -u homebridge" exited with code 1.
    5. Please check the command in your config.json is correct.

    Wenn man dann die Prozessliste aufruft, sieht man die Bescherung:

    Ein Neustart von homebridge-config-ui-x beendet alle Prozesse und das Spiel beginnt von vorn.


    Hier kannst du die ganze Diskussion nachlesen:

    https://github.com/oznu/homebridge-config-ui-x/issues/321


    Stefan