Eine wichtige und unerlässliche Funktion in der Hausautomation ist die Erkennung der Anwesenheit der Bewohner. Daher ist eine stabile und zuverlässige Lösung wichtig. Lange habe ich keine anständige Lösung erreichen können. Mit dem unten gezeigten Beispiel konnte ich eine absolut zuverlässige Erkennung der Anwesenheit erreichen. Der WAF ist dadurch deutlich gestiegen ;-) Leider funktioniert das nicht mit einer Fritzbox. Diese unterstützt kein SNMP Protokoll.

Ob euer Router bzw. das Gerät auf dem auch der DHCP-Server läuft das SNMP-Protokoll unterstützt kann ganz einfach mit einem MIB-Browser überprüft werden. Wie das genau funktioniert und wo man einen MIB-Browser her bekommt ist hier sehr gut und kurz beschrieben.

Grundsätzlich mache ich die Überwachung mit diesem Beispiel aus der FHEM Wiki. Die gesamte Lösung stelle ich hier kurz und knackig vor.

https://wiki.fhem.de/wiki/PRESENCE#Beispiel_DHCP_.C3.9Cberwachung_auf_Airport_Basestation

Die Funktion "snmpCheck" aus der Wiki, die in meiner 99_utils.pm gespeichert ist wird vom Modul PRESENCE für jedes Handy aufgerufen. Bei mir sind es drei Handys (APhone, BPhone, CPhone). Die Funktion gibt dann 0 oder 1 für die Abfrage des entsprechenden Handys an das Presence Modul zurück.

defmod APhone PRESENCE function {snmpCheck("192.168.3.1","0x4400101f807a")} 60 60
attr APhone userattr Handys Handys_map structexclude
attr APhone Handys alleHandys
attr APhone disable 0
attr APhone event-on-change-reading state
attr APhone group Anwesenheit
attr APhone room 3.2_Anwesenheit
attr APhone verbose 3

 

Dann fasse ich die Handy's "APhone BPhone CPhone" in einer STRUCTURE zusammen. Das Attribute "clientstate_behavior"  definiert die Structure so, dass diese "present" ist auch wenn nur ein Telefon erkannt worden ist. Das zweite Attribut "clientstate_priority" definiert das Verhalten in Abhängigkeit der erkannten Telefone. Wenn mindestens ein Telefon vorhanden ist geht die Structure auf "present". Und erst wenn alle Telefone den Status "absent" haben wechselt die Structure auch auf "absent".

defmod alleHandys structure Handys APhone BPhone CPhone
attr alleHandys clientstate_behavior relative
attr alleHandys clientstate_priority present absent
attr alleHandys group Anwesenheit
attr alleHandys room 3.2_Anwesenheit

 

Da es manchmal sein kann, dass die Handys zwischendurch nicht im der ARP-Tabelle des Routers auftauchen habe ich noch einen Watchdog eingebaut. Das bringt vor allem ein wenig Ruhe in das auf und zu der Rollläden wenn man nur allein zu Hause ist und auch nur ein Handy in der ARP-Tabelle des Routers hinterlegt ist. Der Watchdog setzt dann nach einer Minute den Dummy Anwesend auf "present".

defmod WatchDogAnwesend watchdog alleHandys:present 00:01 alleHandys:absent {\
fhem("set Anwesend present");;\
fhem("setstate WatchDogAnwesend defined");;\
}
attr WatchDogAnwesend devStateStyle style="text-align:right;;;;"
attr WatchDogAnwesend group Anwesenheit
attr WatchDogAnwesend regexp1WontReactivate 1
attr WatchDogAnwesend room 3.2_Anwesenheit,9.3_Watchdog
attr WatchDogAnwesend verbose 2

 

Genauso ist es dann mit der Abwesenheit. Dieser setzt dann nach einer gewissen Zeit, hier fünf Minuten den Dummy Anwesend auf "absent". Die fünf Minuten reichen aus, das das Handy auch wieder in der ARP-Tabelle des Routers auftaucht.

defmod WatchDogAbwesend watchdog alleHandys:absent 00:05 alleHandys:present {\
fhem("set Anwesend absent");;\
fhem("setstate WatchDogAbwesend defined");;\
}
attr WatchDogAbwesend devStateStyle style="text-align:right;;;;"
attr WatchDogAbwesend group Anwesenheit
attr WatchDogAbwesend regexp1WontReactivate 1
attr WatchDogAbwesend room 9.3_Watchdog,3.2_Anwesenheit
attr WatchDogAbwesend verbose 2

 

Die Erkennung des Absent erfolgt bei mir nach ca. 10 Minuten. Die Present Meldung schon nach max. zwei Minuten. Es kann sein das die Zeiten (Presence und Watchdog) in einem anderen System noch etwas "Fine-tuning" benötigen. 

Kommentare powered by CComment