Da mich in der Zwischenzeit einige Anfragen zur Einrichtung und Betrieb erreicht haben, die Seite aber aktuell nicht online ist, stelle ich hier den Auszug mal rein.
Hinweis iPhones werden aktuell durch den Deep Sleep nicht zuverlässig erkannt. Wann und ob ein Update kommt, kann ich aktuell nicht sagen.
Installation
homeean presence lässt sich auf verschiedenen Geräten installieren. Auf einem Raspberry Pi 3 ist die Installation Dank eines Buildscriptes von homeean besonders einfach. Wähle bei den Paketen einfach homeean presence aus, stimmte den Bedingungen zu und erzeuge Dein individuelles Buildscript.
Möchtest Du homeean presence lieber selbst installieren, musst Du folgende Schritte ausführen:
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
sudo setcap cap_net_raw+eip $(eval readlink -f `which node`)
sudo npm install -g homeean-presence --unsafe-perm
Zur Sicherheit kannst Du mit dem Befehl sudo hciconfig kurz überprüfen, ob Dein Bluetooth Modul aktiv ist
Damit homeean presence weiß, welche Personen für die Anwesenheit relevant sind, muss jetzt eine Konfigurationsdatei angelegt werden.
Konfiguration
Bei der Installation über homeean wird die Konfigurationsdatei bereits automatisch erstellt. Bei der manuellen Installation muss die Datei unter dem Pfad ~/.homeean-presence/config.json nach dem folgenden Beispiel neu erzeugt werden.
{
"interval": 20,
"threshold": 180,
"port": 3000,
"webhooks": {
"absent": "https://url-for-absence",
"present": "https://url-for-presence"
},
"persons": [
{
"name": "firstname",
"uuid": "E2C56DB5-DCHG-48D2-B060-D0A5B91096EB",
"ip": "192.168.1.1"
}
]
}
interval:
Intervall in Sekunden, in welchem die Personen gesucht werden
threshold:
Zeit in Sekunden, in denen keine Statusänderung vorgenommen wird. Dadurch werden Fehlerkennungen reduziert.
port:
Der Port, unter dem die Webhooks erreichbar sein sollen
webhooks:
Hier lassen sich unter absent und present Webhooks (z.B. homee Webhooks aus Homeegrammen) definieren, die nach Statuswechsel getriggert werden. (Absent: Keine Person ist Zuhause, Present: Mindestens eine Person ist anwesend). Das funktioniert über folgendes URL Schema auch mit lokalen Webhooks direkt an den homee, ohne Umwege über den Proxy http://[ip-des-homee]:7681/api/v2/webhook_trigger?webhooks_key=[WEBHOOKKEY]&event=[HOMEE-EVENT-NAME]
persons:
Hier werden die Personen definiert. Vergib einen eindeutigen Namen. Anschließend kannst Du die IP-Adresse (z.B. eines Smartphones) und die UUID eines BLE-Gerätes (Smartphone, iBeacon) eintragen.
Start der Anwesenheitserkennung
Bei der Verwendung von homeean ist bereits ein Autostart von homeean-presence eingerichtet. Nach dem ändern der Konfiguration muss der Service mit sudo systemctl restart homeean-presence neu gestartet werden.
Bei der manuellen Installation kannst Du homeean-presence mit dem Befehl homeean-presence starten. Willst Du sehen, was im Hintergrund passiert, starte die Anwendung mit DEBUG=homeean-presence homeean-presence im Debug-Modus
Funktionsweise
homeean-presence prüft im angegeben Intervall, welche Personen Zuhause sind. Wird eines der definierten Geräte erkannt, gilt die Person nach Ablauf der definierten Schwelle (threshold) als anwesend. Wird kein Gerät erkannt, gilt die Person als abwesend.
Nach jeder Statusänderung einer einzelnen Person wird außerdem überprüft, wie der Gesamtstatus des Haushalts ist. Ist mindestens eine Person anwesend, wird der Webhook Present ausgelöst. Ist keine Person anwesend, wird der Webhook Absent ausgelöst.
Eingehende Webhooks
homeean presence stellt neben der Automatischen Anwesenheitserkennung auch eingehende Webhooks bereit. Unter http://[ip-des-raspberry]:[port]/homeean-presence/[name] also z.B. http://192.168.178.1:3000/homeean-presence/manni kann ein Post-Request mit folgendem JSON-Body empfangen werden.
{
"state": true,
"duration": 30
}
Der state kann true oder false (Anwesend/Abwesend) sein. Die duration ist optional. Dieser Wert definiert, wieviele Sekunden der gesetzte Status gelten soll. Damit wird die übrige Erkennung für den gewählten Zeitraum deaktiviert. Der Standard ist 30 Sekunden.