checkReadingEvent - was mache ich falsch?

Begonnen von der_oBi, 20 Oktober 2018, 23:11:53

Vorheriges Thema - Nächstes Thema

der_oBi

Hier das list vom DOIF. Getriggert wurde über "setreading bla test3 1".

Internals:
   DEF        ([bla:test] == 1) () DOELSEIF ([bla:test2] == 1) ()
   FUUID      5d655e38-f33f-a49e-3319-5009a29e254782e3
   MODEL      FHEM
   NAME       doif_test
   NR         373
   NTFY_ORDER 50-doif_test
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2019-09-01 10:18:01   Device          bla
     2019-09-01 10:18:01   cmd             1
     2019-09-01 10:18:01   cmd_event       bla
     2019-09-01 10:18:01   cmd_nr          1
     2019-09-01 06:48:46   e_bla_test      1
     2019-08-27 18:47:35   e_bla_test2     1
     2019-08-27 18:45:44   mode            enabled
     2019-09-01 10:18:01   state           cmd_1
   Regex:
     accu:
     cond:
       bla:
         0:
           test       ^bla$:^test:
         1:
           test2      ^bla$:^test2:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'bla','test') == 1
     1          ::ReadingValDoIf($hash,'bla','test2') == 1
   devices:
     0           bla
     1           bla
     all         bla
   do:
     0:
       0         
     1:
       0         
     2:
   helper:
     event      test3: 1
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   bla
     timerevent test3: 1
     triggerDev bla
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: bla
       state: cmd_1
     timerevents:
       test3: 1
     timereventsState:
       test3: 1
     triggerEvents:
       test3: 1
     triggerEventsState:
       test3: 1
   internals:
   itimer:
   perlblock:
   readings:
     all         bla:test bla:test2
   trigger:
   uiState:
   uiTable:
Attributes:
   checkReadingEvent 1
   checkall   all
   do         always
   room       Homekit

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

der_oBi

Sieht gut aus! Dankeschön!
Werde es nun die nächsten Tage mal genau im Auge behalten und berichten.

der_oBi

Hi Damian,

also bisher funktioniert alles wie gewünscht! Prima!

Ich habe jetzt erst gesehen, dass das THRESHOLD Modul auch aus Deiner Feder kommt.
Genau ein solches reading (nämlich der sensor_value) hat mir ja erst die Probleme gemacht. Daher muss ich jetzt mal fragen:
Wieso kann man beim THRESHOLD eigentlich keine event-on-... Attribute setzen?
Sonst hätte ich nämlich einfach den sensor_value von jeglichen Events ausschließen können.

Damian

Zitat von: der_oBi am 02 September 2019, 19:17:22
Hi Damian,

also bisher funktioniert alles wie gewünscht! Prima!

Ich habe jetzt erst gesehen, dass das THRESHOLD Modul auch aus Deiner Feder kommt.
Genau ein solches reading (nämlich der sensor_value) hat mir ja erst die Probleme gemacht. Daher muss ich jetzt mal fragen:
Wieso kann man beim THRESHOLD eigentlich keine event-on-... Attribute setzen?
Sonst hätte ich nämlich einfach den sensor_value von jeglichen Events ausschließen können.

THRESHOLD ist ein relativ altes Modul. Es war mein erstes Modul, da kannte ich die Möglichkeiten von event-on... noch nicht.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

der_oBi

schade.

Die DOIF-Version (mit dem NOTIFYDEV Filter) wird nun aber noch nicht "offiziell" per Update verteilt, oder?

Damian

Zitat von: der_oBi am 03 September 2019, 16:52:16
schade.

Die DOIF-Version (mit dem NOTIFYDEV Filter) wird nun aber noch nicht "offiziell" per Update verteilt, oder?

Noch nicht, wenn sich keine Auffälligkeiten zeigen, möchte ich sie bald einchecken.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

der_oBi

Eventuell hätte ich eine Auffälligkeit gefunden  :-\

Obwohl ich in zwei Bedingungen einen Fensterkontakt mit vorangestelltem Fragezeichen abfrage, triggert mein DOIF auch auf den Fensterkontakt:


Internals:
   DEF        ( [f_rollo_nacht] == 1 and [?Fenster_EG_HWR:state] eq "closed" )
( set Rollo_EG_HWR off )

DOELSEIF
( [f_rollo_nacht] == 1 and [?Fenster_EG_HWR:state] ne "closed" )
( set Rollo_EG_HWR dim [Rollo_EG_HWR:dim_Lueften,10] )

DOELSEIF
( [f_rollo_nacht] == 0 and [f_beschattung:nord] == 1 and [rollo_settings_beschattung:status_eg] eq "aktiv" and [Waermebed_EG_HWR] eq "nein" )
( set Rollo_EG_HWR dim [Rollo_EG_HWR:dim_Schatten,20]  )

DOELSE
( set Rollo_EG_HWR on )
   FUUID      5c44afd5-f33f-a49e-8045-67ac6816ebe3a231
   MODEL      FHEM
   NAME       di_Rollo_EG_HWR
   NOTIFYDEV  global,f_rollo_nacht,Fenster_EG_HWR,f_beschattung,rollo_settings_beschattung,Waermebed_EG_HWR
   NR         189
   NTFY_ORDER 50-di_Rollo_EG_HWR
   STATE      Nacht
   TYPE       DOIF
   READINGS:
     2019-09-04 06:13:21   Device          Fenster_EG_HWR
     2019-09-04 06:13:21   cmd             1
     2019-09-04 06:13:21   cmd_event       Fenster_EG_HWR
     2019-09-04 06:13:21   cmd_nr          1
     2019-09-04 06:13:06   mode            enabled
     2019-09-04 06:13:21   state           Nacht
   Regex:
     accu:
     cond:
       Fenster_EG_HWR:
         0:
           state      ^Fenster_EG_HWR$:^state:
         1:
           state      ^Fenster_EG_HWR$:^state:
       Waermebed_EG_HWR:
         2:
           &STATE     ^Waermebed_EG_HWR$
       f_beschattung:
         2:
           nord       ^f_beschattung$:^nord:
       f_rollo_nacht:
         0:
           &STATE     ^f_rollo_nacht$
         1:
           &STATE     ^f_rollo_nacht$
         2:
           &STATE     ^f_rollo_nacht$
       rollo_settings_beschattung:
         2:
           status_eg  ^rollo_settings_beschattung$:^status_eg:
   attr:
     cmdState:
       0:
         Nacht
       1:
         Lüften
       2:
         Beschattung
       3:
         Tag
     wait:
     waitdel:
   condition:
     0           ::InternalDoIf($hash,'f_rollo_nacht','STATE') == 1 and ::ReadingValDoIf($hash,'Fenster_EG_HWR','state') eq "closed"
     1           ::InternalDoIf($hash,'f_rollo_nacht','STATE') == 1 and ::ReadingValDoIf($hash,'Fenster_EG_HWR','state') ne "closed"
     2           ::InternalDoIf($hash,'f_rollo_nacht','STATE') == 0 and ::ReadingValDoIf($hash,'f_beschattung','nord') == 1 and ::ReadingValDoIf($hash,'rollo_settings_beschattung','status_eg') eq "aktiv" and ::InternalDoIf($hash,'Waermebed_EG_HWR','STATE') eq "nein"
   do:
     0:
       0           set Rollo_EG_HWR off
     1:
       0           set Rollo_EG_HWR dim [Rollo_EG_HWR:dim_Lueften,10]
     2:
       0           set Rollo_EG_HWR dim [Rollo_EG_HWR:dim_Schatten,20] 
     3:
       0           set Rollo_EG_HWR on
   helper:
     event      closed
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   Fenster_EG_HWR
     timerevent closed
     triggerDev Fenster_EG_HWR
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: Fenster_EG_HWR
       state: Nacht
     timerevents:
       closed
     timereventsState:
       state: closed
     triggerEvents:
       closed
     triggerEventsState:
       state: closed
   internals:
     all         f_rollo_nacht:STATE Waermebed_EG_HWR:STATE
   readings:
     all         f_beschattung:nord rollo_settings_beschattung:status_eg
   trigger:
   uiState:
   uiTable:
Attributes:
   checkReadingEvent 1
   checkall   all
   cmdState   Nacht|Lüften|Beschattung|Tag
   devStateIcon Nacht:weather_moon_phases_8 Lüften:vent_ambient_air Beschattung:weather_summer Tag:weather_sun
   event-on-change-reading state
   group      DOIF_Rollos
   room       Rollos

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

der_oBi

Soeben getestet. Bedingungen mit vorangestelltem Fragezeichen führen nicht mehr zur Triggerung!

Top!

der_oBi

Mal eine Frage zum Verständnis:
wenn ich mit CheckReadingEvent auf den state (reading, nicht internal) triggern möchte, muss ich dann [xyz:state] als Trigger definieren, oder reicht auch [xyz]?
Scheint für mich so, als müsste ich in diesem Falle auch auf ...:state triggern, sonst kommen doch wieder auch alle anderen readings als Trigger durch.

Damian

Zitat von: der_oBi am 12 September 2019, 07:03:06
Mal eine Frage zum Verständnis:
wenn ich mit CheckReadingEvent auf den state (reading, nicht internal) triggern möchte, muss ich dann [xyz:state] als Trigger definieren, oder reicht auch [xyz]?
Scheint für mich so, als müsste ich in diesem Falle auch auf ...:state triggern, sonst kommen doch wieder auch alle anderen readings als Trigger durch.

[xyz] ist eine Statusabfrage, sie wird immer bei allen Events des Devices getriggert, unabhängig vom Attribut CheckReadingEvent - das war immer so und wird auch so bleiben.

CheckReadingsEvent hat nur einen Einfluss auf Readingangaben der Form: [device:reading]
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

der_oBi

Ok, dachte ich mir. Wenn man es weiß ist alles gut :-)


Gesendet von iPhone mit Tapatalk

Damian

Zitat von: der_oBi am 12 September 2019, 07:55:59
Ok, dachte ich mir. Wenn man es weiß ist alles gut :-)


Gesendet von iPhone mit Tapatalk

Das steht aber auch so in der Commandref zu Statusabfragen:

ZitatAnwendungsbeispiel: Einfache Ereignissteuerung, "remotecontrol" ist hier ein Device, es wird in eckigen Klammern angegeben. Ausgewertet wird der Status des Devices - nicht das Event.

define di_garage DOIF ([remotecontrol] eq "on") (set garage on) DOELSEIF ([remotecontrol] eq "off") (set garage off)

Das Modul wird getriggert, sobald das angegebene Device hier "remotecontrol" ein Event erzeugt. Das geschieht, wenn irgendein Reading oder der Status von "remotecontrol" aktualisiert wird.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF