Anwesenheitserkennung mit homeean presence

Ich benutze einen Raspberry und die Abfrage der WLAN Status über die MAC Adresse in der Fritzbox und Webhooks in homee. Weiterhin wird durch Erkennung einer bekannten Person der Netamo Innenkamera der Status Zuhause gesetzt. Wenn keine bekannten wlan Teilnehmer aktiv sind wird Status Abwesenheit gesetzt. Ich bin damit zufrieden.

Wenn die homees irgendwas mit Anwesenheitserkennung/-verwaltung integrieren, kann ich mir nur vorstellen, dass es ähnlich funktioniert, wie die Lösung über die RasPi, die über den WLAN-Status mit MAC-Adresse funktioniert und damit den Status der homee-Benutzer setzt. Alle anderen Erkennungsmöglichkeiten (PIN-Codes, RFID-Tags, Geofencing, Netatmo-Kameras, usw.) würden wegen der Vielfalt der verwendeten Systeme und Kombinationen einen immensen Programmieraufwand bedeuten.
Auf diese Weise könnte man in HGs auch individuell Pläne oder HGs aktivieren, abspielen, deaktivieren, stoppen, wenn einer das Haus verläßt, aber die anderen noch da bleiben (z.B. im Kinderzimmer oder Arbeitszimmer bei Abwesenheit der betreffenden Person(en) die Heizung runterfahren).
Vor allem wäre es eine Lösung, die ohne die Anschaffung von zusätzlicher Hardware einen Mehrwert bedeuten würde.

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.

8 „Gefällt mir“

Hallo zusammen,

vielen Dank für das Skript. Leider wird bei mir der G-Tag nicht gefunden. Gibt es dafür eine Patentlösung?

Ich habe gerade die neue Version von homeean presence auf GitHub und NPM veröffentlicht. Gleichzeitig ist die Seite https://homeean.de/presence nun auch wieder verfügbar.

Bitte die geänderten Installationsvoraussetzungen beachten. Bei bestehenden Installationen muss auch die Konfiguration abgeändert werden.

Die wichtigsten Änderungen in Kürze

  • Das Tracking im Netwerk nutzt jetzt die ARP Tabellen zum Test der Präsenz von Netzwerkgeräten
  • Die Bibliothek zur Erkennung von BLE Geräten wurde ausgetauscht und funktioniert nun nicht mehr über UUIDs sondern über die Mac-Adressen der Tracker. Die MAC Adresse muss dabei mit Großbuchstaben in der Konfiguration angegeben werden. Ansonsten wird diese als ungültig abgelehnt.
  • Die Erkennung von iPhones (oder anderen iOS Geräten sowie einigen neueren Android Geräten) erfordern einen hohen threshold. An den optimalen Wert muss man sich ein wenig rantasten. Ich bin mit einem Wert zwischen 450 und 600 Sekunden gut gefahren. Sind solche Geräte nicht im Haus oder kommen nur BLE-Devices zum Einsatz kann der Threshold deutlich reduziert werden. Das führt dazu, dass die Abwesenheit früher erkannt wird.
12 „Gefällt mir“

Vielen Dank für das Update.

Meine G-Tag’s funktionieren nun tadeslos. Ebenso die personenbezogene Anwesenheit. Das eröffnet ganz neue Möglichkeiten.

1 „Gefällt mir“

Läuft bei mir jetzt auch rund. Vielen Dank @stfnhmplr
Viele Grüße
Daniel

2 „Gefällt mir“

Ich bekomme es nicht ans laufen :frowning:
Folgende Meldung erhalte ich:

2019-1-20 13:24:49 [INFO]  homeean-presence: homeean-presence
2019-1-20 13:24:49 [INFO]  homeean-presence: 2018 by stfnhmplr | homeean.de
2019-1-20 13:24:49 [INFO]  homeean-presence: running on node v8.9.4
2019-1-20 13:24:49 [INFO]  homeean-presence: load config from /home/pi/.homeean-presence/config.json
2019-1-20 13:24:49 [INFO]  homeean-presence: Christoph registered as person
2019-1-20 13:24:49 [INFO]  homeean-presence: setting up webhook http://192.168.178.12:3000/homeean-presence/christoph
events.js:183
  throw er; // Unhandled 'error' event
  ^

Error: listen EADDRINUSE :::3000
at Object._errnoException (util.js:1022:11)
at _exceptionWithHostPort (util.js:1044:20)
at Server.setupListenHandle [as _listen2] (net.js:1351:14)
at listenInCluster (net.js:1392:12)
at Server.listen (net.js:1476:7)
at Function.listen (/usr/lib/node_modules/homeean-presence/node_modules/express/lib/application.js:618:24)
at HomeeanPresence.run (/usr/lib/node_modules/homeean-presence/dist/server.js:108:25)
at Object.<anonymous> (/usr/lib/node_modules/homeean-presence/dist/server.js:245:17)
at Module._compile (module.js:643:30)
at Object.Module._extensions..js (module.js:654:10)

So wie ich es sehe läuft auf dem Port 3000 schon eine Anwendung. Hast du den Pi schon mal neu gestartet, ggf. hast du zwei Instanzen am laufen. Wenn es nach dem reboot nicht geht, ändere den Port in der config.json

VG Sven

1 „Gefällt mir“

Ich habe den Port drei mal geändert und es nicht ans laufen bekommen.
Offensichtlich hab ich immer einen besetzten Port erwischt. Jetzt läuft es.
Dann bin ich mal gespannt.

Wenn du in der Fehlermeldung diesen Eintrag hattest, dann war es in der Tat ein Port der von einer anderen Anwendung genutzt wird. Schön wenn sich doch noch ein ungenutzter Port gefunden hat.

In der Nacht ist der Status mehrmals auf Abwesend gesprungen und wieder zurück.

Hilft es den treshold hochzusetzen? Was habt ihr so eingestellt? Steht momentan auf den Standard 300 Sekunden.

Steht ein wenig weiter oben… aktuell steht der Wert bei mir auf 600, damit hatte ich seit mehreren Tagen keinen einzigen Fehlalarm.

Ich hab ihn bei mir auf 450 Sekunden stehen, damit hatte ich bisher keine Falscherkennung. Das Intervall habe ich auf 20 Sekunden stehen.

1 „Gefällt mir“

Alles klar. Dann passe ich das heute Abend an. Werde berichten.

PS: mittlerweile läuft wieder Port 3000.
Wenn ich direkt nach der Änderung den Prozess neustarte, ist der Port wohl noch belegt. Ich muss ein paar Minuten warten bis der Port wieder frei ist. Normal?
Deshalb ging es beim ersten mal wohl nicht, obwohl der Prozess nur einmal lief.

treshold auf 450sec.
Habe um 18 Uhr umgestellt. Seitdem keine Fehlauslösung. Sehr schöne Kurve…

Solltemperatur

Isttemperatur

1 „Gefällt mir“

Hallo zusammen,

ich bin echt begeistert vom Skript, nur leider funktioniert es bei mir nicht so richtig. Die An/Abwesenheit wird glaube ich nicht richtig erkannt. In den LOGs steht, dass “P…” nie gesehen wurde obwohl das iPhone seit gestern Abend wieder im WLAN ist. Es sind nur ApplePhones im Einsatz.

Anbei einmal die LOG Meldungen sowie meine Config. Bin kein Spezialist, aber hätte jemand eine Idee woran es liegen könnte?

Danke und beste Grüße,

Max

KEY = ersetzt Webhook-Code

   {
    "interval": 10,
    "threshold": 600,
    "port": 3030,
    "webhooks": {
        "absent": "http://192.168.178.34:7681/api/v2/webhook_trigger?webhooks_key=**KEY**&event=Abwesend",
        "present": "http://192.168.178.34:7681/api/v2/webhook_trigger?webhooks_key=**KEY**&event=Anwesend"
    },
    "persons": [
        {
            "name": "M",
            "ip": "192.168.178.37"
        },
        {
            "name": "C",
            "ip": "192.168.178.122"
        },
        {
             "name": "A",
             "ip": "192.168.178.54"
        },
        {
             "name": "E",
             "ip": "192.168.178.53"
        },
        {
            "name": "P",
            "ip": "192.168.178.59"
        }
    ]
}

Da das Intervall mit 10 Sekunde sehr kurz ist und es die letzte Person ist, die nicht erkannt wird: Versuch doch mal das Intervall auf 20 oder mehr Sekunden zu setzen. Vielleicht liegt es daran.

1 „Gefällt mir“

Danke für deine Hilfe, aber es hat leider nicht funktioniert. Ich habe es trotzdem mal hochgesetzt. Wenn ich in den DEBUG Mode gehe sagt er mir EADDR in use: 3000. Der Port ist aber nicht belegt…

Das ist aber jetzt etwas anderes. Der Port ist schon belegt, dadurch läut homeean presence mit der Aktualisierung gar nicht. Starte den Raspberry Pi mal neu, dann greift auch die Änderung des Intervalls.

2 „Gefällt mir“