In vielen denkbaren Szenarien macht es Sinn, dass unsere openHAB-Instanz weiß, dass jemand zuhause ist und vielleicht auch wer im Einzelnen. Denkbar wäre das Einschalten von bestimmten Geräten nach einer Heimkehr eines Bewohners. Zudem können nicht benötigte Geräte ausgeschaltet werden, wenn niemand anwesend ist und diese somit nicht unnötig Strom verbrauchen. In diesem Artikel zeigen wir, wie wir die Präsenz eines Bewohners mittels WLAN und Bluetooth ermitteln und situationsabhängig Schaltungen durchführen können.
Auf unserem Raspberry Pi, welcher mit der IP-Adresse “192.168.23.235” konfiguriert wurde, haben wir zunächst alle Schritte aus dieser Anleitung ausgeführt und sind in der Lage, lokal vom Raspberry Pi aus Bluetooth Endgeräte mittels L2-Ping zu erreichen. Alternativ kann der Bluetooth-Stick auch am openHAB-Server selbst betrieben werden, wenn bei diesem ein Anschließen von USB-Geräten möglich ist.
Ist der Betrieb des Bluetooth-Adapters sichergestellt, erstellen wir nun auf dem Raspberry ein Bash-Script mit folgendem Inhalt:
#!/bin/bash
#1=Daniel, 2=Tina
case $1 in
1) MAC="33:44:55:66:77:88" ;;
2) MAC="11:22:33:44:55:66" ;;
esac
if /usr/bin/l2ping -c 1 $MAC &> /dev/null
then
echo "ON"
else
echo "OFF"
fi
Das Script könnte nun bereits auf dem Raspberry per Hand gestartet werden. Dazu müssen lediglich zuvor alle notwendigen Bluetooth-MAC-Adressen im Script hinterlegt und die zu prüfende Nummer als Parameter beim Starten des Scripts übergeben werden. Als Beispiel möchte ich die Präsenz von Tinas Mobilfunktelefon feststellen:
/scripts/bt.sh 2
Hier scheint wohl entweder:
Tina nicht zuhause zu sein
Auf Tinas Mobilfunktelefon ist Bluetooth nicht aktiviert
Beim Einrichten gemäß dieser Anleitung ist etwas schief gelaufen
Einrichtung auf dem openHAB-Server
Wie auch bei vielen anderen hier zu findenden openHAB-Anleitungen benötigen wir hierbei jeweils ein Script auf dem Raspberry sowie auch auf dem openHAB-Server. Das erstere wurde an diesem Punkt der Anleitung bereits umgesetzt, widmen wir uns also dem Bash-Script auf dem Server. Dies gestaltet sich etwas weniger umfangreich mit folgenden Zeilen des neuen Scripts “/scripts/bt.sh“:
Dieses Script bewirkt nur, dass das Script auf der Himbeere remote via SSH ausgeführt wird. Ein Test vom openHAB-Server aus sollte das gleiche Ergebnis wie auf dem Raspberry selbst liefern:
/scripts/bt.sh 2
Das Item definieren
Nun erstellen wir für die beiden Smartphones unseres Beispielszenarios zwei entsprechende Item-Definitionen in der passenden Konfigurationsdatei von openHAB:
Auch in diesem Fall nutzen wir erneut das Addon “exec“, welches wir mittels
apt-get install openhab-addon-binding-exec
installieren.
Integration in die Sitemap
Anschließend können diese Items bereits in die Sitemap eingefügt werden:
Frame label="Mobilfunktelefone" icon="network" {
Text item=MOB188_BT label="Handy Daniel [MAP(praesenz.map):%s]" icon="present"
Text item=MOB137_BT label="Handy Tina [MAP(praesenz.map):%s]" icon="present"
}
Das hier konfigurierten Symbole “present” und “network” müssen ebenfalls zuvor bereitgestellt werden, indem sie in den Ordner “/usr/share/openhab/webapps/images/” kopiert werden. Die Einbindung an dieser Stelle macht jedoch noch wenig Sinn, am Ende des Artikels wird die Einbindung einer Präsenzerkennung gezeigt, die jedes Gerät auf mehrfache Arten auf eine Anwesenheit prüft.
Ausgabe übersetzen
Die dazugehörige Übersetzungsdatei “praesenz.map” umfasst folgenden Inhalt:
[themify_box style=”rounded announcement” ]Update
Leider gibt es zur Zeit Probleme bei der Art und Weise, wie Java als nicht priviligierter Benutzer die Erreichbarkeit via TCP/IP prüft.
Daher nutzen wir in dieser Anleitung nicht das Addon “network-health“, was naheliegend wäre, sondern erstellen ein eigenes Script.[/themify_box]
Für die Prüfung der Erreichbarkeit eines Netzwerkteilnehmers erstellen wir uns ein neues, kleines Bash-Script: “/scripts/ping.sh”
#!/bin/bash
if [ -z "$1" ] ;then
echo "So geht das nicht"
exit 1;
fi
ping -c1 $1 > /dev/null
if [ $? -ne 0 ]; then
echo "OFF"
else
echo "ON"
fi
Wir erlauben die Ausführung des Scripts durch
chmod +x /scripts/ping.sh
und übertragen den Besitz an “openhab” durch
chown openhab: /scripts/ping.sh
Nun definieren wir die entsprechenden Items wie folgt:
Nun sind wir an einem Punkt angelangt, an dem wir feststellen können, ob ein Smartphone via Bluetooth oder WLAN erreichbar ist. Jetzt wäre es aber sinnvoll, diese beiden Informationen für jedes Gerät zu kombinieren, um mit zwei Methoden die Präsenz eines Geräts festzustellen. Dazu führen wir die beiden Werte in ein neues Item zusammen.
Dummy-Item definieren
Dazu benötigen wir zunächst ein sogenanntes Dummy-Item, das nur innerhalb von openHAB existiert und von außen weder geschaltet noch dessen Wert verändert wird:
Doch wenn nicht durch eine Änderung eines externen Zustandes, wie kann dieses Item nun “geschaltet” werden?
Zusammenführende Regeln erstellen
Dazu erstellen wir uns Regeln, die beispielsweise das Item “MOB188” auf “ON” setzen, wenn entweder das Item “MOB188_WLAN” oder “MOB188_BT” aktiv ist. Anders ausgedrückt reicht es, wenn das Smartphone entweder per WLAN oder Bluetooth erreichbar ist. Dann wird das Dummy-Item “MOB188” ebenfalls auf “ON” gesetzt. Andersherum wird das Item “MOB188” auf “OFF” gesetzt wenn das Smartphone weder per WLAN noch via Bluetooth erreicht werden konnte.
rule "Daniel ist Zuhause"
when
Item MOB188_WLAN changed to ON or
Item MOB188_BT changed to ON
then
postUpdate(MOB188, ON)
end
rule "Daniel ist nicht mehr Zuhause"
when
Item MOB188_WLAN changed to OFF or
Item MOB188_BT changed to OFF
then
if(MOB188_WLAN.state == OFF && MOB188_BT.state == OFF) {
postUpdate(MOB188, OFF)
}
end
Noch mehr kombinieren
Dieser Schritt lässt sich natürlich wiederholen und es sind Verschachtelungen in unendlicher Tiefe möglich, zumindest so tief, wie man es selbst noch überblicken kann:
rule "Irgendjemand ist zuhause"
when
Item MOB188 changed to ON or
Item MOB137 changed to ON
then
postUpdate(PRAESENZ, ON)
sendCommand(SPRINGBRUNNEN, ON)
end
rule "Niemand ist mehr zuhause"
when
Item MOB188 changed to OFF or
Item MOB137 changed to OFF
then
if(MOB188.state == OFF && MOB137.state == OFF) {
postUpdate(PRAESENZ, OFF)
sendCommand(SPRINGBRUNNEN, OFF)
}
end
In diesem Beispiel wurde zuvor ein weiteres Dummy-Item definiert:
Switch PRAESENZ
Diese beiden Regeln aktualisieren das Item “PRAESENZ” je nach dem, ob eins der beiden vorhandenen Mobilfunktelefone anwesend ist oder nicht. Zudem wird bei einer festgestellten Präsenz einer der beiden beispielhaften Personen der Springbrunnen ein- und bei Abwesenheit aller Personen wieder ausgeschaltet.
Darstellung in der Sitemap
Die beiden Mobilfunktelefone dieser Anleitung binden wir nun in Form der kombinierten Präsenzermittlung wie folgt in die Sitemap ein:
Frame label="Mobilfunktelefone" icon="network" {
Text item=MOB188 label="Handy Daniel [MAP(praesenz.map):%s]" icon="present"
Text item=MOB137 label="Handy Tina [MAP(praesenz.map):%s]" icon="present"
}
openHAB :: Präsenzerkennung via Bluetooth und Ping
Verfügbare Artikel zu openHAB
Inhaltsverzeichnis
[themify_box style=”rounded” ]In diesem Artikel verwendetes Zubehör
Präsenzerkennung mittels Bluetooth
Einrichtung auf dem Raspberry Pi
Auf unserem Raspberry Pi, welcher mit der IP-Adresse “192.168.23.235” konfiguriert wurde, haben wir zunächst alle Schritte aus dieser Anleitung ausgeführt und sind in der Lage, lokal vom Raspberry Pi aus Bluetooth Endgeräte mittels L2-Ping zu erreichen. Alternativ kann der Bluetooth-Stick auch am openHAB-Server selbst betrieben werden, wenn bei diesem ein Anschließen von USB-Geräten möglich ist.
Ist der Betrieb des Bluetooth-Adapters sichergestellt, erstellen wir nun auf dem Raspberry ein Bash-Script mit folgendem Inhalt:
Das Script könnte nun bereits auf dem Raspberry per Hand gestartet werden. Dazu müssen lediglich zuvor alle notwendigen Bluetooth-MAC-Adressen im Script hinterlegt und die zu prüfende Nummer als Parameter beim Starten des Scripts übergeben werden. Als Beispiel möchte ich die Präsenz von Tinas Mobilfunktelefon feststellen:
Hier scheint wohl entweder:
Einrichtung auf dem openHAB-Server
Wie auch bei vielen anderen hier zu findenden openHAB-Anleitungen benötigen wir hierbei jeweils ein Script auf dem Raspberry sowie auch auf dem openHAB-Server. Das erstere wurde an diesem Punkt der Anleitung bereits umgesetzt, widmen wir uns also dem Bash-Script auf dem Server. Dies gestaltet sich etwas weniger umfangreich mit folgenden Zeilen des neuen Scripts “/scripts/bt.sh“:
Wir erlauben die Ausführung des Scripts durch
und übertragen den Besitz an “openhab” durch
Dieses Script bewirkt nur, dass das Script auf der Himbeere remote via SSH ausgeführt wird. Ein Test vom openHAB-Server aus sollte das gleiche Ergebnis wie auf dem Raspberry selbst liefern:
Das Item definieren
Nun erstellen wir für die beiden Smartphones unseres Beispielszenarios zwei entsprechende Item-Definitionen in der passenden Konfigurationsdatei von openHAB:
Auch in diesem Fall nutzen wir erneut das Addon “exec“, welches wir mittels
installieren.
Integration in die Sitemap
Anschließend können diese Items bereits in die Sitemap eingefügt werden:
Das hier konfigurierten Symbole “present” und “network” müssen ebenfalls zuvor bereitgestellt werden, indem sie in den Ordner “/usr/share/openhab/webapps/images/” kopiert werden. Die Einbindung an dieser Stelle macht jedoch noch wenig Sinn, am Ende des Artikels wird die Einbindung einer Präsenzerkennung gezeigt, die jedes Gerät auf mehrfache Arten auf eine Anwesenheit prüft.
Ausgabe übersetzen
Die dazugehörige Übersetzungsdatei “praesenz.map” umfasst folgenden Inhalt:
Präsenzerkennung mittels WLAN
Die Network-Health Items definieren
[themify_box style=”rounded announcement” ]Update
Leider gibt es zur Zeit Probleme bei der Art und Weise, wie Java als nicht priviligierter Benutzer die Erreichbarkeit via TCP/IP prüft.
Daher nutzen wir in dieser Anleitung nicht das Addon “network-health“, was naheliegend wäre, sondern erstellen ein eigenes Script.[/themify_box]
Für die Prüfung der Erreichbarkeit eines Netzwerkteilnehmers erstellen wir uns ein neues, kleines Bash-Script: “/scripts/ping.sh”
Wir erlauben die Ausführung des Scripts durch
und übertragen den Besitz an “openhab” durch
Nun definieren wir die entsprechenden Items wie folgt:
Kombinierte Präsenzerkennung
Nun sind wir an einem Punkt angelangt, an dem wir feststellen können, ob ein Smartphone via Bluetooth oder WLAN erreichbar ist. Jetzt wäre es aber sinnvoll, diese beiden Informationen für jedes Gerät zu kombinieren, um mit zwei Methoden die Präsenz eines Geräts festzustellen. Dazu führen wir die beiden Werte in ein neues Item zusammen.
Dummy-Item definieren
Dazu benötigen wir zunächst ein sogenanntes Dummy-Item, das nur innerhalb von openHAB existiert und von außen weder geschaltet noch dessen Wert verändert wird:
Doch wenn nicht durch eine Änderung eines externen Zustandes, wie kann dieses Item nun “geschaltet” werden?
Zusammenführende Regeln erstellen
Dazu erstellen wir uns Regeln, die beispielsweise das Item “MOB188” auf “ON” setzen, wenn entweder das Item “MOB188_WLAN” oder “MOB188_BT” aktiv ist. Anders ausgedrückt reicht es, wenn das Smartphone entweder per WLAN oder Bluetooth erreichbar ist. Dann wird das Dummy-Item “MOB188” ebenfalls auf “ON” gesetzt. Andersherum wird das Item “MOB188” auf “OFF” gesetzt wenn das Smartphone weder per WLAN noch via Bluetooth erreicht werden konnte.
Noch mehr kombinieren
Dieser Schritt lässt sich natürlich wiederholen und es sind Verschachtelungen in unendlicher Tiefe möglich, zumindest so tief, wie man es selbst noch überblicken kann:
In diesem Beispiel wurde zuvor ein weiteres Dummy-Item definiert:
Diese beiden Regeln aktualisieren das Item “PRAESENZ” je nach dem, ob eins der beiden vorhandenen Mobilfunktelefone anwesend ist oder nicht. Zudem wird bei einer festgestellten Präsenz einer der beiden beispielhaften Personen der Springbrunnen ein- und bei Abwesenheit aller Personen wieder ausgeschaltet.
Darstellung in der Sitemap
Die beiden Mobilfunktelefone dieser Anleitung binden wir nun in Form der kombinierten Präsenzermittlung wie folgt in die Sitemap ein:
Dies wird nun so oder so ähnlich dargestellt:
Verwandte Artikel: