Zeitgesteuert das Licht ein und ausschalten können einfache Schaltzeituhren schon seit Jahren. Praktischer und stromsparend ist es jedoch wenn das Licht nur eingeschaltet wird, wenn auch jemand zu Hause ist.
Die Anwesenheitserkennung lässt sich relativ einfach in openhab einrichten, hierfür muss zunächst das Addon org.openhab.binding.networkhealth-1.6.1.jar in dem addons Verzeichniss abgelegt werden. Mit Hilfe des bindings wird der Netzwerkstatus einer URL / IP überprüft.
Um zu prüfen ob sich ein Handy im WLAN befindet, reicht der folgende Eintrag in einer items Datei:
Switch Hermann {nh="android-000029388sjsdjd"}
Wenn sich das Handy im WLAN befindet, wird der Status auf on gesetzt.
Mehrere Handys
Da es in einem Haushalt meistens mehrere Handy gibt, ist es Hilfreich die Handys gesammelt abzufragen. Wenn nun Eins der hinterlegten Handys im WLAN gefunden wird, wird der Anwesenheitsstatus auf On gesetzt.
Für die Abfrage und das setzen des Anwesenheitsstatus gibt es bereits eine sehr gute Anleitung unter https://github.com/openhab/openhab/wiki/Samples-Tricks#check-presence-by-detecting-wifi-phonestablets.
Aktor nur bei Anwesenheit schalten
Die Aktoren sollen nun nur zwischen 16 Uhr und 23 Uhr eingeschaltet werden, jedoch nur wenn jemand zu Hause ist. Gleichzeitig sollte es eine einfach Möglichkeit geben, die automatische Schaltung zu deaktivieren.
Für das deaktivieren der Automatik habe ich den folgenden Switch in einer items Datei angelegt:
Switch FlurAutomatik "Automatik" (flur) {ON,OFF}
Für der schalten der Aktoren nutze ich folgende Regel:
rule Anwesend
when
Time cron "* */5 * * * ?"
then
if (now.getHourOfDay() >= 16 && now.getHourOfDay() <=22 && Presence.state == ON && FlurAutomatik.state == ON || now.getHourOfDay() >= 6 && now.getHourOfDay() <=8 && Presence.state == ON && FlurAutomatik.state == ON) {
if(fs203.state == OFF){
sendCommand(fs203, ON)
logInfo("PresenceCheck", "LICHT AN" )
}
} else {
if(fs203.state == ON && FlurAutomatik.state == ON){
sendCommand(fs203, OFF)
logInfo("PresenceCheck", "LICHT AUS" )
}
}
end
Die if Abfrage if(fs203.state == ON/OFF){
wird benötigt, da ansonsten alle 5 Minuten ein f20 Signal abgesetzt wird und es dann dazu kommt das die Signale nicht verarbeitet werden.
In der openhab.log erhält man dann folgende Fehlermeldung:
2015-01-26 21:20:30.093 [WARN ] [o.o.i.t.c.i.AbstractCULHandler] - (LOVF) Limit Overflow: Last message lost. You are using more than 1% transmitting time. Reduce the number of rf messages
Pingback: [openhab2] Anwesenheitserkennung | itbasic