Kürzlich stelle ich eine Möglichkeit vor, ein günstiges RFID-Lesegerät an den Raspberry anzuschließen. In diesem Beitrag, der als Fortsetzung gedacht ist, geht es um die Integration in OpenHAB. Wir erstellen entsprechende Items, binden diese in die Sitemap ein und erstellen die ein oder andere Regel.
Wir beginnen direkt mit der Definition unserer neuen Items. Dazu nutze ich die bereits vorhandene Datei „/etc/openhab/configurations/praesenz.items“ und ergänze diese mit folgenden Zeilen:
Hier haben wir zunächst für jeden Benutzer ein Item, dass vom Script auf unserer Himbeere befüllt wird. Zudem habe ich einen weiteren Schalter definiert, um den Anwesenheitszustand manuell in der Sitemap zu übersteuern. Schlussendlich kommen noch Items dazu, die die Zeit der letzten Statusänderung speichern.
Einbindung in die Sitemap
Nun binden wir unsere neuen Items an gewünschter Stelle in die Sitemap ein. Ich habe dies so realisiert, dass für jeden Nutzer in Frame dargestellt wird. Zudem wird angezeigt, seit wann der jeweilige Nutzer an- bzw. abwesend ist. Das Icon „present“ ist bereits bei der Installation von OpenHAB dabei.
Text item=RFID_GRUPPE label="Gesamtpräsenz [MAP(praesenz.map):%s]" icon="present" {
Frame label="Daniel" {
Text item=RFID_DANIEL label="Daniel RFID [MAP(praesenz.map):%s]" icon="present"
Text item=DANIEL_ABWESEND visibility=[RFID_DANIEL==OFF]
Text item=DANIEL_ANWESEND visibility=[RFID_DANIEL==ON]
Switch item=RFID_MANUELL_DANIEL label="Daniel manuell schalten [MAP(praesenz.map):%s]" icon="present"
}
Frame label="Tina" {
Text item=RFID_TINA label="Tina RFID [MAP(praesenz.map):%s]" icon="present"
Text item=TINA_ABWESEND visibility=[RFID_TINA==OFF]
Text item=TINA_ANWESEND visibility=[RFID_TINA==ON]
Switch item=RFID_MANUELL_TINA label="Tina manuell schalten [MAP(praesenz.map):%s]" icon="present"
}
}
Übersetzungsdatei erstellen
Damit uns die Zustände der Präsenzen in der Sitemap nicht als „ON“ oder „OFF“ dargestellt werden, erstellen wir die Datei „/ect/openhab/configurations/transform/praesenz.map“ mit folgendem Inhalt:
Falls ein Bewohner vergessen hat, sich beim Verlassen der Wohnung „auszustempeln“, habe ich in die Sitemap Schalter für das manuelle Übersteuern integriert. Da die Intelligenz jedoch diesmal nicht bei OpenHAB sondern bei der Himbeere liegt, an der das RFID-Lesegerät angeschlossen ist, müssen wir die Himbeere zum Schalten anweisen und dies nicht selbst durchführen. Dazu erstellen wir auf dem OpenHAB-Server ein neues Scripts „/scripts/rfid_manuell.sh“ mit folgendem Inhalt:
Nun erstellen wir die benötigten Regeln für die Präsenzerkennung.
//Externe Schalter
rule "Gruppenpraesenz umschalten an"
when
Item RFID_GRUPPE_SWITCH received command ON
then
postUpdate(RFID_GRUPPE, ON)
end
rule "Gruppenpraesenz umschalten aus"
when
Item RFID_GRUPPE_SWITCH received command OFF
then
postUpdate(RFID_GRUPPE, OFF)
end
rule "Daniel umschalten an"
when
Item RFID_DANIEL_SWITCH received command ON
then
postUpdate(RFID_DANIEL, ON)
end
rule "Daniel umschalten aus"
when
Item RFID_DANIEL_SWITCH received command OFF
then
postUpdate(RFID_DANIEL, OFF)
end
rule "Tina umschalten an"
when
Item RFID_TINA_SWITCH received command ON
then
postUpdate(RFID_TINA, ON)
end
rule "Tina umschalten aus"
when
Item RFID_TINA_SWITCH received command OFF
then
postUpdate(RFID_TINA, OFF)
end
Zudem erstellen wir Regeln, damit die Uhrzeit der Aktion festgehalten wird:
//############### Abwesend seit ########################
rule "Daniel verlaesst die Wohnung"
when
Item RFID_DANIEL changed from ON to OFF
then
var local_time = java::util::Calendar::getInstance(TimeZone::getTimeZone("Europe/Berlin"))
postUpdate(DANIEL_ABWESEND, new DateTimeType(local_time))
postUpdate(RFID_MANUELL_DANIEL, OFF)
end
rule "Tina verlaesst die Wohnung"
when
Item RFID_TINA changed from ON to OFF
then
var local_time = java::util::Calendar::getInstance(TimeZone::getTimeZone("Europe/Berlin"))
postUpdate(TINA_ABWESEND, new DateTimeType(local_time))
postUpdate(RFID_MANUELL_TINA, OFF)
end
//############### Anwesend seit ########################
rule "Daniel betritt die Wohnung"
when
Item RFID_DANIEL changed from OFF to ON
then
var local_time = java::util::Calendar::getInstance(TimeZone::getTimeZone("Europe/Berlin"))
postUpdate(DANIEL_ANWESEND, new DateTimeType(local_time))
postUpdate(RFID_MANUELL_DANIEL, ON)
end
rule "Tina betritt die Wohnung"
when
Item RFID_TINA changed from OFF to ON
then
var local_time = java::util::Calendar::getInstance(TimeZone::getTimeZone("Europe/Berlin"))
postUpdate(TINA_ANWESEND, new DateTimeType(local_time))
postUpdate(RFID_MANUELL_TINA, ON)
end
//######################################################
Hier können zudem benutzerdefinierte Aktionen hinzugefügt werden. Beispielsweise schalten meine Monitor ab, wenn ich gehe und wieder ein, wenn ich nach Hause komme. Ein elektrischer Duftspender ist nur aktiv, wenn irgendjemand zuhause ist. Diese Gruppenschaltungen habe ich in der gleichen Datei so realisiert:
//#########################
//Gruppenschaltungen
rule "Niemand ist zuhause"
when
Item RFID_GRUPPE changed from ON to OFF
then
sendMail("alle@example.net", "Wohnung ist verlassen", "In der Wohnung konnte keine Praesenz festgestellt werden. Ueberwachung wird aktiviert.")
createTimer(now.plusSeconds(30)) [|
for (Switch : grp_AUSBEIABWESEND.members) {
sendCommand(Switch, OFF)
Thread::sleep(2000)
}
for (Switch : grp_ANBEIABWESEND.members) {
sendCommand(Switch, ON)
Thread::sleep(2000)
}
]
end
rule "Irgendjemand ist zuhause"
when
Item RFID_GRUPPE changed from OFF to ON
then
sendMail("alle@example.net", "Präsenz erkannt", "Eine Praesenz wurde erkannt. Ueberwachung wird deaktiviert.")
for (Switch : grp_AUSBEIANWESEND.members) {
sendCommand(Switch, OFF)
Thread::sleep(2000)
}
for (Switch : grp_ANBEIANWESEND.members) {
sendCommand(Switch, ON)
Thread::sleep(2000)
}
end
Wenn alle Bewohner das Haus verlassen, wird für Mitglied der Gruppe „grp_ANBEIABWESEND“ eingeschaltet. Zwischen den Schaltungen wird eine 2-sekündige Pause eingelegt. Für die Gruppen
grp_AUSBEIABWESEND
grp_ANBEIANWESEND
grp_AUSBEIANWESEND
verhält es sich natürlich entsprechend des Gruppennamens. Zudem wird jeweils eine Mail gesendet, wenn niemand mehr anwesend und wenn jemand aus der Gruppe anwesend ist.
Abschluss
Wenn wir alles richtig konfiguriert haben, zeigt die Sitemap nun wie folgt die Präsenzen an:
RFID-Lesegerät in OpenHAB einbinden
Kürzlich stelle ich eine Möglichkeit vor, ein günstiges RFID-Lesegerät an den Raspberry anzuschließen. In diesem Beitrag, der als Fortsetzung gedacht ist, geht es um die Integration in OpenHAB. Wir erstellen entsprechende Items, binden diese in die Sitemap ein und erstellen die ein oder andere Regel.
Verfügbare Artikel zu openHAB
Items definieren
Wir beginnen direkt mit der Definition unserer neuen Items. Dazu nutze ich die bereits vorhandene Datei „/etc/openhab/configurations/praesenz.items“ und ergänze diese mit folgenden Zeilen:
Hier haben wir zunächst für jeden Benutzer ein Item, dass vom Script auf unserer Himbeere befüllt wird. Zudem habe ich einen weiteren Schalter definiert, um den Anwesenheitszustand manuell in der Sitemap zu übersteuern. Schlussendlich kommen noch Items dazu, die die Zeit der letzten Statusänderung speichern.
Einbindung in die Sitemap
Nun binden wir unsere neuen Items an gewünschter Stelle in die Sitemap ein. Ich habe dies so realisiert, dass für jeden Nutzer in Frame dargestellt wird. Zudem wird angezeigt, seit wann der jeweilige Nutzer an- bzw. abwesend ist. Das Icon „present“ ist bereits bei der Installation von OpenHAB dabei.
Übersetzungsdatei erstellen
Damit uns die Zustände der Präsenzen in der Sitemap nicht als „ON“ oder „OFF“ dargestellt werden, erstellen wir die Datei „/ect/openhab/configurations/transform/praesenz.map“ mit folgendem Inhalt:
Script für manuelles Schalten
Falls ein Bewohner vergessen hat, sich beim Verlassen der Wohnung „auszustempeln“, habe ich in die Sitemap Schalter für das manuelle Übersteuern integriert. Da die Intelligenz jedoch diesmal nicht bei OpenHAB sondern bei der Himbeere liegt, an der das RFID-Lesegerät angeschlossen ist, müssen wir die Himbeere zum Schalten anweisen und dies nicht selbst durchführen. Dazu erstellen wir auf dem OpenHAB-Server ein neues Scripts „/scripts/rfid_manuell.sh“ mit folgendem Inhalt:
Dem Script erlauben wir die Ausführung mit
und übertragen den Besitz an OpenHAB mit
Regeln erstellen
Nun erstellen wir die benötigten Regeln für die Präsenzerkennung.
Zudem erstellen wir Regeln, damit die Uhrzeit der Aktion festgehalten wird:
Hier können zudem benutzerdefinierte Aktionen hinzugefügt werden. Beispielsweise schalten meine Monitor ab, wenn ich gehe und wieder ein, wenn ich nach Hause komme. Ein elektrischer Duftspender ist nur aktiv, wenn irgendjemand zuhause ist. Diese Gruppenschaltungen habe ich in der gleichen Datei so realisiert:
Wenn alle Bewohner das Haus verlassen, wird für Mitglied der Gruppe „grp_ANBEIABWESEND“ eingeschaltet. Zwischen den Schaltungen wird eine 2-sekündige Pause eingelegt. Für die Gruppen
verhält es sich natürlich entsprechend des Gruppennamens. Zudem wird jeweils eine Mail gesendet, wenn niemand mehr anwesend und wenn jemand aus der Gruppe anwesend ist.
Abschluss
Wenn wir alles richtig konfiguriert haben, zeigt die Sitemap nun wie folgt die Präsenzen an:
Verwandte Beiträge
In diesem Beitrag wurde der 1wire-Sensor DS18B20 vorgestellt und erläutert, wie man diesen an einem…
Kürzlich stellte ich in einem Artikel die Möglichkeit vor, einen LG-Smart-TV mit einer Linux-Kommandozeile zu steuern. Zur…
In diesem Beitrag habe ich gezeigt, wie wir einen Bewegungssensor Typ PIR am Raspberry anschließen…
Alle Schalter, Kontakte oder Schwimmer aus diesem Artikel können in das Hausautomatisierungssystem openHAB eingebunden werden. Nachdem openHAB…
Wie wir aus diesem Artikel wissen, können wir die recht günstigen Funksteckdosensets der Firma Brennenstuhl mit einem…