Hi zusammen,
nach Jahren der Bastelei mit Probieren verschiedener Settings und durch großartige Inspirationen hier in der Community wollte ich nach letztem Feintuning meine Anwesenheitssteuerung für homee präsentieren.
Ich weiß, dass DIY nicht alle hier anspricht und manche lieber Plug & Play möchten… für Interessierte will ich mein Vorgehen im Detail hier darlegen.
Zum Thema selber:
Geofencing ist schon lange ein Thema und gerade im Smart Home macht das Sinn. homee hat vor knapp zwei Jahren die Status-Setzung eingeführt. Nur macht diese nicht so wirklich viel Sinn, wenn man den jeweiligen Status manuell setzen muss, um nachgeschaltete Aktion automatisch auszulösen. Um die automatische Statussetzung geht es also hier.
Meine jetzige Lösung hat eine Zuverlässigkeit von ca. 99,9 % und ist auf mehrere Benutzer/ Familienmitglieder gleichzeitig anwendbar.
Voraussetzungen:
a) Geofency App (iOS) oder EgiGeoZone App (Android) → ich beziehe mich hier nur auf die iOS Variante
b) ein oder mehrer Beacons (hier: Minew C3 USB << Klick >>
c) Fritzbox (günstig für VPN-on-demand, lokales PHP-Script kann von außen erreicht werden)
d) Raspberry Pi für NodeRed, PHP-Server und ggf. Enocean Simulation (dazu später mehr), Basiskenntnisse notwendig
Vorüberlegungen:
Zuerst muss man sich überlegen, wie das eigene Geofencing genau funktionieren soll.
Bei mir verbindet sich mein iPhone, sobald es in Reichweite kommt, mit den zu Hause installierten und in der Geofency App verknüpften Beacons (ich habe zwei, jeweils eingesteckt in einem Oomi Plug in der Garage und nahe der Haustür). Dadurch wird der Anwesenheitsstatus gesetzt.
Beim Verlassen der Hauses läuft das Ganze über die GPS-Lokalisation in der Geofency App (100m Radius wird überschritten). Dann wird der Status auf Abwesenheit gesetzt.
In beiden Fällen ruft die Geofency App ein lokales PHP-Script auf, welches jeweils einen Webhook an homee sendet. Mittels Homegrammen macht man dann weiter.
Ich bin noch einen Schritt weiter gegangen und erzeuge mittels NodeRed und Enocean Simulation virtuelle Präsenzmelder in homee, die so den aktuellen Status der einzelnen Familienmitgliedern in homee oder HomeKit anzeigen. Über die Gruppenbedingung in Homegrammen kann so auch die übergeordnete Statussetzung in homee erfolgen.
Fotos
Zunächst ein paar Fotos für den ersten Eindruck:
Querverweise/ Literatur/ Vorarbeiten:
Vorgehen:
a) Geofency App
Den USB-Beacon mittels Netzteil oder wie in meinem Fall in einem Oomi-Plug mit Strom versorgen. Mittels der App BeaconSet passt man ggf. die UUID und die Sendestärke des Beacons an (Rest ist egal). Mittels der UUID kann man dann den Beacon als Überwachungspunkt in der Geofency App konfigurieren.
Entsprechend der Anzahl der Beacons (bei mir 2 Stück) legt man dann die Überwachungspunkte an. Genauso verfährt man mit dem Abwesend-Status (hier eben anstatt Beacon über „aktuelle Position“).
Anschließend definiert man jeweils in den Einstellungen die Webhooks in der Form von PHP-Aufrufen, auf GET setzen, User und PW eintragen:
Bsp: http://diskstation.fritz.box/geofency/michael_home.php
<?php header("Location:https://DEINEHOMEEID.hom.ee/api/v2/webhook_trigger?webhooks_key=DEINWEBHOOKKEY&event=Michael_home"); exit; ?>
Für jedes Familienmitglied braucht man dann ein home.php und ein away.php Script anhand des Beispiels. Dieses muss auf einen lokalen Server gepackt werden. Extern und frei im Internet empfiehlt sich aufgrund der sensiblen Daten (homee ID und webhook key definitiv nicht.
b) Raspberry Pi, alternativer PHP-Server
Die angelegten php-Skripte müsst ihr dann noch auf einen Server packen. Das geht mit dem Raps (braucht ihr sowieso wegen NodeRed) oder mit anderen. Ich habe alternativ meine Diskstation verwendet, da hier schon PHP installiert und auch ein Apache-Server lief. Die Skripte habe ich einfach in einen Share gepackt. Ihr müsst eigentlich nur drauf achten, dass die Berechtigungen stimmen und ihr die Benutzerdaten (user/pw) habt.
Liegen die php-Skripte bereit, könnt ihr alles in der Geofency App fertig machen und gleich testen. Der Webhook sollte für den Homestatus bei Betreten und für den Away Status bei Verlassen aktiviert werden.
Habt ihr alles richtig gemacht, bekommt ihr im eigenen WLAN eine „OK“ Meldung.
c) Fritzbox, VPN-on-demand
Damit ihr auch von außen, aus dem Mobilfunknetz die lokalen php-Skripte erreichen könnt, braucht ihr eine VPN-Verbindung, am besten on-demand. Mit der Fritzbox und iOS funktioniert das perfekt. Die Einrichtung ist wirklich relativ einfach. Dank @fisch habe ich es mit folgender Anleitung schnell hinbekommen:
Alternativ kann man die Skripte natürlich auf einem Webspace ablegen. Man sollte aber absolut auf die Absicherung achten, damit eure Daten nicht frei im Internet stehen.
d) Webhooks von Geofency und die Weiterverarbeitung
Die von Geofency an homee gesendeten Webhooks nutzt man für Homegramme, um z.B. direkt die Statussetzung vorzunehmen.
In meinem Fall sende ich jeweils einen weiteren Webhooks an NodeRed weiter um dort ein virtuelles Gerät zu steuern:
Auslöser ist der Webhook von Geofency, den ich im php-Skript konfiguriert habe. Bedingung ist der Staus meines virtuellen Präsenzmelders (der Webhook soll nicht mehrfach, wenn ich mich zu Hause bewege neu abgesetzt werden). Und die Aktion sendet einen neuen Webhook an NodeRed.
e) virtuelle Präsenzmelder in NodeRed mittels Enocean Simulation
In Anlehnung an die oben angeführten Threads habe ich in NodeRed virtuelle Präsenzmelder erzeugt, die in homee dann als Geräte auftauchen. Gesteuert werden diese durch die weitergeleiteten Webhooks (Geofency → homee).
Flow in NodeRed lautet folgendermaßen:
[{"id":"f9ff3918.a1ea58","type":"change","z":"2cc975df.7f8f7a","name":"","rules":[{"t":"move","p":"payload.On","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":2500,"wires":[["3362a2cd.b6086e"]]},{"id":"3362a2cd.b6086e","type":"change","z":"2cc975df.7f8f7a","name":"","rules":[{"t":"change","p":"payload","pt":"msg","from":"true","fromt":"bool","to":"{\"meta\":{\"eep\":\"a5-07-01\",\"channel\":6,\"type\":\"data\"},\"data\":{\"PIRS\":250}}","tot":"json"},{"t":"change","p":"payload","pt":"msg","from":"false","fromt":"bool","to":"{\"meta\":{\"eep\":\"a5-07-01\",\"channel\":6,\"type\":\"data\"},\"data\":{\"PIRS\":0}}","tot":"json"}],"action":"","property":"","from":"","to":"","reg":false,"x":620,"y":2500,"wires":[["294ea16b.879a0e"]]},{"id":"20aaf3c6.0371cc","type":"enocean-out","z":"2cc975df.7f8f7a","serialport":"36056171.b343b6","name":"","logOutput":false,"x":970,"y":2500,"wires":[[]]},{"id":"294ea16b.879a0e","type":"msg-resend","z":"2cc975df.7f8f7a","interval":"2","intervalUnit":"hours","maximum":"0","bytopic":false,"clone":false,"firstDelayed":false,"addCounters":false,"highRate":true,"outputCountField":"","outputMaxField":"","name":"","x":810,"y":2500,"wires":[["20aaf3c6.0371cc"]]},{"id":"610fdead.4ab978","type":"inject","z":"2cc975df.7f8f7a","name":"Präsenzmelder CH6","topic":"","payload":"{\"meta\":{\"eep\":\"a5-07-01\",\"channel\":6,\"type\":\"teach-in\"},\"teach-in\":{\"type\":\"4BS\"},\"data\":{\"LRN\":1}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":130,"y":2440,"wires":[["f87738b.87feac8"]]},{"id":"f87738b.87feac8","type":"enocean-out","z":"2cc975df.7f8f7a","serialport":"36056171.b343b6","name":"","logOutput":true,"x":350,"y":2440,"wires":[[]]},{"id":"e8f84b59.c66ee","type":"http in","z":"2cc975df.7f8f7a","name":"Michael @Home","url":"michael_anwesend","method":"post","upload":false,"swaggerDoc":"","x":120,"y":2500,"wires":[["f9ff3918.a1ea58"]]},{"id":"361be23e.2081d6","type":"http in","z":"2cc975df.7f8f7a","name":"Michael Away","url":"michael_abwesend","method":"post","upload":false,"swaggerDoc":"","x":110,"y":2540,"wires":[["f9ff3918.a1ea58"]]},{"id":"36056171.b343b6","type":"enocean-config-node","z":"","serialport":"/dev/ttyUSB0"}]
Die virtuellen Präsenzmelder lassen sich auch in HomeKit nutzen.
f) Integration in die homee Statusmeldungen
Die Integration zur Steuerung der homee Statussetzung ist durch einfache Homeegramme unter Benutzung der Gruppenfunktion möglich.
Anwesenheit: Wenn einer aus der Gruppe Familie den Status Anwesenheit zeigt.
Abwesenheit: Wenn alle aus der Gruppe Familie den Status Abwesenheit zeigen.
Danksagung:
An dieser Stelle möchte ich, stellvertretend für die ganze Community, dreien der „alten Hasen“ @micha, @fisch, @Sven meinen besonderen Dank aussprechen für die Unterstützung, Ideen und Hilfe bei der Umsetzung solcher Projekte.
Fragen, Anregungen, Hinweise:
Sind gerne willkommen!
Viel Spaß beim Selbermachen!
VG
Michael