Simple Anwesenheitserkennung mit FHEM die jeder einrichten kann
Seiteninhalte
Eine Anwesenheitserkennung kann dazu genutzt werden, um bei Verlassen der Wohnung oder des Hauses die Heizung herunter zu drehen, das Licht und andere Verbraucher auszuschalten oder sogar, um die Alarmanlage zu aktivieren bzw. deaktivieren. Der Fantasie sind hier kaum Grenzen gesetzt.
Nun gibt es unter FHEM verschiedene Herangehensweisen, wie man die Anwesenheit der Bewohner registriert. Auch gibt es verschiedene Möglichkeiten, den Zustand unter FHEM zu speichern.
Voraussetzung
Anwesenheitserkennung über GEOFANCY
Die komplexeste aller Möglichkeiten ist hierbei die Nutzung des FHEM RESIDENTS-Moduls. Verbunden mit einer Erkennung über GEOFANCY könnt Ihr hier über eine entsprechende App unter Android oder iOS sogenannte Hooks an euer FHEM senden und dem FHEM-Modul somit sehr genau mitteilen, wo Ihr euch gerade befindet. Die Orte, an denen ein Status an FHEM gesendet werden soll, lassen sich in der jeweiligen App definieren.
Darauf aufbauend lassen sich sicherlich sehr viele schöne Dinge realisieren, mit persönlich ist das vom Sicherheitsaspekt aber ein zu gruseliger Gedanke, der mir zu stark in die Richtung der totalen Überwachung geht. Ich würde daher vermutlich sowieso nur mein Zuhause definieren, und hierfür der ganze Aufwand? Das lohnt sicher nicht und ist mit zu vielen Nachteilen verbunden:
- Manuelle Konfiguration der APP auf allen Smartphones.
- Man muss der App vertrauen und sammelt gezwungener Maßen (weitere) private Geodaten.
- FHEM muss über HTTP/HTTPS vom Internet aus von der App erreichbar sein.
Ich habe lange überlegt, ob ich das seit Jahren erprobte Verfahren umstellen soll und bin zu dem Entschluss gekommen, dass alles so bleibt wie es ist. Wenn es euch mehr anspricht, findet Ihr in den oben verlinkten WIKI-Artikeln alle nötigen Informationen.
Anwesenheitserkennung über WLAN
Update 15.1.2019: Android und IOS/iPhone machen mit der folgenden Anwesenheitserkennung über LAN-Ping mittlerweile immer mehr Probleme. Die Anwesenheit kann auf diesem Wege kaum noch zuverlässig festgestellt werden. Die Geräte befinden sich bei Nicht-Benutzung zwar nach wie vor im WLAN, schalten aber in eine Art Energiesparmodus um und sind in diesem Zustand nicht über Ping erreichbar. Eine weitere Alternative habe ich hier in den Kommentaren beschrieben.
Ich nutze seit Jahren erfolgreich die ganz einfache Anwesenheitserkennung mit Hilfe des FHEM-Moduls PRESENCE. PRESENCE pingt hierbei regelmäßig die im WLAN angemeldeten Handys der Bewohner und setzt so relativ zeitnah den entsprechenden Status „present“ oder „absent“, also „anwesend“ oder „abwesend“. Da die meisten Ihr Smartphone zuhause im WLAN nutzen, sollte dies auch fast jeder selber umsetzen können.
Statische IP zuweisen
Einzige Grundvoraussetzung hierfür ist, dass jedes Smartphone eine feste IP bei Euch im Heimnetzwerk bekommt. Benutzer der Fritzbox setzen dies ganz einfach an folgender Stelle über das Webinterface (bei anderen Routern ist das sicher ähnlich):
Heimnetz –> Heimnetzübersicht –> Details des Smartphones
Der Name des Smartphones kann beliebig angepasst werden, damit Ihr den Eintrag später wiederfindet. Android- und iPhone-Geräte sind an Ihrem Produktnamen schnell erkannt. Solltet Ihr mehrere Smartphones im Netz haben, müsst Ihr die MAC-Adressen aus dem Handyeinstellungen entnehmen oder das Smartphone kurz aus dem WLAN nehmen, um zu sehen, welches Gerät in der Fritzbox-Übersicht verschwindet.
Danach einfach den Haken bei „Diesem Netzwerkgerät immer die gleiche IPv4-Adresse zuweisen“ setzen und ganz wichtig, die IPv4-Adresse des Gerätes merken (hier ebenfalls verfremdet):
Definition unter FHEM
Im folgenden Beispiel wird die IP-Adresse 192.168.x.x (bitte durch Eure IPv4-Adresse ersetzen) alle 60 Sekunden angepingt. Ist die erreichbar, bekommt „handy_carsten“ den Status „present“. Ist die Adresse nicht erreichbar, den Status „absent“.
1 2 | define handy_carsten PRESENCE lan-ping 192.168.x.x 60 attr handy_carsten room System |
Den Room „System“ nutze ich für alle System-Module, um sie dort einfacher wiederzufinden. Dies ist Euch überlassen, wie Ihr es sortieren mögt. Das Ganze macht Ihr jetzt mit allen Bewohnern:
1 2 | define handy_testbewohner PRESENCE lan-ping 192.168.x.x 60 attr handy_testbewohner room System |
Um jetzt einen Gesamtstatus zu der Anwesenheit zu bekommen, fassen wir einfach alle Bewohner mit dem Modul STRUCTURE zusammen. Es gilt die einfache Regel: Solange noch eine Person zu Hause ist, soll der Gesamtstatus auf „present“ stehen. Das erreichen wir wie folgt:
1 2 3 4 | define Anwesenheit STRUCTURE presence handy_carsten handy_testbewohner attr Anwesenheit clientstate_behavior relative attr Anwesenheit clientstate_priority present absent attr Anwesenheit room System |
Jetzt kann getestet werden. Wenn alles richtig konfiguriert wurde, sollte es sich wie folgt darstellen:
Das STRUCTURE „Anwesenheit“ bildet nun unsere Grundlage für weitere spannende Automatisierungen.
Verbraucher bei Abwesenheit abschalten
Einer der wichtigsten Anwendungszwecke der Anwesenheitserkennung ist die automatische Abschaltung von Verbrauchern, sobald ihr Euer Haus oder Wohnung verlassen habt.
In diesem kurzen Beispiel stelle ich Euch vor, wie ich das Ganze für mich gelöst habe.
Alle Verbraucher in einem STRUCTURE zusammenfassen
Als Erstes fassen wir alle Verbraucher, die wir im Falle der Abwesenheit abschalten wollen, in einem STRUCTURE vom Typ „room“ zusammen. Vorteil ist, dass wir somit nur einen Schaltbefehl an FHEM absetzen müssen und auch an anderer Stelle die Möglichkeit haben, den neuen STRUCTURE als Zentralschalter zu verwenden.
Kommen weitere Verbraucher hinzu, müsst Ihr lediglich diesen STRUCTURE anpassen. Mit hinzunehmen könnt ihr alles, was sich über den Befehl „on“ und „off“ steuern lässt.
1 2 | define PowerAll STRUCTURE room az_teststeckdose1 IT_00000F0FFF attr PowerAll room System |
Mit DOIF den Anwesenheitsstatus überwachen
Nun benötigen wir ein Modul, dass und bei eintretender Abwesenheit unsere Verbraucher abschaltet. Ich nutze hierfür DOIF, es kann hierfür aber auch noch ganz klassisch das Modul WATCHDOG genutzt werden.
Eine ausführlichere Vorstellung von DOIF gab es bereits in dem Artikel Intelligente FHEM-Zeitschaltuhr mit DOIF.
DOIF kann seine Vorteile in diesem einfachen Beispiel noch nicht voll ausspielen, ich würde aber jedem empfehlen, sich von vorn herein mit der DOIF-Syntax auseinanderzusetzen, es lohnt sich und ist jederzeit um jede Menge Optionen erweiterbar.
1 2 | define di_PowerAll DOIF ([Anwesenheit] eq "absent") (set PowerAll off) attr di_PowerAll room System |
Wichtig ist, dass wir nicht sofort im Dunkeln stehen wollen, wenn einmal fälschlicherweise eine Abwesenheit erkannt wird. Gerade bei WLAN-Empfangsproblemen kann dies schnell einmal passieren. Um die Fehlerrate etwas zu minimieren, verzögern wir den DOIF einfach um 15 Minuten. Um zu testen könnt Ihr natürlich auch eine kürzere Verzögerung wählen.
1 | attr di_PowerAll wait 900 |
Ihr könnt den gleichen DOIF auch benutzen, um bei Anwesenheit einen beliebigen Schalter einzuschalten, das DOIF würde in diesem Fall einfach folgendermaßen definiert bzw. später erweitert.
Dies ist nur ein Beispiel, das bei mir so nicht in Verwendung ist. Über den Zentralschalter alles zu aktivieren sollte in den seltensten Fällen Sinn machen – ein netter Showeffekt ist es aber allemal.
1 | define di_PowerAll DOIF ([Anwesenheit] eq "absent") (set PowerAll off) DOELSE (set PowerAll on) |
Die oben definierte Verzögerung von 15 Minuten greift in diesem Beispiel nur bei der ersten Bedingung, also bei dem „set PowerAll off“. Wenn Ihr die 2. Bedingung, also das „set PowerAll on“ um z.B. eine Minute verzögern wollt, und Bedingung 1 weiterhin um 15 Minuten, trennt Ihr die beiden Zeiten einfach mit einem Doppelpunkt.
1 | attr di_PowerAll wait 900:60 |
Update 19.12.2016: Absatz „Verbraucher bei Abwesenheit abschalten“ hinzugefügt.
Hallo
Vielen Dank für super Erklärung.
Habe die gleich anwesenheits erkennung mit 4 Telefons.
Würde gerne eine Schaltung erstellen:
Wenn alle absent sind dann gehen steckdose 1 steckdose 2 und Licht 1 aus. Wen Telefon 3 present ist dann steckdose 2 an schalten. Wen Telefon 1 present ist steckdose 1 an schalten. Wen Telefon 2 oder 4 present sind dann alles Steckdosen an schalten.
Stehe aber jezt auf dem Schlauch und komme einfach nicht weiter.
Haben Sie eine Idee wie ich damit anfangen kann?
Hallo Alex,
danke dir. Im Grunde ist das das Gleiche, was ich in dem DOIF-Artikel mit der Weihnachtsbeleuchtung mache. Der Artikel sollte in jedem Fall den richtigen Einstieg bringen (am besten von oben durcharbeiten, er ist ja nicht lang): https://techblog.one/intelligente-fhem-zeitschaltuhr-mit-doif/#Weihnachtsbaum_einschalten_bei_Anwesenheit
Die Uhrzeiten und die Dämmerungs-Erkennung musst du in deinem Fall einfach raus lassen.
Danke Carstens
Habe das erste teil mit watchdog gelöst.
Wenn die Kinder nicht da sind „Handy absend“ gehen die Steckdosen aus.
Jetzt muss ich noch die Struktur Anwesenheit einbinden.
Wenn niemand da ist das Dan alle Steckdosen und das Licht ausgehen.
Das würde ich auch mit watchdog lösen das dummy „anwesenheit“ auf off schaltet.
Wie steuere ich mit Hilfe von dammy „anwesenheit“ die Steckdosen und das licht?
Hallo Alex,
was der Dummy macht ist mir nicht ganz klar, ich würde es folgendermaßen machen:
Bau dir einfach ein STRUCTURE (vom Typ „room“), in das du alle Verbraucher des Hauses aufnimmst. Lampen, Steckdosen, alles was on/off versteht. Meinen habe ich „PowerAll“ genannt.
Dann nimmst du entweder den WATCHDOG oder (so würde ich es jetzt machen) DOIF und schaltest bei Anwesenheit=absent alles auf einmal über den STRUCTURE „PowerAll“ aus. Ob WATCHDOG oder DOIF ist reine Geschmackssache.
Wichtig hier, dass du die Schaltung um 10-15 Minuten verzögerst, sonst schaltet dir eine versehentliche Abwesenheit sofort alles aus.
Wenn ich ein paar Minuten Zeit finde, werde ich für beide Varianten ein Beispiel hier in diesen Artikel einfügen, das Ganze ist ja doch einer der Hauptanwendungszwecke der Anwesenheitserkennung.
Danke für deine Frage!
Hallo Carsten
Für die Kinderzimmern habe ich watchdog mit 10 Minuten Verzögerung installiert. Habe bis jetzt keine vernünftige Erklärung wie ich „structur“ einrichten kann gefunden. Ich würde mich freuen wen du das erklären würdes.
Vielen Dank für dein Block und deine Tips
Hallo Alex,
sorry, hat ein paar Tage gedauert, der neue Absatz oben erklärt das Ganze nun:
https://techblog.one/simple-anwesenheitserkennung-mit-fhem-die-jeder-einrichten-kann/#Verbraucher_bei_Abwesenheit_abschalten
Hallo Carsten
Vielen Dank für dein Beitrag, werde in den nächsten Tagen in mein System integrieren. DANKE
MfG Alex
Hallo Carsten.
Habe mich schon lange mit FHEM gequält und nie richtig ans laufen bekommen.
Heute habe ich dank Deiner ERklärung zum ersten mal erfolgreich eine DOIF Schaltung hinbekommen. DANKE!!!
Jetzt meine Frage:
Das presence Modul liefert bei iPhones keine verlässlichen Werte. Hast Du dafür eine unkomplizierte Lösung?
Ich ag die geofancy variante nämlich auch nicht.
Danke im Voraus.
Axel
Hallo Axel,
ich habe selber kein iPhone, die Dinger schalten wohl ihr WLAN bei Nichtbenutzung ab, um Strom zu sparen und werden dann als „absent“ erkannt. Ist es das Problem?
Funktioniert der Trick mit dem Aktivieren des iTunes Sync über WLAN, also bleibt das WLAN dann dauerhaft aktiv? Man ließt dazu unterschiedliche Statements: https://support.apple.com/de-de/HT203075
Ich muss mir die Tage mal ein iPhone zum Testen besorgen… 🙂
Hast Du inzwischen mal Erfahrungen mit einem iPhone sammeln können?
Hallo Axel,
nein, allerdings verhält sich ein Android mittlerweile ähnlich. Nach einiger Zeit sind die Smartphones einfach nicht mehr anpingbar, hängen aber nach wie vor im WLAN und sind auf dem Access Point sichtbar.
Ich bin daher (und für besseren 5GHz-Empfang) vor einiger Zeit auf den Ubiquiti Unifi AP-AC-LR Access Point umgestiegen. In Verbindung mit dem Unifi Controller (lässt sich recht einfach über Docker oder auch nativ auf den Raspberry Pi installieren) und dem FHEM-Plugin „unifi“ kannst du die Anwesenheit übers WLAN recht zuverlässig bestimmen.
Sobald ein wenig mehr Zeit ist, werde ich das Konstrukt mal ausführlich beschreiben.
Grüße
Carsten
Hallo Carsten,
hast Du inzwischen Zeit gefunden, die Anwesenheitserkennungen mit den Ubiquiti zu beschreiben?
Für mich ist die Konfiguration in FHEM nicht besonders einfach (als Hilfe Commandref und Wiki). Mit deiner Anleitung hab ich zumindest die Heizungssteuerung hingebracht und die Anwesenheitserkennung funktioniert, jedoch nur bis zum dem Zeitpunkt ab welchen die Handys schlafen gehen (Fritzbox).
Habe mir kürzlich auch einen Ubiqiti AP AC Lite gekauft und auch schon ein paar Stunden verbracht, eine einfache Anleitung zu finden. Dachte der Unifi ist für das Schlafproblem ausreichend. Jedoch schlafen auch hier die Handys ein, weil es anscheinend nicht ohne das unifi Plugin funktioniert.
Muss ich den Controller unbedingt auf den Raspberry installieren oder reicht für die Konfiguration mein WinPC?
Grüße
Klaus
Funktioniert soweit gut.
MÖchte aber folgendes machen.
Wenn ich um 16.30 Uhr nach Hause komme, sollte die HUE Lampe nicht sofort angehen.
Sondern erst ab 18 Uhr und wenn ich dann zu Hause bin.
Ist das auch machbar?
Hallo Reimund,
sollte recht einfach mit folgenden DOIF gehen, nach 22:00 oder bei Abwesenheit würde sie auch automatisch wieder aus gehen:
(([18:00-22:00]) and ([Anwesenheit] eq „present“]))
(set Lampe on)
DOELSE
(set Lampe off)
Ist jetzt nur schnell herunter getippt, hoffe die Syntax passt – die doppelte Klammerung ist vermutlich nicht nötig, dürfte aber auch nicht schaden.
Viele Spass beim Ausprobieren! 🙂