Best Practice - Anwesenheit

Begonnen von hoschi, 08 Oktober 2018, 20:30:56

Vorheriges Thema - Nächstes Thema

hoschi

Hallo zusammen,

als blutiger FHEM- und Automationsanfänger bin ich dank der guten Beiträge im Forum und Wiki recht zügig vorangekommen, suche aber noch Hinweise bzgl. "best practices" zu meinem aktuellen Projekt.

Vielleicht kurz eine Frage vorab.
Der Unterschied zwischen SET und NOTIFY scheint mir noch nicht ganz klar, bzw. welches ich wann einsetze.
Mit SET kann ich z.B. Lampe1 direkt auf einen Status schalten, mit NOTIFY könnte ich dies aber auch erreichen und soweit ich das sehe kann ich hier EVENT übergeben, sprich z.B. on/off oder 1/0, wobei ich mit SET (soweit es mir ersichtlich ist) immer nur einen Status (on oder off) übergeben kann. Dazu kommt dann auch noch DOIF, welches scheinbar mit beidem verknüpfbar ist. Mit DOIFs kann ich abhängig von ein oder mehreren Parametern einen Schaltvorgang ausführen oder eben auch nicht.
Wann ist SET einem NOTIFY vorzuziehen und vice versa?

Nun zum eigentlichen Projekt
Steuerung von Geräten abhängig von Anwesenheit. Hier bin ich jetzt soweit vorangekommen, das ich mit der iPhone App Geofency meinen Anwesenheitsstatus (über die App simuliert) auf "home" oder "underway" setzen kann. Das Twilight Modul kommt hier ebenfalls zum Einsatz, so das ich mit einem DOIF die Lampen im Eingangsbereich einschalte, wenn ich ANWESEND (home) bin UND die Dämmerung einen bestimmten Wert überschritten hat, ELSE Licht aus.
Mit manuell gesetzten Werten aus Twilight und über Simulation in der App scheint das ziemlich gut zu funktionieren. Soweit so gut.

Die Entscheidung für FHEM ist gefallen, weil ich weitestgehend ab von proprietärem Krams der Hersteller und auf jeden Fall ohne diverse "Clouds" ausserhalb meines Einflussbereichs auskommen möchte, ohne mein internes Netz über Gebühr nach aussen zu öffnen.

Geofence
Hier kommt Geofency ins Spiel. Ohne öffnen eines Ports nach aussen oder ohne permanente VPN Verbindung (die im standby des iPhone 5S beendet wird), kann Geofency den Status natürlich nicht übermitteln, da ich den WLAN Einzugsbereich bei Ankuft noch nicht erreicht hab, bzw. beim Verlassen das WLAN schon verlassen habe. Somit habe ich nach einer praktikablen Alternative gesucht und bin auf Bluetooth gestossen.

Bluetooth
Der Raspi 3B+ hat Bluetooth von Hause aus an Board. Bei dem beschriebenen Verfahren mit "sudo hcitool lescan" taucht mein iPhone jedoch nicht auf, womit ich davon ausgehen muss, dass diese Methode nicht für mich funktioniert. Bei meiner weiteren Recherche bin ich auf folgendes gestossen.
Zitat$ sudo bluetoothctl
[bluetooth]# agent on
[bluetooth]# default-agent
[bluetooth]# scan on
Hier taucht mein iPhone 5s auf, die Verbindung scheint somit grundsätzlich möglich.
Da ich auch des Öfteren mit dem Motorrad unterwegs bin, möchte ich Abstand von zusätzlichen BT dongles am Schlüsselbund nehmen.

Kann hier wer Tips geben, wie ich das iPhone dennoch per Bluetooth überwachen kann, wenn dieser "lescan" kein Ergebnis bringt ?

WLAN
Ich bin über codeschnipsel gestolpert, welche einen Airport nach DHCP leases abfragen. Dies schien mir praktikabel genug.
Bei mir läuft eine Kombination aus Draytek Accespoint (ap902) und einer pfSense firewall. Die DHCP leases werden von der pfSense Firewall gehandelt. Per snmpwalk kann ich den Status der leases auslesen. Sobald das iPhone sich connected taucht es dort auf, mit IP, MAC und 2 weiteren Einträgen. Ein Match wäre hier also durchaus möglich.
Das "Problem" ist hier die Verweildauer des Eintrages, wenn das iPhone das WLAN verlässt, dann dauert es ziemlich genau 20 Minuten (mehrfach geprüft) bis der Eintrag verschwindet und somit den "Anwesenheits-Dummy" auf OFF/absent schaltet. Im Beitrag zum Airport wird von 5-10 Minuten gesprochen, natürlich ist das Device/SW-abhängig.

Die Frage hier wäre, ob sich erfahrungsgemäss 5-10 Minuten Delay als praktikabel herausgestellt hat und wie die Ansichten sind, ob 20 Minuten ebenfalls in einem vernünftigen Rahmen nutzbar wären.



Es wäre schön hier ein paar Hinweise und Erfahrungswerte zu bekommen, was ich wie am besten umsetzen kann, oder partiell wie ich z.B. das BT "Problem" lösen könnte, oder auch was der zu favorisierende Ansatz wäre.

Vielen Dank im Voraus



binford6000

ZitatWann ist SET einem NOTIFY vorzuziehen und vice versa?
Gar nicht: set ist ein Befehl und notify ein device welches auf Events reagiert.

Ein DOIF dagegen vereint Funktionalitäten von at, notify:
ZitatMit diesem Modul ist es möglich, einfache wie auch komplexere Automatisierungsvorgänge zu definieren oder in Perl zu programmieren. Ereignisse, Zeittrigger, Readings oder Status werden durch DOIF-spezifische Angaben in eckigen Klammern angegeben. Sie führen zur Triggerung des Moduls und damit zur Auswertung und Ausführung der definierten Anweisungen.
ZitatKann hier wer Tips geben, wie ich das iPhone dennoch per Bluetooth überwachen kann, wenn dieser "lescan" kein Ergebnis bringt ?
zB. so:
defmod iPhoneBT PRESENCE local-bluetooth ab:cd:ef:01:23:45 60 60
ZitatDie Frage hier wäre, ob sich erfahrungsgemäss 5-10 Minuten Delay als praktikabel herausgestellt hat und wie die Ansichten sind, ob 20 Minuten ebenfalls in einem vernünftigen Rahmen nutzbar wären.
Das wäre mir persönlich zu lange. Ich nutze eine Kombination aus BLE-Tag, FritzBox und nmap in einer Structure.
Wenn ich das Haus verlasse geht die Structure nach ca. 5 Minuten auf abwesend.
Alles hier im Forum beschrieben.
VG Sebastian 

Prof. Dr. Peter Henning

Es gibt leider keine vollkommen sichere Methode der Anwesenheitserkennung. Für weitgehende Sicherheit müssen verschiedene Verfahren - Bluetooth, WLAN, Infrarot-Bewegungsmelder etc. kombiniert werden. Eine weitere Methode ist die Peripherie-Überwachung, sagen wir mal mit Geofency. Dazu gehört aber dann eben noch etwas, das bei widersprüchlichen Daten eine Entscheidung trifft. Eine structure ist eine Möglichkeit, kennt aber nur eingeschränkte Regeln.

LG

pah

binford6000

Danke pah für die Erinnerung!
livetracking via owntracks ist natürlich auch am Start  ;)
VG Sebastian

hoschi

Vielen Dank fürs Feedback. Ich sehe meinen Denkfehler bzgl SET und NOTIFY ;)

Zitatdefmod iPhoneBT PRESENCE local-bluetooth ab:cd:ef:01:23:45 60 60
Sprich das geht auch, selbst wenn im "lescan" das Device nicht gefunden wird ? Der scan is nur notwendig um die UUID rauszufinden ? Da war mir der Zusammenhang nicht ganz klar. Werd ich nach der Nachtschicht mal angehen und prüfen.

Bzgl Kombination:
Ich denke VORERST, quasi zum ausprobieren, soll es mir ausreichen, wenn entweder Handy über BT oder DHCP lease OID vom Router das "anwesend" triggern" (beide würden überwacht werden). Das gäbe schonmal eine Redundanz bzgl "anwesend". Das "abwesend" könnte ich mit dieser Redundanz auch erschlagen. Somit wären schonmal 2 unabhängige Systeme eingebunden. Über andre/zusätzliche Methoden kann ich bei Unzufriedenheit ja immer noch nachdenken.

Geofency selbst finde ich ziemlich nett, allein schon wegen dem wegfallendem wiederholten Polling, aber das würde wie gesagt einen (weiteren) offenen Port auf der Firewall bedeuten und der Zugriff auf diesen müsste von überall erlaubt sein.  Ich denke ich sollte mich einlesen in das kreieren einer separaten FHEM Instanz auf einem anderen Port mit anderem User/Passwort auf dem NUR "geo" erlaubt ist.
Weiterhin könnte man in der Firewall Regel evtl "nur" die Netze des Mobilproviders freigeben, zusätzlich evtl. den Arbeitsplatz.

nmap könnte ich mir auch als problemlos umsetzbar vorstellen, wobei hier natürlich, genau wie bei der Bluetooth-Erkennung immer wieder Abfragen stattfinden müssen.
Cooler wäre es, wenn meine Firewall z.B. einen trap senden könnte. Das klingt verdammt nach einem Projekt :) Gefunden hab ich jetzt nichts, aber gibts einen snmp trap parser in FHEM ? Ich sehe nur das SYSSTAT womit man oid's pollen kann.

Wie handhabt ihr, vom Netzwerksicherheitsaspekt aus gesehen, das geofencing mittelts APP ?


ZitatEine structure ist eine Möglichkeit, kennt aber nur eingeschränkte Regeln.
Was ist hiermit gemeint ? Für mich habe ich es bisher so geregelt, das alle meine Versuche mit ModulX die Anwesenheit zu realisieren einen "Anwesend"-Dummy auf on oder off gesetzt haben, der dann im Endeffekt über ein Reading gesteuert Licht an oder aus schaltet.
Was sind die Nachteile / Begrenzungen von Structures in dem Moment ?

Danke & Gruss
Hoschi



binford6000

ZitatSprich das geht auch, selbst wenn im "lescan" das Device nicht gefunden wird ? Der scan is nur notwendig um die UUID rauszufinden ?
Die iOS Geräte können nicht per BLE Scan überwacht werden. Das funktioniert nur mit BLE-Tags wie zB. einem GTAG.
Die nötige MAC-Adresse für local Bluetooth steht ja in den iOS-Einstellungen Allgemein -> Info -> Bluetooth.

ZitatWie handhabt ihr, vom Netzwerksicherheitsaspekt aus gesehen, das geofencing mittelts APP ?
Ich habe einen eigenen Owntracks Server am Start. Auf dem iPhone läuft die owntracks App mit einem
Letsencrypt Zertifikat und Authentifizierung. Siehe auch:
https://forum.fhem.de/index.php/topic,37412.msg574206.html#msg574206

ZitatWas sind die Nachteile / Begrenzungen von Structures in dem Moment ?
Ich sehe da keine Nachteile. Du hast EIN Device welches deine Anwesenheit abbildet. Hier mal ein Bsp. von mir:
defmod SebastianstructMain structure st_type_presence structSub Sebastian.DUM Sebastian.gtag2.PRE
attr SebastianstructMain clientstate_behavior relative
attr SebastianstructMain clientstate_priority present absent
attr SebastianstructMain userReadings presence {ReadingsVal('SebastianstructMain','state','');;;;}


structSub ist dabei selbst wiederum eine Structure mit meinen iOS Devices. Das mache ich so da mein iPad durchaus
mal zu Hause bleibt, ich aber trotzdem abwesend bin. Dazu kommen noch ein dummy (manuelles setzen über Nacht zB.) und ein GTAG.

VG Sebastian

Hollo

Zitat von: hoschi am 08 Oktober 2018, 23:03:08
...Sprich das geht auch, selbst wenn im "lescan" das Device nicht gefunden wird ? ...
Beim Scan solltest Du währenddessen am iPhone im Bluetooth-Menü sein; andernfalls ist es eh nicht sichtbar.
Wenn das erfolgreich ist, sollte Dein System dort auch namentlich erscheinen.

Zitat...wenn entweder Handy über BT oder DHCP lease OID vom Router das "anwesend" triggern" ...
Neben presence über bluetooth geht das auch mittels ping auf IP.
Du brauchst also keinen umständlichen Weg über Leases auslesen.
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

binford6000

ZitatNeben presence über bluetooth geht das auch mittels ping auf IP.
Du brauchst also keinen umständlichen Weg über Leases auslesen.
Das gilt aber nur eingeschränkt für iOS Devices. Denn:

ZitatNur wenn bei einem iPhone/iPad die Funktion "über WLAN synchronisieren" aktiviert ist, ist es auch im Standby zuverlässig pingbar.
Standardmäßig deaktivieren Apple-Geräte ihr WLAN im Standby-Betrieb um die Akkulaufzeit zu verlängern.

Deswegen gehen die meisten iOS User beim Thema Presence über eine FritzBox (und dem dazugehörigen Script) oder nmap.
VG Sebastian

Hollo

Wenn das WLAN deaktiviert ist, ist die Version über DHCP-Leases doch genauso Grütze.   :P
Der Vorschlag ging eher in die Richtung: wenn WLAN (mit den bekannten Nachteilen), dann darüber.

Außerdem wird doch niemand die Lease-Time seines DHCP-Servers auf 5 Minuten einstellen; bei genug Devices sorgt das für reichlich Traffic.   ;)

FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

binford6000

ZitatAußerdem wird doch niemand die Lease-Time seines DHCP-Servers auf 5 Minuten einstellen; bei genug Devices sorgt das für reichlich Traffic.   ;)


Nicht wirklich  ;D