20. Die Anwesenheit (Stand 18.12.2018) |
Das intelligente Haus sollte wissen, wann der Hausherr abwesend ist und was seine Wünsche sind, wenn er zu Hause ist
Wenn das Haus leer ist, kann die Heizung herunter gedreht werden und wenn er anwesend ist, kann von Montag bis Freitag der Kaffee um 7 Uhr zubereitet sein. Am Sonntag soll für die Dame des Hauses um 9 Uhr der Rollladen geöffnet werden – aber nur wenn sie auch zu Hause ist. Ist nur der Herr des Hauses da, dann soll der Rollladen schon um 8 Uhr geöffnet werden und sind beide weg, dann soll er geschlossen bleiben. Der Phantasie sind da keine Grenzen gesetzt.
Ausgangspunkt ist ein Modul in FHEM namens RESIDENTS. Das stellt die Grundfunktionen zur Verfügung. Darüber hinaus gibt es das Modul ROOMMATE, welches man für jeden Bewohner definieren muss. Das habe ich anfänglich genutzt, mich dann aber entschieden, die Logik selbst zu programmieren, denn diese beiden Module sind zwar richtig gut, aber viel zu umfangreich für meine Anwendung. Die grundlegende Idee habe ich aber davon übenommen.
Welcher Status ist denn für meine liebe Ursula und mich jeweils individuell möglich?
Der Zustand des Hauses ergibt sich dann wie folgt:
Ursula |
home |
absent |
gone |
gotosleep |
asleep |
awoken |
home |
home |
home |
home |
home |
home |
home |
absent |
home |
absent |
absent |
gotosleep |
asleep |
awoken |
gone |
home |
absent |
gone |
gotosleep |
asleep |
awoken |
gotosleep |
home |
gotosleep |
gotosleep |
gotosleep |
asleep |
awoken |
asleep |
home |
asleep |
asleep |
asleep |
asleep |
awoken |
awoken |
home |
awoken |
awoken |
awoken |
awoken |
awoken |
Den Status des Hauses habe ich mit einem DOIF mit folgender Definition realisiert:
([uj_statusjuergen] eq "home" or [uj_statusursula] eq "home")
(set uj_statushaus home)
DOELSEIF ([uj_statusjuergen] eq "awoken" or [uj_statusursula] eq "awoken")
(set uj_statushaus awoken)
DOELSEIF ([uj_statusjuergen] eq "asleep" and [uj_statusursula] eq "asleep")
(set uj_statushaus asleep)
DOELSEIF ([uj_statusjuergen] eq "gotosleep" or [uj_statusursula] eq "gotosleep")
(set uj_statushaus gotosleep)
DOELSEIF ([uj_statusjuergen] eq "absent" or [uj_statusursula] eq "absent")
(set uj_statushaus absent)
DOELSEIF ([uj_statusjuergen] eq "gone" and [uj_statusursula] eq "gone")
(set uj_statushaus gone)
Ich habe nun für uns beide je 3 Taster an zentraler Stelle montiert. Damit kann jeder direkt die folgenden Zustände einstellen:
Praktischerweise gibt es von HomeMatic ein passendes Gerät.
Das grundlegende Vorgehen, dieses Gerät in FHEM zu integrieren ("paired"), brauche ich wohl nicht nochmals dokumentieren, es wäre einfach nur eine Wiederholung. Es gibt aber eine Besonderheit: wenn man dieses Gerät auch mit der virtuellen CCU "peered", dann bekommt man durch kurzes grünes Aufleuchten der kleinen LED auch eine optische Rückmeldung, dass der Befehl angekommen ist. Erreicht wird dies durch die Eingabe von
set xx_Zentrale_Btn2 peerChan 0 wk_jkommt single
wobei "wk_jkommt" nur eine der 6 Tasten ist. Das muss also für die anderen 5 Tasten entsprechend wiederholt werden. Damit ist die gesamte Definition wie folgt, auch hier gilt wieder, dass die meisten Attribute automatisch eingerichtet werden.
define wk_ujstatus CUL_HM 397340
attr wk_ujstatus IODev hmusb
attr wk_ujstatus IOgrp vccu
attr wk_ujstatus autoReadReg 4_reqStatus
attr wk_ujstatus expert 2_full
attr wk_ujstatus firmware 1.2
attr wk_ujstatus group Fernbedienung
attr wk_ujstatus model HM-PB-6-WM55
attr wk_ujstatus room Residents
attr wk_ujstatus serialNr MEQ0075327
attr wk_ujstatus subType remote
attr wk_ujstatus webCmd getConfig:clear msgEvents
define wk_jkommt CUL_HM 39734001
attr wk_jkommt group Fernbedienung
attr wk_jkommt model HM-PB-6-WM55
attr wk_jkommt peerIDs 00000000,2CC69902,
attr wk_jkommt room Residents
define wk_ukommt CUL_HM 39734002
attr wk_ukommt group Fernbedienung
attr wk_ukommt model HM-PB-6-WM55
attr wk_ukommt peerIDs 00000000,2CC69902,
attr wk_ukommt room Residents
define wk_jschlaeft CUL_HM 39734003
attr wk_jschlaeft group Fernbedienung
attr wk_jschlaeft model HM-PB-6-WM55
attr wk_jschlaeft peerIDs 00000000,2CC69902,
attr wk_jschlaeft room Residents
define wk_uschlaeft CUL_HM 39734004
attr wk_uschlaeft group Fernbedienung
attr wk_uschlaeft model HM-PB-6-WM55
attr wk_uschlaeft peerIDs 00000000,2CC69902,
attr wk_uschlaeft room Residents
define wk_jgeht CUL_HM 39734005
attr wk_jgeht group Fernbedienung
attr wk_jgeht model HM-PB-6-WM55
attr wk_jgeht peerIDs 00000000,2CC69902,
attr wk_jgeht room Residents
define wk_ugeht CUL_HM 39734006
attr wk_ugeht group Fernbedienung
attr wk_ugeht model HM-PB-6-WM55
attr wk_ugeht peerIDs 00000000,2CC69902,
attr wk_ugeht room Residents
Doch wie ergeben sich nun die anderen Zustände?
Programmiert habe ich das je Person mitels einem FHEM-Device namens "LightScene". Die 6 Szenen sind wie folgt definiert (das ? steht für u oder j):
Szene |
home |
absent |
gone |
gotosleep |
asleep |
awoken |
Berührfeld |
nosleep |
nosleep |
nosleep |
gotosleep |
asleep |
awoken |
Berührfeld |
nothome |
absent |
gone |
nothome |
nothome |
nothome |
Berührfeld |
home |
nothome |
nothome |
nothome |
nothome |
nothome |
Weitere "Devices" (wie z.B. Radio, Licht, FHEM-Variable, etc.) können bei Bedarf ergänzt werden.
weiter zu: 21. Der Wecker