Nachdem ich bereits sehr lange das Philips Hue System einsetze, habe ich natürlich das System kontinuierlich erweitert. Als letztes Gadget kam jetzt der Motion Sensor dazu. Dieses kleine Teil macht im Prinzip genau das, was ich auch davon erwartet habe. Wird eine Bewegung erkannt, schaltet der Motion Sensor eine oder mehrere Lampen ein und wenn nach x Minuten eben keine Bewegung mehr erkannt wird, die entsprechenden Lampen auch wieder aus. Zusätzlich kann über die Hue App noch konfiguriert werden, welche Szene verwendet werden soll und ob der Sensor die Lampen z.B. nur Abends einschalten soll (Daylight Sensor).
Prinzipiell macht der Motion Sensor was der Hersteller verspricht. Ein normaler Bewegungssensor kann allerdings noch mehr. Zum Beispiel würde ich gern eine Aktion ausführen (Benachrichtigung versenden, anderes Gerät ebenfalls schalten etc.), wenn eine Bewegung erkannt wurde. Nach Rückfrage bei Philips ist dies leider nicht vorgesehen (steht aber wohl auf der Feature Liste). Da diese Aussage für mich jetzt nicht wirklich befriedigend war, habe ich mir mal die Möglichkeiten der API angeschaut und habe interessantes gefunden.
Über die API können wir nicht nur den Status des Motion Sensor, sondern auch den integrierten Temperatursensor (ja, da ist auch ein solcher Sensor drin) abfragen. Für alle die das Zubehör selbst überwachen wollen, bekommen wir natürlich über die API auch den Batteriestatus von allen verbundenen Geräten (z.B. dem Dimmer Switch), was ab und zu ganz hilfreich sein kann. Der einzige Nachteil an dieser Stelle ist, dass wir das aktiv über ein Skript machen müssen. Der Sensor selbst verhält sich hierbei komplett passiv. Wer aber einen Windows oder Linux Rechner im Netzwerk hat, kann über einen Task diese Informationen auslesen und entsprechend reagieren.
Wie kommen wir nun an diese Informationen?
Den Verbindungsaufbau zur Hue Bridge habe ich in meinem Artikel “Z-Way Gateway und Philips Hue” bereits beschrieben. Das Auflisten der Sensoren erfolgt über den folgenden API Aufruf in einem Browser:
http://<IP-Adresse der Bridge>/api/<API-Benutzer>/sensors/
Hier werden uns alle vorhandenen Sensoren angezeigt, auch die, die unter anderem von der mobilen App angelegten Routinen (Geo-Fencing, Aufwachen etc.). Uns interessieren hier aber nur die Sensoren vom Typ ZLLPresence und der Modell ID SML001. In der Antwort der API sieht das wie folgt aus:
"11": {
"state": {
"presence": false,
"lastupdated": "2017-08-04T10:06:36"
},
"config": {
"on": true,
"battery": 100,
"reachable": true,
"alert": "lselect",
"ledindication": false,
"usertest": false,
"sensitivity": 2,
"sensitivitymax": 2,
"pending": []
},
"name": "Büro Sensor",
"type": "ZLLPresence",
"modelid": "SML001",
"manufacturername": "Philips",
"swversion": "6.1.0.18912",
"uniqueid": "xxx"
}
In meinem Fall finde ich den Motion Sensor unter der ID 11 auf meiner Bridge. Mit dem Aufruf der folgenden API Abfrage bekomme ich nur diesen Sensor angezeigt:
http://<IP-Adresse der Bridge>/api/<API-Benutzer>/sensors/11/
Um jetzt das ganze zu automatisieren, benötige ich ein Skript welches z.B. alle 60 Sekunden den Sensor 11 abfragt und eine definierte Aktion ausführt (E-Mail senden, anderes Skript ausführen) wenn sich der Wert presence von false auf true ändert. Nachfolgend ein simples Beispiel mit einem Linux Bash Skript:
#!/bin/bash
MOTION=$(curl -s –request GET http://<IP-Adresse-der-Bridge>/api/<API-User>/sensors/11/)
if [ "${MOTION:21:4}" = "true" ]; then
echo “Bewegung erkannt.”
else
echo “Keine Bewegung erkannt.”
fi
Innerhalb der If – Then Schleife könnten wir zum Beispiel über einen Webhook bei IFTTT weitere Aktionen auslösen. Hier ist viel Raum zum Experimentieren.
Den Temperatursensor finde ich bei mir mit der ID 10. Die Temperatur wird dabei mit zwei Kommastellen ohne das Komma angegeben. Die Ausgabe “2674” bedeutet also 26,74 °C. Hier mal beispielhaft die Ausgabe der API:
{
"state": {
"temperature": 2674,
"lastupdated": "2017-08-04T12:13:04"
},
"config": {
"on": true,
"battery": 100,
"reachable": true,
"alert": "none",
"ledindication": false,
"usertest": false,
"pending": []
},
"name": "Hue temperature sensor 1",
"type": "ZLLTemperature",
"modelid": "SML001",
"manufacturername": "Philips",
"swversion": "6.1.0.18912",
"uniqueid": "xxx"
}
Hier können wir mit dem folgenden Bash Skript die Temperatur des Sensors abfragen und ausgeben:
#!/bin/bash
TEMPERATUR=$(curl -s –request GET http://<IP-Adresse-der-Bridge>/api/<API-User>/sensors/10/)
echo ${TEMPERATURE:24:4}
Wer sich meinen anderen Artikel anschaut, wird sicherlich das ganze auch schnell in Powershell umsetzen können. Prinzipiell handelt es sich ja nur um einfache RestAPI / JSON Abfragen, die mit jeder Sprache erzeugt werden können. Beispiele können in meinem GitHub Account gefunden werden.
Viel Spaß beim Experimentieren.
Hallo Thomas,
ich habe lange gesucht und dann auf deiner Seite die Lösung gefunden. “ Z-Way Gateway und Phillips Hue“ Du hast es hier sehr gut erklärt wie man die Einbindung im Zwave.me Webinterface macht. Jetzt habe ich deinen Artikel „Philips Hue über die API erweitern“ gelesen und wollte nun auch diese Möglichkeit meinen Hue Bewegungsmelder in mein Zwave.me Server einbinden. Ich habe hier das bash script angelegt und die Freigaben etc. gemacht. Nun habe ich im Webinterface von Zwave.me wieder ein Code decive angelegt, diesmal nicht mir switchbinary sondern mit sensorbinary. Nun geht diese Möglichkeit nicht z.b. mit der Zway app If -> Then » Bewegung AN than z.b. Rolladen hoch.
Könntest du den Schritt mit der Einbindung des Hue Bewegungsmelder im Zway.me Server erklären ?
Vielen Dank und mach weiter so. Deine Seite hat mir beim Start meiner Home Automation sehr geholfen.
Grüße
Andy
Hallo Andy, leider bin ich von Z-Wave bei mir auf ZigBee umgestiegen, weshalb ich leider das Problem nicht nachstellen kann. Da es sich aber um eine reine API Abfrage handelt, die dann entweder True oder False zurückgibt, bin ich mir nicht sicher ob ein sensorbinary das richtige ist. Wenn ich nochmal Zugriff auf einen Z-Way Server habe, versuche ich das mal. Zur Zeit kann ich Dir leider nicht helfen.
Gruß
Thomas
Hallo Thomas,
danke für die schnelle Antwort. Schade, dass du umgestiegen bist ☹. Es gibt wirlich sehr wenige Beispielskripts für den Zwave.me Server. Gerade für Leute die sich mit dem Thema erst befassen.
Es war ja in dem ersten Beitrag „ Z-Way Gateway und Phillips Hue“ so das man 3 Skripte anlegen musste.
• light1Off.sh
• light1On.sh
• light1Check.sh
Dann im Zway.me Server mit der App Code Device jeweils die Skripte für On, Off und Get Value zuweisen.
Aktuell dachte ich mir in meinem Non Pro Wissen, dass wenn ich jetzt mit der App Code Device keinen Binary switch erstelle, sondern einen Binary Sensor und als „Code to get value“ das Skript von Dir nutze
————————————————————————————————————————————–
#!/bin/bash
MOTION=$(curl -s –request GET http:///api//sensors/11/)
if [ „${MOTION:21:4}“ = „true“ ]; then
echo on
else
echo off
fi
————————————————————————————————————————————–
Sollte es eigentlich funktionieren. Wenn du vielleicht noch eine Idee hast würde ich mich sehr freuen. Aktuell komme ich nicht weiter.
Grüße
Andy
Hallo Thomas,
vielen Dank für die sehr ausführlichen Darstellungen zur Hue API.
Ich konnte viele Funktionen gut nachstellen.
Leider hat Philips für die Bridge bis heute keine Datensicherungs-Funktion, so dass man bei Ausfall der Bridge (2) alles neu eingeben muss.
Nun meine Idee:
Über die Api kann man ja den gesamten Inhalt auslesen.
Ist es möglich diesen Inhalt wieder über PUT zurückzuschreiben und wäre das für eine Wiederherstellung der Bridge-Konfiguration ausreichend ?
Vielen Dank im voraus.
Franz