Ich habe mir ein DOIF gebastelt, welches erkennen soll, ob die Wohnungstür von außen oder von innen geöffnet wurde.
Anbei das list des device:
Internals:
DEF ([ZW_Eingangstuer] eq "open" and [ZW_Eingangstuer:alarm_HomeSecurity:sec] > 40) ({fhem ("set push msg device=Stefan title=Haus Wohnungstuer von außen geöffnet.")}, setreading Push_Wohnungstuer offen_aussen 1) DOELSEIF
([ZW_Eingangstuer] eq "open") {fhem ("set push msg device=Stefan title=Haus Wohnungstuer geöffnet. ")} DOELSEIF
([ZW_Eingangstuer:&STATE] eq "closed") {fhem ("set push msg device=Stefan title=Haus Eingangstür geschlossen.")}
NAME Push_Wohnungstuer
NR 482
NTFY_ORDER 50-Push_Wohnungstuer
STATE cmd_3
TYPE DOIF
Readings:
2017-06-22 13:13:13 Device ZW_Eingangstuer
2017-06-22 12:05:55 cmd 3
2017-06-22 12:05:55 cmd_event ZW_Eingangstuer
2017-06-22 12:05:55 cmd_nr 3
2017-06-22 13:13:13 e_ZW_Eingangstuer_STATE closed
2017-06-22 13:13:13 e_ZW_Eingangstuer_alarm_HomeSecurity Motion Detection - Unknown Location, notificationIsOn
2017-06-22 07:52:40 offen_aussen 1
2017-06-22 12:05:55 state cmd_3
Condition:
0 InternalDoIf($hash,'ZW_Eingangstuer','STATE') eq "open" and ReadingSecDoIf('ZW_Eingangstuer','alarm_HomeSecurity') > 40
1 InternalDoIf($hash,'ZW_Eingangstuer','STATE') eq "open"
2 InternalDoIf($hash,'ZW_Eingangstuer','STATE') eq "closed"
Devices:
0 ZW_Eingangstuer
1 ZW_Eingangstuer
2 ZW_Eingangstuer
all ZW_Eingangstuer
Do:
0:
0 {fhem ("set push msg device=Stefan title=Haus Wohnungstuer von außen geöffnet.")}, setreading Push_Wohnungstuer offen_aussen 1
1:
0 {fhem ("set push msg device=Stefan title=Haus Wohnungstuer geöffnet. ")}
2:
0 {fhem ("set push msg device=Stefan title=Haus Eingangstür geschlossen.")}
3:
Helper:
event alarm_HomeSecurity: Motion Detection - Unknown Location, notificationIsOn
globalinit 1
last_timer 0
sleeptimer -1
timerdev ZW_Eingangstuer
timerevent alarm_HomeSecurity: Motion Detection - Unknown Location, notificationIsOn
triggerDev ZW_Eingangstuer
Bm:
Doif_attr:
cnt 2
dmx 0
mAr
mTS
max 0
tot 0
Doif_notify:
cnt 32449
dmx 0
mTS 21.06. 14:01:09
max 40093
tot 90392
mAr:
HASH(0x35084c0)
HASH(0x31e80b8)
Doif_set:
cnt 105
dmx 0
mAr
mTS
max 0
tot 0
timerevents:
alarm_HomeSecurity: Motion Detection - Unknown Location, notificationIsOn
timereventsState:
alarm_HomeSecurity: Motion Detection - Unknown Location, notificationIsOn
triggerEvents:
alarm_HomeSecurity: Motion Detection - Unknown Location, notificationIsOn
triggerEventsState:
alarm_HomeSecurity: Motion Detection - Unknown Location, notificationIsOn
Internals:
0 ZW_Eingangstuer:STATE
1 ZW_Eingangstuer:STATE
2 ZW_Eingangstuer:STATE
all ZW_Eingangstuer:STATE
Itimer:
Readings:
0 ZW_Eingangstuer:alarm_HomeSecurity
all ZW_Eingangstuer:alarm_HomeSecurity
Regexp:
0:
1:
2:
All:
State:
State:
Trigger:
Attributes:
checkReadingEvent 1
icon it_wifi
room Wohnzimmer-BG
Mein Problem ist, dass das nicht nur auf das Event "open" oder "closed" des Türsensors reagiert, sondern wie bei DOIF üblich auf die Änderung eines beliebigen Readings.
Folglich passier es ständig, dass man z.B. von außen die Tür öffnet und der innere Sensor keine Bewegung registriert hat -> Folge: Tür von außen geöffnet.
Danach tritt man in die Wohnung, der Sensor meldet eine Bewegung und es triggert Condition 2 -> Tür von innen geöffnet.
Ich habe mich dazu belesen und das Attribut "checkReadingEvent 1" soll mein gewünschtes Verhalten bringen.
Macht es aber nicht.
Findet jemand den Fehler?
Wie der Name checkReadingEvent schon sagt, gilt das für Readings und nicht für Stati, daher einfach das Reading [ZW_Eingangstuer:state] abfragen.
Zitat von: Damian am 22 Juni 2017, 15:51:59
Wie der Name checkReadingEvent schon sagt, gilt das für Readings und nicht für Stati, daher einfach das Reading [ZW_Eingangstuer:state] abfragen.
Ich war mir sicher, dass ich diesen Thread noch vor der ersten Antwort gelöscht hatte. Grml.
Ich hatte sehr viele Kombinationen versucht, auch die von dir beschriebene. Leider Erfolglos.
Das hier funktioniert jetzt:
[ZW_Eingangstuer:?state]
Trotzdem vielen Dank.