DOIF bekommt Änderung von state nicht mit, wenn es selbst schaltet?

Begonnen von Sheridan, 18 April 2016, 09:17:11

Vorheriges Thema - Nächstes Thema

Sheridan

Hi Ellert,

hier ist der Log. Ich habe das ifTest erstmal nochmal definiert, damit es wieder im "Initialized" Zustand ist. Dann ging es beim ersten Mal, beim zweiten Mal ging das Licht auch aus, danach war es dann aber in cmd_1:


2016.04.20 10:28:08.519 1: 1461140888.51931 - ifTest: cmd: 0
2016.04.20 10:28:08.521 1: 1461140888.52132 - ifTest: initialized
==> Hier manuell eingeschaltet (set knxOG7SteckdoseBesprechung on)
2016.04.20 10:28:20.791 5: sending Cw470301
2016.04.20 10:28:20.829 1: 1461140900.82969 - knxOG7SteckdoseBesprechung: setG1: on
2016.04.20 10:28:20.831 1: 1461140900.83145 - knxOG7SteckdoseBesprechung: on
2016.04.20 10:28:20.840 1: 1461140900.84074 - ifTest: wait_timer: 20.04.2016 10:28:30 cmd_1 knxOG7SteckdoseBesprechung
2016.04.20 10:28:30.873 1: 1461140910.87319 - ifTest: wait_timer: no timer
2016.04.20 10:28:30.881 5: sending Cw470300
2016.04.20 10:28:30.890 1: 1461140910.89038 - knxOG7SteckdoseBesprechung: setG1: off
2016.04.20 10:28:30.891 1: 1461140910.89153 - knxOG7SteckdoseBesprechung: off
2016.04.20 10:28:30.897 1: 1461140910.89698 - ifTest: wait_timer: 20.04.2016 10:28:31 cmd_2 knxOG7SteckdoseBesprechung
2016.04.20 10:28:30.906 1: 1461140910.90599 - ifTest: cmd_nr: 1
2016.04.20 10:28:30.907 1: 1461140910.90701 - ifTest: cmd: 1
2016.04.20 10:28:30.907 1: 1461140910.90795 - ifTest: cmd_event: knxOG7SteckdoseBesprechung
2016.04.20 10:28:30.908 1: 1461140910.90879 - ifTest: cmd_1
2016.04.20 10:28:31.398 1: 1461140911.39808 - ifTest: wait_timer: no timer
2016.04.20 10:28:31.405 1: 1461140911.40518 - ifTest: cmd_nr: 2
2016.04.20 10:28:31.406 1: 1461140911.40615 - ifTest: cmd: 2
2016.04.20 10:28:31.407 1: 1461140911.40698 - ifTest: cmd_event: knxOG7SteckdoseBesprechung
2016.04.20 10:28:31.407 1: 1461140911.40776 - ifTest: cmd_2
==> Hier manuell eingeschaltet (set knxOG7SteckdoseBesprechung on)
2016.04.20 10:28:34.791 5: sending Cw470301
2016.04.20 10:28:34.800 1: 1461140914.80024 - knxOG7SteckdoseBesprechung: setG1: on
2016.04.20 10:28:34.802 1: 1461140914.80198 - knxOG7SteckdoseBesprechung: on
2016.04.20 10:28:34.811 1: 1461140914.81142 - ifTest: wait_timer: 20.04.2016 10:28:44 cmd_1 knxOG7SteckdoseBesprechung
2016.04.20 10:28:44.845 1: 1461140924.84538 - ifTest: wait_timer: no timer
2016.04.20 10:28:44.853 5: sending Cw470300
2016.04.20 10:28:44.862 1: 1461140924.86265 - knxOG7SteckdoseBesprechung: setG1: off
2016.04.20 10:28:44.864 1: 1461140924.86435 - knxOG7SteckdoseBesprechung: off
2016.04.20 10:28:44.877 1: 1461140924.87753 - ifTest: cmd_nr: 1
2016.04.20 10:28:44.879 1: 1461140924.87939 - ifTest: cmd: 1
2016.04.20 10:28:44.881 1: 1461140924.88125 - ifTest: cmd_event: knxOG7SteckdoseBesprechung
2016.04.20 10:28:44.882 1: 1461140924.88285 - ifTest: cmd_1
FHEM auf RasPi 4 mit CUL (MAX), CUL (IT), JeeLink (LaCrosse), JeeLink (EC3000), DuoFern, Razberry (ZWave) sowie Fritz!Box, Enigma2, Squeezebox, Google Assistant (inkl. Nest Hub 2)
FHEM auf RasPi 3 mit CUL (MAX), TUL (KNX), CUBe (MAX), EnOceanPi (EnOcean)

Ellert

Zitat2016.04.20 10:28:44.862 1: 1461140924.86265 - knxOG7SteckdoseBesprechung: setG1: off
2016.04.20 10:28:44.864 1: 1461140924.86435 - knxOG7SteckdoseBesprechung: off
hier müsste der 2. wait-Timer gesetzt werden
2016.04.20 10:28:44.877 1: 1461140924.87753 - ifTest: cmd_nr: 1
2016.04.20 10:28:44.879 1: 1461140924.87939 - ifTest: cmd: 1
2016.04.20 10:28:44.881 1: 1461140924.88125 - ifTest: cmd_event: knxOG7SteckdoseBesprechung
2016.04.20 10:28:44.882 1: 1461140924.88285 - ifTest: cmd_1

Der zweite Timer wird nicht gesetzt.

Die Bedingungen des DOIF werden bei jedem Geräte-Event geprüft. Es gibt 2 "knxOG7SteckdoseBesprechung: setG1: off" und "knxOG7SteckdoseBesprechung: off".
KNX kenne ich nicht. Ist "setG1" ein Reading oder steht im "state" "setG1: off"?

Um auszuschliessen, dass die beiden Events sich beeinflussen, würde ich mal versuchen auf Events zu triggern

(["^knxOG7SteckdoseBesprechung$:^on$"]) (set knxOG7SteckdoseBesprechung off) DOELSEIF (["^knxOG7SteckdoseBesprechung$:^off$"]) ()

Sheridan

Hallo Ellert,

setG1 ist ein Reading. KNX ist EIB/KNX/Instabus. Mit dem Events ergibt sich das gleiche Bild: Erstes Mal gehts, dann nicht mehr:


Internals:
   DEF        (["^knxOG7SteckdoseBesprechung$:^on$"]) (set knxOG7SteckdoseBesprechung off) DOELSEIF (["^knxOG7SteckdoseBesprechung$:^off$"]) ()
   NAME       ifTest
   NR         276
   NTFY_ORDER 50-ifTest
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-04-20 15:42:21   Device          knxOG7SteckdoseBesprechung
     2016-04-20 15:42:21   cmd             1
     2016-04-20 15:42:21   cmd_event       knxOG7SteckdoseBesprechung
     2016-04-20 15:42:21   cmd_nr          1
     2016-04-20 15:42:11   matched_event_c1_1 on
     2016-04-20 15:42:21   matched_event_c2_1 off
     2016-04-20 15:42:21   state           cmd_1
     2016-04-20 15:42:21   wait_timer      no timer
   Condition:
     0          EventDoIf('^knxOG7SteckdoseBesprechung$',$hash,'^on$',0)
     1          EventDoIf('^knxOG7SteckdoseBesprechung$',$hash,'^off$',0)
   Devices:
   Do:
     0:
       0          set knxOG7SteckdoseBesprechung off
     1:
       0
   Helper:
     event      off
     globalinit 1
     last_timer 0
     sleepdevice knxOG7SteckdoseBesprechung
     sleepsubtimer -1
     sleeptimer -1
     timerdev   knxOG7SteckdoseBesprechung
     timerevent off
     triggerDev knxOG7SteckdoseBesprechung
     timerevents:
       setG1: off
       off
     timereventsState:
       setG1: off
       state: off
     triggerEvents:
       setG1: off
       off
     triggerEventsState:
       setG1: off
       state: off
   Internals:
   Itimer:
   Readings:
   Regexp:
     0:
       0          ^knxOG7SteckdoseBesprechung$:^on$
     1:
       0          ^knxOG7SteckdoseBesprechung$:^off$
     All:
       0          ^knxOG7SteckdoseBesprechung$:^on$
       1          ^knxOG7SteckdoseBesprechung$:^off$
   State:
   Trigger:
Attributes:
   selftrigger 1
   wait       10:0.5


Vereinfachter Test:


define dmyTest dummy
define ifDmyTest DOIF ([dmyTest] eq "on") (set dmyTest off) DOELSEIF ([dmyTest] eq "off") ()
attr ifDmyTest selftrigger 1
attr ifDmyTest wait 10:0.5
define dmyEventLog notify ifDmyTest|dmyTest {Log 1, "dmyEventLog@".gettimeofday()." - $NAME: $EVENT"}


Dann


set dmyTest on


Warten, bis es aus ist und erneut


set dmyTest on


Danach ist ifDmyTest wieder in cmd_1 trotz off und ein weiteres


set dmyTest on


wird nicht mehr abgeschaltet:

Internals:
   CFGFN
   DEF        ([dmyTest] eq "on") (set dmyTest off) DOELSEIF ([dmyTest] eq "off") ()
   NAME       ifDmyTest
   NR         345
   NTFY_ORDER 50-ifDmyTest
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-04-20 15:51:19   Device          dmyTest
     2016-04-20 15:50:36   cmd             1
     2016-04-20 15:50:36   cmd_event       dmyTest
     2016-04-20 15:50:36   cmd_nr          1
     2016-04-20 15:51:19   e_dmyTest_STATE on
     2016-04-20 15:50:36   state           cmd_1
     2016-04-20 15:50:36   wait_timer      no timer
   Condition:
     0          InternalDoIf($hash,'dmyTest','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "on"
     1          InternalDoIf($hash,'dmyTest','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "off"
   Devices:
     0           dmyTest
     1           dmyTest
     all         dmyTest
   Do:
     0:
       0          set dmyTest off
     1:
       0
   Helper:
     event      on
     globalinit 1
     last_timer 0
     sleepdevice dmyTest
     sleepsubtimer -1
     sleeptimer -1
     timerdev   dmyTest
     timerevent on
     triggerDev dmyTest
     timerevents:
       on
     timereventsState:
       state: on
     triggerEvents:
       on
     triggerEventsState:
       state: on
   Internals:
     0           dmyTest:STATE
     1           dmyTest:STATE
     all         dmyTest:STATE
   Itimer:
   Readings:
   Regexp:
     0:
     1:
     All:
   State:
   Trigger:
Attributes:
   selftrigger 1
   wait       10:0.5



2016.04.20 15:50:01.814 1: dmyEventLog@1461160201.81446 - ifDmyTest: cmd: 0
2016.04.20 15:50:01.815 1: dmyEventLog@1461160201.81549 - ifDmyTest: initialized
2016.04.20 15:50:08.050 1: dmyEventLog@1461160208.05004 - dmyTest: on
2016.04.20 15:50:08.056 1: dmyEventLog@1461160208.0562 - ifDmyTest: wait_timer: 20.04.2016 15:50:18 cmd_1 dmyTest
2016.04.20 15:50:18.072 1: dmyEventLog@1461160218.07244 - ifDmyTest: wait_timer: no timer
2016.04.20 15:50:18.080 1: dmyEventLog@1461160218.0808 - dmyTest: off
2016.04.20 15:50:18.087 1: dmyEventLog@1461160218.08731 - ifDmyTest: wait_timer: 20.04.2016 15:50:18 cmd_2 dmyTest
2016.04.20 15:50:18.098 1: dmyEventLog@1461160218.0982 - ifDmyTest: cmd_nr: 1
2016.04.20 15:50:18.099 1: dmyEventLog@1461160218.09931 - ifDmyTest: cmd: 1
2016.04.20 15:50:18.100 1: dmyEventLog@1461160218.10026 - ifDmyTest: cmd_event: dmyTest
2016.04.20 15:50:18.101 1: dmyEventLog@1461160218.10115 - ifDmyTest: cmd_1
2016.04.20 15:50:18.604 1: dmyEventLog@1461160218.60405 - ifDmyTest: wait_timer: no timer
2016.04.20 15:50:18.612 1: dmyEventLog@1461160218.61276 - ifDmyTest: cmd_nr: 2
2016.04.20 15:50:18.613 1: dmyEventLog@1461160218.61382 - ifDmyTest: cmd: 2
2016.04.20 15:50:18.614 1: dmyEventLog@1461160218.61474 - ifDmyTest: cmd_event: dmyTest
2016.04.20 15:50:18.615 1: dmyEventLog@1461160218.61562 - ifDmyTest: cmd_2
2016.04.20 15:50:26.266 1: dmyEventLog@1461160226.2661 - dmyTest: on
2016.04.20 15:50:26.272 1: dmyEventLog@1461160226.27239 - ifDmyTest: wait_timer: 20.04.2016 15:50:36 cmd_1 dmyTest
2016.04.20 15:50:36.293 1: dmyEventLog@1461160236.29311 - ifDmyTest: wait_timer: no timer
2016.04.20 15:50:36.301 1: dmyEventLog@1461160236.30176 - dmyTest: off
2016.04.20 15:50:36.311 1: dmyEventLog@1461160236.31109 - ifDmyTest: cmd_nr: 1
2016.04.20 15:50:36.312 1: dmyEventLog@1461160236.31212 - ifDmyTest: cmd: 1
2016.04.20 15:50:36.313 1: dmyEventLog@1461160236.31303 - ifDmyTest: cmd_event: dmyTest
2016.04.20 15:50:36.313 1: dmyEventLog@1461160236.31391 - ifDmyTest: cmd_1
2016.04.20 15:51:19.623 1: dmyEventLog@1461160279.62325 - dmyTest: on
FHEM auf RasPi 4 mit CUL (MAX), CUL (IT), JeeLink (LaCrosse), JeeLink (EC3000), DuoFern, Razberry (ZWave) sowie Fritz!Box, Enigma2, Squeezebox, Google Assistant (inkl. Nest Hub 2)
FHEM auf RasPi 3 mit CUL (MAX), TUL (KNX), CUBe (MAX), EnOceanPi (EnOcean)

Ellert

Ich habe es bei mir ausprobiert, es funktioniert auch nicht, gleiches Verhalten wie bei Dir. Mit dem Trigger auf "$SELF" klappt es jedoch:

([dmyTest] eq "on") (set dmyTest off) DOELSEIF ([$SELF] eq "cmd_1")

Da ich immer [$SELF] benutze, war ich sicher, dass auch [<Gerätename>] funktioniert. Ich meine es ging mit einer früheren Version schon.


Sheridan

Hallo Ellert,

vielen Dank für die Vorschläge. Ich werde es dann mal mit dem $SELF probieren, hoffe aber, dass das in DOIF noch geändert wird und es dann so funktioniert wie es eigentlich "intuitiv" wäre.

Den Thread hier kann man dann aber wohl zumachen.
FHEM auf RasPi 4 mit CUL (MAX), CUL (IT), JeeLink (LaCrosse), JeeLink (EC3000), DuoFern, Razberry (ZWave) sowie Fritz!Box, Enigma2, Squeezebox, Google Assistant (inkl. Nest Hub 2)
FHEM auf RasPi 3 mit CUL (MAX), TUL (KNX), CUBe (MAX), EnOceanPi (EnOcean)