DOIF soll nur auf Event reagieren

Begonnen von T3mplate, 22 Juni 2017, 14:12:49

Vorheriges Thema - Nächstes Thema

T3mplate

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?

Damian

Wie der Name checkReadingEvent schon sagt, gilt das für Readings und nicht für Stati, daher einfach das Reading [ZW_Eingangstuer:state] abfragen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

T3mplate

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.