Anwesenheit-Status mit openHAB

In diesem Artikel möchte ich zeigen, wie das eigene Smarthome mittels openHAB automatisch erkennt, ob jemand zu Hause ist und wie man mit dieser Information arbeiten kann.

Die Idee

In einem Smarthome wird gerne mit dem Anwesenheit-Status der Bewohner gearbeitet. So können z.B. automatisch alle Lichter ausgeschaltet werden, wenn niemand zu Hause ist oder es wird eine Anwesenheit-Simulation gestartet. Der Anwesenheit-Status kann mit anderen Ereignissen im Haus verknüpft und definierte Aktionen ausgelöst werden. So bekomme ich z.B. vom Haus eine Twitter-Nachricht, wenn niemand zu Hause ist und Fenster geöffnet wurden.

Eine Möglichkeit dem Haus mitzuteilen, ob man zu Hause ist, ist über einen Schalter an der Haustür, den man beim gehen oder kommen betätigt. Bequemer ist es aber, wenn das Haus automatisch erkennt, ob jemand anwesend ist.

Lösungsstrategie

Um die Anwesenheit zu erkennen, bieten sich die Smartphones der Bewohner an. Ist das Smartphone mit dem WLAN im Haus verbunden, gilt der Bewohner als anwesend. Ist es nicht verbunden, gilt er als abwesend. Ist kein einziges Smartphone der Bewohner verbunden, ist keiner da und der allgemeine Anwesenheit-Status ist abwesend. Ist eines verbunden, ist der allgemeine Anwesenheit-Status anwesend.

Zur Umsetzung wird das openHAB Network Health Binding verwendet. Dieses prüft regelmäßig, ob definierte Geräte im Netzwerk erreichbar sind. In unserem Fall wird geprüft, ob die Smartphones im WLAN sind und ein entsprechender Status in openHAB gesetzt.

Umsetzung

Die Umsetzung mit openHAB ist sehr einfach. Erste Erfahrungen mit openHAB setze ich bei der folgenden Erklärung voraus. Folgende Schritte, die ich im Verlauf des Artikels erkläre, sind im einzelnen durchzuführen:

  • Smartphones eine fixe IP Adresse zuweisen
  • Network Health Binding in openHAB installieren
  • Smartphones in openHAB als Item anlegen und konfigurieren
  • Gruppe mit den Smartphones in openHAB einrichten
  • Mit dem Status der Smartphone Gruppe arbeiten

Fixe IP für Smartphones

Das openHAB Network Health Binding prüft anhand der IP Adresse, ob ein Gerät im Netzwerk erreichbar ist. Dazu muss openHAB die IP Adresse der einzelnen Smartphones kennen. Da ein Gerät vom DHCP Server standardmäßig immer mal wieder eine andere IP Adresse bekommt, ist es wichtig den DHCP Server so zu konfigurieren, dass die Smartphones immer die gleiche IP Adresse bekommen.
Dazu muss im Router, in der Konfiguration des DHCP Servers, für jedes einzelne Smartphone eine feste IP-Adresse zugewiesen werden. Die Zuweisung erfolgt anhand der MAC Adresse der Geräte. Wie das genau geht, ist bei jedem Router etwas anders und muss in der Dokumentation des Routers nachgelesen werden. Am Ende der Konfiguration hat jedes Smartphone eine eigene, fixe IP Adresse, die beim Einrichten der Smartphones in openHAB benötigt wird.

openHAB Network Health Binding installieren

Das Network Health Binding ist ein Addon das zusätzlich zu openHAB installiert werden muss. Die Addons können auf der openHAB Download-Page herunter geladen werden. In dem herunter geladenen ZIP-File befindet sich ein JAR mit dem Namen org.openhab.binding.networkhealth-<versionsnummer>.jar. Dieses File muss in den Ordner ${openhab_home}/addons kopiert werden. Damit steht das Network Health Binding nach einem Neustart von openHAB zur Verfügung.
Es gibt noch zusätzliche optionale Parameter, die in der openHAB Konfiguration angegeben werden können, aber nicht zwingend sind. Welche das im einzelnen sind, kann der Dokumentation des Network Health Binding entnommen werden.

Smartphones in openHAB anlegen und konfigurieren

Nun werden die Smartphones, genau wie alle anderen Geräte, in openHAB konfiguriert. Dazu das File mit den Items aus dem Ordner ${openhab_home}/configuration/items öffnen. Hier wird jedes Smartphone als Schalter angelegt. Der Schalter ist ON, wenn das Gerät verbunden ist und OFF, wenn das Gerät nicht verbunden ist.
Die Konfiguration der Smartphones sieht wie folgt aus:

Switch Phone1	"Phone 1 [MAP(network_health.map):%s]" 	<network>   (Presence_Check) 	{ nh="IP-ADRESSE-PHONE1" }
Switch Phone2   "Phone 2 [MAP(network_health.map):%s]"  <network>   (Presence_Check) 	{ nh="IP-ADRESSE-PHONE2" }

Zur Erinnerung, ein Item wird in openHAB nach folgendem Schema konfiguriert:

itemtype itemname ["labeltext"] [<iconname>] [(group1, group2, ...)] [{bindingconfig}]
  • Wir haben also zwei Smartphones als Schalter (Switch) mit dem Namen Phone1 und Phone2.
  • Der Labeltext wird mit einem Transformation-File transformiert, damit nicht ON und OFF angezeigt wird sondern ein schönerer Text.
  • Als Icon wird das openHAB network Icon angezeigt.
  • Beide Geräte sind der Gruppe Presence_Check zugewiesen.
  • Bei der bindingconfig muss IP-ADRESSE-PHONE1 und IP-ADRESSE-PHONE2 ersetzt werden durch die IP Adressen, die dem jeweiligen Smartphone im DHCP Server zugewiesen wurde.

Gruppe der Smartphones einrichten

Als letzten Schritt der Einrichtung wird die Gruppe der Smartphones angelegt. Ziel ist es, dass anhand der Gruppe erkannt werden kann, ob jemand zu Hause ist oder nicht. Die Gruppe muss also auch ein Switch sein, der den Status ON hat, wenn ein Smartphone im Netzwerk ist und OFF, wenn kein Smartphone im Netzwerk ist.
Die Konfiguration erfolgt ebenfalls im Items-File mit folgendem Code

Group:Switch:OR(ON, OFF)   Presence_Check   "Anwesenheit [MAP(presence.map):%s]"   <present>
  • Group:Switch:OR(ON, OFF) legt eine Gruppe von Switches an, die mit OR verknüpft sind. Die OR Verknüpfung bewirkt, dass die Gruppe auf ON ist, wenn mindestens ein Gerät der Gruppe den Status ON hat. Haben alle Geräte den Status OFF, ist auch die Gruppe auf OFF.
  • Die Gruppe hat den Namen Presence_Check, den wir den Items im Abschnitt zuvor zugewiesen haben.
  • Der labeltext der Gruppe wird auch über eine Transformation ansprechend gestaltet.
  • Die Gruppe bekommt als Icon das present Icon von openHAB.

Den Status verwenden

Jetzt hat openHAB mit der Gruppe Presence_Check einen Status, mit dem erkannt werden kann, ob jemand zu Hause ist oder nicht. Diese Gruppe kann nun z.B. in Regeln verwendet oder auf der Oberfläche angezeigt werden.
Die folgende Regel versendet eine Twitter Nachricht, wenn ein Fenster geöffnet wurde und niemand zu Hause ist.

// Aktion wenn Fenster geöffnet und keiner zu Hause
rule "Fenster offen"
when 
	Item Windows changed to OPEN
then 
	if(Presence_Check.state == OFF) {
		sendToTwitter.apply("Es wurden Fenster geöffnet und keiner ist zu Hause.")		
	}
end

Die Fenster sind in der Gruppe Windows zusammen gefasst. Ändert sich der Status der Fenster auf OPEN, wird geprüft, ob der Status der Gruppe Presence_Check == OFF ist. Wenn ja, wird die Twitter Nachricht versendet.
Analog dieser Regel können weitere Regeln und Aktionen, basierend auf dem Anwesenheit-Status erstellt werden.
Nähere Infos zum senden von Twitter Nachrichten aus openHAB gibt es im Artikel Ein Smarthome das twittert.

Zusammenfassung und Fazit

Wir haben in openHAB einen Status eingeführt, der anzeigt, ob jemand zu Hause ist oder nicht. Der Status wird durch eine Gruppe von Switches repräsentiert. In der Gruppe sind die Smartphones der Bewohner zusammengefasst. Ob jemand zu Hause ist, erkennen wir daran, ob die Smartphones mit dem WLAN verbunden sind.
Über die Gruppe haben wir eine Entkopplung erreicht, zwischen den Ereignissen und Items, anhand derer die Anwesenheit erkannt wird und den Regeln, die mit dem Status arbeiten. Es können jetzt jederzeit Geräte (z.B. Smartphones oder ein manueller Schalter) der Gruppe hinzugefügt oder entfernt werden, ohne dass dies Auswirkungen auf die Regeln hat.

Wir haben jetzt eine bequeme und automatische Lösung, mit der wir das Haus verlassen und zurück kommen können, ohne dass der Anwesenheit-Status manuell über einen Schalter gesetzt werden muss. Die beste Technik ist die, von der man nichts bemerkt, das ist User Experience.
Man muss sich aber bewusst sein, dass die Anwesenheit nur indirekt über die Smartphones erkannt wird. Ich hatte schon Twitter Nachrichten bekommen, dass  niemand zu Hause ist und Fenster geöffnet wurden, weil beim Handy meiner Freundin das WLAN ausgeschalten war. 🙂

2 Replies to “Anwesenheit-Status mit openHAB”

  1. Sehr gute Idee!
    Leider geben unsere Fenster keine Statusmeldungen. Somit wäre diese Anwendung für uns nicht möglich. 🙂

Schreibe einen Kommentar

Anmelden um einen Kommentar abzugeben.

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*