Hue API und Homebridge-hue

    • Hilfreich

    Da hier einige gefragt haben, wie man über die Hue API und dem Homebridge-hue Plugin weitere Funktionen nutzen kann, habe ich mir gedacht ich schreibe eine kleine Anleitung dafür:


    Zuerst braucht ihr allerdings ein paar Grundlegende API Verständnisse, die ich versuche hier ein wenig zu erklären.

    Grundlegende API Bedienung

    1. API Client

    Als erstes benötigt man einen API Client. Ich nutze für OS X den Insomnia.rest Client.

    Philips bietet zwar auf der Hue Bridge einen eigenen Client an, dieser ist jedoch bei größeren Abfragen umständlich.

    http://<bridge ip address>/debug/clip.html

    2. API Benutzer anlegen

    Dazu über den API Client eurer Wahl folgendes absetzten:

    Methode: POST

    URL: http://<bridge ip address>/api

    Body: {"devicetype":"my_app#mac tobi"}


    Es folgt die Aufforderung den Link Button auf der Hue Bridge zu drücken.


    Nachdem der Button gedrückt wurde, wird die Abfrage aus 2.1 erneut ausgeführt und ihr solltet nun einen Benutzernamen angezeigt bekommen:

    [{ "success": { "username": "XXXXXXXXXXXXXXXXXXXXXXXXXXX" }}]


    Nun müsst ihr den Username heraus kopieren und mit in die URL einbauen, damit ihr Authentifiziert seid und weitere Abfragen ausführen könnt:

    http://<bridge ip address>/api/XXXXXXXXXXXXXXXXXXXXXXXXXXX

    3. Abfragen

    Als Test fragen wir nun einfach alle Lampen mit folgendem Befehl ab:

    Methode: GET

    URL: http://<bridge ip address>/api/XXXXXXXXXXXXXXXXXXXXXXXXXXX/lights

    Body:


    Es sollten nun alle Lampen im JSON Format ausgegeben werden. Beispiel:


    Einzelne Lampen werden dann einfach mit der jeweiligen Nummer in der URL angesprochen:

    Methode: GET

    URL: http://<bridge ip address>/api/XXXXXXXXXXXXXXXXXXXXXXXXXXX/lights/1

    Body:


    Die gleichen GET Abfragen kann man für alle Ressourcen auf der Bridge ausführen:

    Sensoren : /sensors/

    Regeln: /rules/

    Gruppen: /groups/

    Szenen: /scenes/

    Zeitpläne: /schedules/

    4. Ändern

    Über die Anfragen kann man ebenso Ressourcen ändern.


    Beispiele:


    Einschalten einer Lampe:

    Methode: PUT

    URL: http://<bridge ip address>/api/XXXXXXXXXXXXXXXXXXXXXXXXXXX/lights/1/state

    Body: { "on": true }


    Ausschalten einer Lampe:

    Methode: PUT

    URL: http://<bridge ip address>/api/XXXXXXXXXXXXXXXXXXXXXXXXXXX/lights/1/state

    Body: { "on": false }


    Anpassen der Helligkeit auf 100%:

    Methode: PUT

    URL: http://<bridge ip address>/api/XXXXXXXXXXXXXXXXXXXXXXXXXXX/lights/1/state

    Body: { "on": true, "bri": 254 }


    Gruppe auf 100% Helligkeit in Blau einschalten:

    Methode: PUT

    URL: http://<bridge ip address>/api/XXXXXXXXXXXXXXXXXXXXXXXXXXX/groups/0/action

    Body: { "on":true, "bri": 254, "sat": 255, "hue": 46920 }


    Eine Liste mit den Parametern findet ihr hier: http://www.burgestrand.se/hue-api/


    Dies sollte euch nun ein bisschen ein Grundverständnis geben, um zu sehen, wie man über die API arbeitet.


    Weitere Hilfreiche Anleitungen für die API findet hier:

    https://developers.meethue.com/documentation/core-concepts

    http://www.burgestrand.se/hue-api/

    Hue API mit Homebridge-hue nutzen

    Kommen wir nun zu den Funktionen, die man über die Hue API in Kombination mit dem hue Plugin nutzen kann.


    Ich habe mir zum Beispiel in HomeKit einen virtuellen Switch über die Hue API angelegt, der über eine Regel alle Lampen für 10 Sekunden in der Farbe Rot blinken lässt. Dies hatte ich zuerst über das IFTTT Plugin realisiert, aber die Reaktionszeit war mir dort teilweise deutlich zu langsam.

    1. CLIPGenericFlag anlegen

    Zuerst muss man einen neuen Sensor anlegen:

    Methode: POST

    URL: http://<bridge ip address>/api/XXXXXXXXXXXXXXXXXXXXXXXXXXX/sensors

    Body:

    Code: Body
    {  
        "manufacturername": "homebridge-hue",  
        "modelid": "CLIPGenericFlag",  
        "name": "Alarm Sensor Flag",  
        "swversion": "1", 
        "type": "CLIPGenericFlag",  
        "uniqueid": "Alarm Sensor Flag"
    }

    Es folgt eine success Rückmeldung mit der entsprechenden Sensor Nummer /sensors/XX/. Diese Nummer merken!


    Diesen Sensor kombiniert man nun mit einer Regel, was der Sensor auslösen soll:

    Methode: POST

    URL: http://<bridge ip address>/api/XXXXXXXXXXXXXXXXXXXXXXXXXXX/rules

    Body:

    Achtung: Im Body die Sensor Nummer 2x anpassen!"address": "/sensors/XX/state"


    Diese Regel steuert den Sensor und stellt die Group0 (alle Lampen) auf Rot ("sat", "hue"), die Helligkeit auf 100% ("bri") und das Blinken für 10 Sekunden ("alert").


    Wer nur ein einmaliges Blinken haben möchte, muss "alert": "lselect" auf "alert": "select" ändern. Allerdings spielt hier die gleichzeitige Farbänderung mit rein.

    2. Homebridge-Hue Plugin config anpassen

    Um den Switch in HomeKit angezeigt zu bekommen muss man nun die Homebridge config.json anpassen.


    In der Hue Platform:

    Sensoren müssen aktiviert sein

    "sensors": true,


    Ebenso darf "CLIP" nicht als "excludeSensorTypes" gesetzt sein.

    Ich habe bei mir nur folgende Sensoren ausgeschlossen:

    "excludeSensorTypes": ["CLIPPresence", "CLIPGenericStatus", "Daylight", "Geofence"]


    Nach einem Neustart der Homebridge sollte nun in HomeKit ein Schalter mit dem Namen des zuvor angelegten CLIPGenericFlag erscheinen.


    Dies als kleines Beispiel, was mit der API und homebridge-hue zusätzlich möglich ist.

  • Da habe ich ja später wieder was zum Testen :thumbup:

  • @to0b

    Danke für diese gute Anleitung! Weißt du, ob man über die Hue API auch einen Sensor generieren kann, der den Zustand einer Leuchte (An/Aus, Farbe und Helligkeit) speichert, für eine gewisse Dauer den Zustand (Farbe und Helligkeit) wechseln und dann wieder auf die Ausgangseinstellung zurückstellt? Ich hätte so etwas gerne als optische Signalisierung bestimmter Ereignisse. Leider kann HomeKit das nicht nativ, man kann Regeln ja nur wieder deaktivieren, aber nur zum vorherigen Zustand zurückstellen.

  • Du könntest wie hier beschrieben Color Loop HUE

    einen CLIPGenericFlag mit den zwei Regeln anlegen. Dann bei der ersten Regel unter Actions den Body für die Gruppe so anpassen wie du es haben möchtest.


    Wenn du den Schalter in HK aktivierst tritt dann die Änderung ein und sobald du ihn wieder deaktivierst schaltet die Gruppe in den Zustand zurück wie sie vor der Aktivierung war. Den timer könntest du dann über eine HK Regel z.B. mit dem automation-Switches Plugin realisieren.

  • Dankeschön! Das klingt so einfach, dass ich es hinbekommen sollte. Muss ich unbedingt ausprobieren!


    Verstehe ich es richtig, dass durch das Ausschalten mit der zweiten Regel "automatisch" wieder der ursprüngliche Zustand hergestellt wird? Also, z. B. wenn die Lampe vorher ausgeschaltet war, geht sie auch dann, wenn ich den Schalter über einen DelaySwitch in HK wieder deaktiviere, wieder aus; falls sie vorher eine beliebige Helligkeit/Farbe hatte, geht sie wieder auf diese zurück? Mit der ersten Regel muss ich nur festlegen, wenn sie machen soll, wenn ich den Schalter in HK aktiviere?

  • Habe es gerade einmal nachgebaut. Der Ursprüngliche Zustand funktioniert wohl nur mit dem effect Flag.

    Bei einer normalen Anpassung über eine Regel speichert hue doch nicht den ursprünglichen Zustand. Dann müsstest du in der zweiten Regel für Off einen "Off Zustand" definieren.

    Aber hue kann nicht den vorherigen Zustand speichern.

  • to0b Danke für Deine Anleitung auf die ich jetzt erst gestoßen bin.

    Ich versuche mir das gerade nachzubauen. Ich benötige letztendlich nur eine Lampe die bei einem bestimmten Ergebnis blinkt.


    Gebe ich jetzt im Body statt einer Gruppe eine Lampe an, wie nachfolgend

    Code
    {
     "address": "/lights/39/state",
     "body": {"on": true,
     "bri": 254,
     "sat": 255,
     "hue": 65280,
     "alert": "lselect"},
     "method": "PUT"

    anstatt von:

    Code
    {
     "address": "/groups/0/action/",
     "body": {"on": true,
     "bri": 254,
     "sat": 255,
     "hue": 65280,
     "alert": "lselect"},
     "method": "PUT"

    bekomme ich folgenden Command Response:

    Verstehe ich da was falsch oder funktioniert das nur mit Gruppen?


  • Hi Krocko , danke, dass Du Dich meines Problems annimmst!

    Die komplette Regel ist die aus dem Beitrag weiter oben. Ich habe nur die rot eingefärbgten Bereiche geändert.



  • Habe den alten Sensor gelöscht, die Hue-Bridge neu gestartet und neu angefangen.

    Jetzt klappt es.

    Nur bleibt da Licht jetzt nach 15 Sekunden blinken an!

    Wie kann ich das automatisieren das das wieder ausgeht? Braucht es da einen zweiten Sensor für aus oder kann ich das in der Regel mit einbinden?


  • Nö, bleibt an!


  • Nimm mal folgende Regel:


    Wenn die Lampe vor dem Befehl aus war, ist sie danach auch wieder aus.

    Wenn sie an war, ist sie danach auch wieder an.


    "alert": "lselect" funktioniert meines Erachtens nicht mit Farben.

  • nö geht nicht mit Deiner Regel

    Code
    [
        {
            "error": {
                "type": 2,
                "address": "/rules",
                "description": "body contains invalid json"
            }
        }
    ]


  • Da fehlt ja auch die hälfte. :D

    Ist wohl beim Kopieren abhanden gekommen.


    Einmal editiert, zuletzt von Krocko ()

  • wenn ich "periodic":0, rausnehme bekomme ich keinen Fehler, Aber Lampe bleibt an!

    Macht das einen Unterschied ob Lightstrip oder Bulp?


  • Lightstrip dürfte "eigentlich" keinen Unterschied machen.
    Zur Not erstelle eine zweite Regel, die 20 Sekunden (oder was auch immer) nach dem der flag auf false gegangen ist, den Lightstrip ausschaltet.

  • Sooo, jetzt läuft es!! Für alle die es interessiert hier die Regel: