homebridge-http-webhooks

  • Hallo, kann ein Switch bei Betätigung auch zwei webhooks / url hintereinander und den zweiten mit ein paar Sekunden Verzögerung absenden? Habe jetzt normal über Homekit mit Szene versucht, scheitert aber immer daran, da gleiches Gerät / Schalter nicht geht. Würde gerne mit Schalter Jalouisemotor AUF starten und nach paar Sekunden dann Stop Befehl geben, dass Jalousien auf sind. Überlegung war, das über webhook schalter zu machen. Falls jemand eine Lösung einfällt, wäre ich dankbar!

    Bisher nicht möglich. Pull Request wird gern angenommen.


  • Frage hierzu,

    kann es sein, dass sich der Ordnerpfad geändert hat?

    Bei mir auf dem raspi mit pios finde ich den homebridgeordner hier

    /var/lib/homebridge/persist

    muss ich dann den hier angeben?

    Danke

    raspi4 8GB, Lumary (Tuya) RDGWW LED Panels, Shelly i3, i4, 2, 2.5 | Homebridge v 1.3.9 / v4.41.5

  • Hallo @Benzman81


    kann ich mit deinem Plugin diesen Vorgang, den ich auf dieser swagger Seite durchführen kann,




    als button konfigurieren?

    Ich habe schon einiges ausprobiert aber bekomme es nicht hin.


    Was ich erreichen möchte,

    ich habe eine Tuya LED die ich mit einer Shelly i3 (http-Befehl senden an Homebridge bzw dein Plugin) mit einem Wandtaster ein- ausschalten möchte.


    Die Tuya LED kann ich mit der Shelly nicht direkt per http-Befehl ansteuern, deshalb über Homebridge und dein Plugin.


    Ich habe das Plugin so verstanden, dass ich ein in HB vorhandene accessorie über einen http-Befehl ein- ausschalten kann.


    Über swagger habe ich von dem zu steuernden Gerät folgende Informationen:

    Code
    "uniqueId": 123456
    "aid": 2
    "iid": 8
    "uuid":
    "characteristicType": "On"
    "value": "false"

    Ich habe es zuerst mit folgender URL ohne ein Plugin versucht, also direkt die API von HB ansprechen.
    (Ob die URL so richtig aufgebaut ist ?)

    Code
    http://user:[email protected]:8081/api/accessories/123456?characteristicType=On&value=true

    Da scheiterte ich an der Authentifizierung, weil die Befehle unter http://ip-der-hb:port/swagger/ erst nach einem Login funktionieren. Ich dachte, dass es mit der Basic Authentication user:password@ in der URL funktionieren könnte doch leider nicht.


    Mit dem Plugin unter lights habe ich folgendes versucht,

    Code
    On URL
    http://192.168.1.100:8081/api/accessories/123456
    On Method
    Put
    On Body

    Kann es sein, dass das Plugin für was anderes gedacht ist?

    raspi4 8GB, Lumary (Tuya) RDGWW LED Panels, Shelly i3, i4, 2, 2.5 | Homebridge v 1.3.9 / v4.41.5

  • Also mit meinem Plugin kannst du Geräte erstellen, die irgendeinen HTTP-Call durchführen. Über die Headers kannst du dann auch Token oder ähnlich mitgeben. Ob das mit der von dir aufgerufenen URL funktioniert, weiß ich nicht.

  • Auf einer Shell müsstest du mit einem Befehl ähnlich wie dem folgenden etwas erreichen können:


    curl -H "Content-Type: application/json" -X PUT -d '{"characteristicType":"On", "value": true}' http://192.168.1.22:1234/api/acessories/8687923982399


    Den könnte man dann mit homebridge-cmdswitch2 aufrufen.

  • Hallo zusammen, habe versucht den kompletten Thread hier zu verstehen... Denke zum Teil habe ich das wohl auch... Möchte gern trotzdem fragen...

    Ich habe mehrere Devices wie zum Beispiel Temp- und Stromverbrauch Sensoren in der Bridge.

    Diese Werte möchte ich nun gerne "abfragen" und auf einem "Mini-Oled-Display" auf Basis eines Esp8266 darstellen... Dafür ist doch das Plugin (auch) im Stande, oder?


    Dankeschön ;)

  • Auf einer Shell müsstest du mit einem Befehl ähnlich wie dem folgenden etwas erreichen können:


    curl -H "Content-Type: application/json" -X PUT -d '{"characteristicType":"On", "value": true}' http://192.168.1.22:1234/api/acessories/8687923982399


    Den könnte man dann mit homebridge-cmdswitch2 aufrufen.


    bekomme die Meldung

    Code
    {"statusCode":401,"message":"Unauthorized"}


    Irgendwie muss man sich mit einem User an dieser API-Schnittstelle anmelden.


    Ich habe mir die curl --help angeschaut mit -u user:passwort habe ich es auch versucht

    Code
    curl -X PUT -H "Content-Type: application/json" -d '{"characteristicType":"On", "value":"true"}' -u 'shellyuser:123456' http://192.168.1.22:1234/api/accessories/8687923982399


    Jetzt weiss ich nicht ob ich gerade direkt auf die API von Homebridge zugreife?

    Obwohl eigentlich schon, weil mit http://192.168.1.22:1234/swagger komme ich ja auf den Swagger-UI für die Homebridge UI API Reference. Also ist swagger nur eine grafische Darstellung der Homebridge-API ?


    Dann ist es ja im ersten Moment eine Anmeldung auf die Homebridge.

    Habe ich das so richtig verstanden?? ;)


    Aber was ist das dann mit der "Authorization" Bearer?

    Da gibts auf der swagger documentation folgendes dazu

    https://swagger.io/docs/specification/authentication/

    raspi4 8GB, Lumary (Tuya) RDGWW LED Panels, Shelly i3, i4, 2, 2.5 | Homebridge v 1.3.9 / v4.41.5

  • Jetzt weiss ich nicht ob ich gerade direkt auf die API von Homebridge zugreife?

    Obwohl eigentlich schon, weil mit http://192.168.1.22:1234/swagger komme ich ja auf den Swagger-UI für die Homebridge UI API Reference. Also ist swagger nur eine grafische Darstellung der Homebridge-API ?

    Ich bin jetzt ein bisschen durcheinander. Wenn ich es richtig sehe, greifst du über homebridge-config-ui-x auf deine Homebridge zu. Nicht die Homebridge bietet dir Swagger, sondern homebridge-config-ui-x.


    Lass uns mal genauer mit den Ports sein: die Homebridge läuft normalerweise auf Port 51826, die grafische Oberfläche bei dir auf Port 8081 (oder?). Man kann auf beide Ports zugreifen. Wenn du auf Port 51826 zugreifst, dann sprichst du mit der Homebridge direkt. Beim Zugriff auf Port 8081 sprichst du mit dem Plugin homebridge-config-ui-x und das redet dann mit der Homebridge.


    Ein direkter Zugriff auf die Homebridge wird hier beschrieben: https://github.com/homebridge/homebridge/issues/1219, dort im Post von NorthernMan54 vom 21. März 2017. Das artet aber in ein totales Gefummel aus und macht wenig Spaß. Ich hab's zumindest aufgegeben. Daher ist der Zugriff via homebridge-config-ui-x deutlich bequemer, den dort hat oznu, der Programmierer des Plugins, das Gefummel für uns bereits übernommen.


    Mir hat oznu mal geholfen, das Backup der Homebridge-Konfiguration über homebridge-config-ui-x zu automatisiseren. Heute macht das Plugin das selber, aber damals habe ich dafür ein Skript geschrieben. Und dieses Skript macht hat die Authentifizierung, die du brauchst. Ohne es getestet zu haben, könnte das für dich so aussehen:


    Der curl-Aufruf braucht ein Token als Authentifizierung.

    curl -X PUT -H "Authorization: bearer ACCESS_TOKEN" -H "Content-Type: application/json" -d '{"characteristicType":"On", "value":"true"}' http://192.168.1.22:8081/api/accessories/8687923982399


    Das ACCESS_TOKEN muss vor dem obigen Aufruf beschafft werden mit:

    curl "http://192.168.1.22:8081/api/auth/login" -H 'Content-Type: application/json' --data-binary  {\"username\":\"admin\",\"password\":\"geheim2\"}" | jq -r .access_token


    Dazu braucht dein System die Software jq, die du mit sudo apt-get install jq installieren kannst.


    Ich poste mal mein Skript für das Backup, vielleicht kannst du damit was anfangen und es anpassen.

  • Ich bin jetzt ein bisschen durcheinander. Wenn ich es richtig sehe, greifst du über homebridge-config-ui-x auf deine Homebridge zu. Nicht die Homebridge bietet dir Swagger, sondern homebridge-config-ui-x.

    Deine Vermutung ist richtig ;)

    Jetzt habe ich es glaube ich auch begriffen. Die Homebridge läuft bei mir auf Port 51364 und Homebridge-UI-X auf Port 8581.



    Eine erfreuliche Nachricht habe ich ;)


    Mit diesem Befehl funktioniert es (true=einschalten / false=ausschalten) mit Dimmen und so habe ich noch nicht ausprobiert.

    Code
    curl -X PUT http://HomebridgeIP:port/characteristics --header "Content-Type:Application/json" --header "authorization: 081-15-123" --data "{\"characteristics\":[{\"aid\":2,\"iid\":10,\"value\":true}]}"


    Man muss vorher herausfinden welche aid und iid der Schalter den man steuern möchte in der accessories Liste hat.

    Das geht entweder über Swagger UI, dass ja wie du geschrieben hast von der Homebridge-UI-X bereitgestellt wird also dann http://Homebridge-UI-X_IP : Port/swagger und dann unter Accessories GET /api/accessories dort erhält man eine Liste der Geräte mit den ID's.


    Oder über shell/putty . Das ist aber nicht so leserlich weil alles in einer Zeile ausgedruckt wird.

    Code
    curl -X PUT http://10.1.1.166:51364/accessories


    Was ich schade finde ist, dass man nicht einfach mit

    serviceCharacteristics + description + value

    den Link bauen kann, weil das irgendwie im Code fest definiert ist.

    Vorteil wäre, man müsste dann nicht nach den aid iid suchen wenn man ein neues Gerät hinzufügen möchte.

    Natürlich darf es dann keine doppelten Namen geben


    Gefunden habe ich es durch deine Hilfe/Anregung unter folgenden Links


    https://github.com/homebridge/…06#issuecomment-387980947


    https://github.com/KhaosT/HAP-…c3b/lib/HAPServer.js#L700


    Jetzt muss ich das nur noch im Shelly zum Laufen bringen ;)


    Danke an die Beteiligten für die Unterstützung


    Viele Grüße

    PS: Sorry, dass ich vom Hauptthema in diesem Thread abgelenkt habe

    raspi4 8GB, Lumary (Tuya) RDGWW LED Panels, Shelly i3, i4, 2, 2.5 | Homebridge v 1.3.9 / v4.41.5

  • Oder über shell/putty . Das ist aber nicht so leserlich weil alles in einer Zeile ausgedruckt wird.
    Code
    curl -X PUT http://10.1.1.166:51364/accessories

    Dann setz noch ein | jq dahinter.


    curl -X PUT http://10.1.1.166:51364/accessories | jq

  • Guten Tag zusammen,


    ich habe in einem Fall einen etwas ungewöhnlichen Weg ausprobiert und hoffe ihr könnt mir hier einen Tipp geben, ob ich mich vielleicht einfach verrannt habe:


    Die Ausgangssituation war:

    Ein wirklich altes Samsung Galaxy Tab läuft bei mir seit Jahren mit Fotoo als digitaler Bilderrahmen und genau dafür ist eignet es sich noch immer perfekt.

    Da ich es nicht dauerhaft am Strom haben wollte, habe ich mir Tasker installiert und einen Tuya-Zwischenstecker per IFTTT über einen Webhook gesteuert.

    Wenn Akku 100 %, dann Webhook PowerFull; wenn Akku 15 %, dann Webhook PowerLow.


    So lief es wirklich lange, allerdings seit einiger Zeit nicht mehr, da wahrscheinlich das Tab in ein Alter gekommen ist, in dem seine SSL-Zertifikate nicht mehr ausreichend sind um bei IFTTT noch akzeptiert zu werden.


    Mein Lösungsansatz war nun:

    Switch "Bilder" in homebridge-http-webhooks angelegt mit den IFTTT-Webhooks für On und Off.

    In der Home App erscheint der Schalter und funktioniert auch einwandfrei, die Stromzufuhr für das Tablet wird an- oder ausgeschaltet, wenn ich den Schalter manuell betätige.


    Nun dachte ich mir "hey, schalte den Schalter in der homebridge doch über das Tab einfach mit dem http-request!" und ich habe den lokalen Link "http://192.168.0.105:51828/?accessoryId=Bilder&state=false" (bzw. true) hinterlegt.

    Das Tab erreicht 100 %, der Request wird ausgelöst, in der Home App sehe ich, wie der Schalter auf Off geschaltet wird und ..... nichts passiert, der IFTTT-Webhook wird nicht ausgeführt.


    Wo ist mein Denkfehler?

    Warum wird IFTTT nur bei manueller Schaltung angesprochen?


    Code
    [2/18/2022, 7:45:48 AM] [HttpWebHooks] Switch state for 'Bilder'...
    [2/18/2022, 7:45:49 AM] [HttpWebHooks] Request to 'https://maker.ifttt.com/trigger/PowerLow/json/with/key/{korrekterKey}' finished with status code '200' and body 'Congratulations! You've fired the PowerLow json event'. null
    ...
    [2/18/2022, 8:32:42 AM] [HttpWebHooks] Change HomeKit state for switch to 'false'.


    Vielen Dank für eure Tipps.


    LG Bronco

    Pi Zero W

    -> homebridge

    --> homebridge-http-webhooks

    --> homebridge-tuya

  • Bronco1986 wenn du per url den status des buttons änderst, dann wird nicht die on/off-url aufgerufen, da dies nur einen status in Homekit anpassen soll. Du könntest es aber wahrscheinlich mit einem zweiten button und eine automation bei statusänderung des ersten buttons lösen, denke ich.

  • Du könntest es aber wahrscheinlich mit einem zweiten button und eine automation bei statusänderung des ersten buttons lösen, denke ich.

    So eine Automation würde schon helfen, aber was nehme ich dafür? Bisher konnte ich kein passendes Plugin oder Funktion finden, die mir das ermöglicht.


    Ich habe es auch schon mit dem IoBroker probiert, den Verträgt mein Pi jedoch leider nicht. Als er endlich lief, war er instabil, einen neuen Pi wollte ich dafür jetzt aber auch nicht kaufen (wenn man überhaupt noch einen bekommt zurzeit).


    Im Grunde würde mir schon so ein kleines, lokales IFTTT genügen. "Wenn lokaler Webhook virtuellen Schalter schaltet, dann starte den nächsten Webhook."

    Pi Zero W

    -> homebridge

    --> homebridge-http-webhooks

    --> homebridge-tuya

  • Bronco1986 kannst du mit meinem Plugin machen. Du behälst einfach deinen Schalter A, der schon funzt. Nun einen zweiten Schalter B machen, bei dem du per Http nur den Status immer änderst. Als automation dann, Wenn B = an, dann schalte A ein, dann sollte der ifttt request getriggert werden. Den rest analog implementieren.

  • Benzman81 Die Automation also direkt in der Config, oder wie meinst du es mit "analog"?


    Pi Zero W

    -> homebridge

    --> homebridge-http-webhooks

    --> homebridge-tuya

  • Benzman81 ach so meinst du das, sorry.


    Da ist mein nächstes Problem, da ich keine Homekit-Steuerzentrale habe. Die Automation würde also nur klappen, wenn ich zuhause bin. Ich hatte gehofft da irgendwie herum zu kommen, da ich außer dem iPhone nichts von Apple besitze und nicht vor habe anzuschaffen.

    Pi Zero W

    -> homebridge

    --> homebridge-http-webhooks

    --> homebridge-tuya

  • Hi, nur eine kurze Frage bezüglich einem Sensor. Habe einen Motion Sensor eingerichtet, reagiert auch und wird auch ausgelöst durch Webhook. Nur stellt der sich nicht mehr zurück, habe alle Möglichkeiten mit Auto Release / Zeiten und ohne Auto Release ausprobiert. Einmal ausgelöst, bleibt er ausgelöst. VG CA