FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: kumue am 23 Dezember 2016, 14:28:32

Titel: DOIF initialisiert sich nicht selbst
Beitrag von: kumue am 23 Dezember 2016, 14:28:32
ich habe folgendes DOIF zum Test
([14:23]) (set dummy on,set $SELF initialize)
Leider setzt es sich nicht selbst auf initialize, der STATE bleibt auf cmd_1.

Ist das nicht vorgesehen ?


list do_test
Internals:
   CFGFN
   DEF        ([14:23]) (set dummy on,set $SELF initialize)
   NAME       do_test
   NR         13598
   NTFY_ORDER 50-do_test
   STATE      cmd_1
   TYPE       DOIF
   Helper:
     Dblog:
       Cmd:
         Mydblog:
           TIME       1482498948.41724
           VALUE      0
       State:
         Mydblog:
           TIME       1482498948.41724
           VALUE      initialized
   Readings:
     2016-12-23 14:23:00   cmd             1
     2016-12-23 14:23:00   cmd_event       timer_1
     2016-12-23 14:23:00   cmd_nr          1
     2016-12-23 14:23:00   state           cmd_1
     2016-12-23 14:23:00   timer_1_c1      24.12.2016 14:23:00
   Condition:
     0          DOIF_time_once($hash,$hash->{timer}{0},$wday,"")
   Days:
   Devices:
   Do:
     0:
       0          set dummy on,set do_test initialize
   Helper:
     event      timer_1
     globalinit 1
     last_timer 1
     sleeptimer -1
     timerdev
     timerevent timer_1
     timereventsState
     triggerDev
     timerevents:
       timer_1
     triggerEvents:
       timer_1
   Internals:
   Interval:
   Itimer:
   Localtime:
     0          1482585780
   Readings:
   Realtime:
     0          14:23:00
   Regexp:
   State:
   Time:
     0          14:23:00
   Timecond:
     0          0
   Timer:
     0          0
   Timers:
     0           0
   Triggertime:
     1482585780:
       localtime  1482585780
       Hash:
Attributes:
   DbLogExclude .*


Frohes Fest in die Runde !
Titel: Antw:DOIF initialisiert sich nicht selbst
Beitrag von: Damian am 23 Dezember 2016, 14:35:46
Zitat von: kumue am 23 Dezember 2016, 14:28:32
ich habe folgendes DOIF zum Test
([14:23]) (set dummy on,set $SELF initialize)
Leider setzt es sich nicht selbst auf initialize, der STATE bleibt auf cmd_1.

Ist das nicht vorgesehen ?


list do_test
Internals:
   CFGFN
   DEF        ([14:23]) (set dummy on,set $SELF initialize)
   NAME       do_test
   NR         13598
   NTFY_ORDER 50-do_test
   STATE      cmd_1
   TYPE       DOIF
   Helper:
     Dblog:
       Cmd:
         Mydblog:
           TIME       1482498948.41724
           VALUE      0
       State:
         Mydblog:
           TIME       1482498948.41724
           VALUE      initialized
   Readings:
     2016-12-23 14:23:00   cmd             1
     2016-12-23 14:23:00   cmd_event       timer_1
     2016-12-23 14:23:00   cmd_nr          1
     2016-12-23 14:23:00   state           cmd_1
     2016-12-23 14:23:00   timer_1_c1      24.12.2016 14:23:00
   Condition:
     0          DOIF_time_once($hash,$hash->{timer}{0},$wday,"")
   Days:
   Devices:
   Do:
     0:
       0          set dummy on,set do_test initialize
   Helper:
     event      timer_1
     globalinit 1
     last_timer 1
     sleeptimer -1
     timerdev
     timerevent timer_1
     timereventsState
     triggerDev
     timerevents:
       timer_1
     triggerEvents:
       timer_1
   Internals:
   Interval:
   Itimer:
   Localtime:
     0          1482585780
   Readings:
   Realtime:
     0          14:23:00
   Regexp:
   State:
   Time:
     0          14:23:00
   Timecond:
     0          0
   Timer:
     0          0
   Timers:
     0           0
   Triggertime:
     1482585780:
       localtime  1482585780
       Hash:
Attributes:
   DbLogExclude .*


Frohes Fest in die Runde !

Der hat sich bestimmt initialisiert. Nach der Ausführung des Befehlszweigs wird der entsprechende Zustand (hier: cmd_1) gesetzt. Hast du etwas anders erwartet?
Titel: Antw:DOIF initialisiert sich nicht selbst
Beitrag von: kumue am 23 Dezember 2016, 14:48:11
Erwartet hatte ich, daß es dann wieder auf initalize steht (state/STATE)

ich habe es mal mit dem wait-Attribut versucht..., dummy wird auf on gesetzt, 30sec später der zweite Befehlsteil ausgeführt, aber der Staus geht nicht auf initialize

list do_test
Internals:
   CFGFN
   DEF        ([14:40]) (set dummy on) (set $SELF initialize)
   NAME       do_test
   NR         13598
   NTFY_ORDER 50-do_test
   STATE      cmd_1
   TYPE       DOIF
   Helper:
     Dblog:
       Cmd:
         Mydblog:
           TIME       1482498948.41724
           VALUE      0
       State:
         Mydblog:
           TIME       1482498948.41724
           VALUE      initialized
   Readings:
     2016-12-23 14:40:30   cmd             1.2
     2016-12-23 14:40:30   cmd_event       timer_1
     2016-12-23 14:40:30   cmd_nr          1
     2016-12-23 14:40:30   cmd_seqnr       2
     2016-12-23 14:40:30   state           cmd_1
     2016-12-23 14:40:00   timer_1_c1      24.12.2016 14:40:00
     2016-12-23 14:40:30   wait_timer      no timer
   Condition:
     0          DOIF_time_once($hash,$hash->{timer}{0},$wday,"")
   Days:
   Devices:
   Do:
     0:
       0          set dummy on
       1          set do_test initialize
   Helper:
     event      timer_1
     globalinit 1
     last_timer 1
     sleepdevice timer_1
     sleepsubtimer -1
     sleeptimer -1
     timerdev
     timerevent timer_1
     timereventsState
     triggerDev
     triggerEventsState
     timerevents:
       timer_1
     triggerEvents:
       timer_1
   Internals:
   Interval:
   Itimer:
   Localtime:
     0          1482586800
   Readings:
   Realtime:
     0          14:40:00
   Regexp:
   State:
   Time:
     0          14:40:00
   Timecond:
     0          0
   Timer:
     0          0
   Timers:
     0           0
   Triggertime:
     1482586800:
       localtime  1482586800
       Hash:
Attributes:
   DbLogExclude .*
   wait       0,30


So würde es ja morgen um 14.40 Uhr nicht wieder triggern, da do always nicht gesetzt ist... oder ?
Titel: Antw:DOIF initialisiert sich nicht selbst
Beitrag von: Damian am 23 Dezember 2016, 14:52:57
Zitat von: kumue am 23 Dezember 2016, 14:48:11
Erwartet hatte ich, daß es dann wieder auf initalize steht (state/STATE)

ich habe es mal mit dem wait-Attribut versucht..., dummy wird auf on gesetzt, 30sec später der zweite Befehlsteil ausgeführt, aber der Staus geht nicht auf initialize

list do_test
Internals:
   CFGFN
   DEF        ([14:40]) (set dummy on) (set $SELF initialize)
   NAME       do_test
   NR         13598
   NTFY_ORDER 50-do_test
   STATE      cmd_1
   TYPE       DOIF
   Helper:
     Dblog:
       Cmd:
         Mydblog:
           TIME       1482498948.41724
           VALUE      0
       State:
         Mydblog:
           TIME       1482498948.41724
           VALUE      initialized
   Readings:
     2016-12-23 14:40:30   cmd             1.2
     2016-12-23 14:40:30   cmd_event       timer_1
     2016-12-23 14:40:30   cmd_nr          1
     2016-12-23 14:40:30   cmd_seqnr       2
     2016-12-23 14:40:30   state           cmd_1
     2016-12-23 14:40:00   timer_1_c1      24.12.2016 14:40:00
     2016-12-23 14:40:30   wait_timer      no timer
   Condition:
     0          DOIF_time_once($hash,$hash->{timer}{0},$wday,"")
   Days:
   Devices:
   Do:
     0:
       0          set dummy on
       1          set do_test initialize
   Helper:
     event      timer_1
     globalinit 1
     last_timer 1
     sleepdevice timer_1
     sleepsubtimer -1
     sleeptimer -1
     timerdev
     timerevent timer_1
     timereventsState
     triggerDev
     triggerEventsState
     timerevents:
       timer_1
     triggerEvents:
       timer_1
   Internals:
   Interval:
   Itimer:
   Localtime:
     0          1482586800
   Readings:
   Realtime:
     0          14:40:00
   Regexp:
   State:
   Time:
     0          14:40:00
   Timecond:
     0          0
   Timer:
     0          0
   Timers:
     0           0
   Triggertime:
     1482586800:
       localtime  1482586800
       Hash:
Attributes:
   DbLogExclude .*
   wait       0,30


So würde es ja morgen um 14.40 Uhr nicht wieder triggern, da do always nicht gesetzt ist... oder ?

Wie schon geschrieben wird nach der Ausführung des Befehlszweigs der Zustand gesetzt und nicht vorher, da dieser im Befehlszweig vom User abgefragt werden kann. Damit wirst du es nicht schaffen innerhalb des selben Moduls den Zustand selbst zu beeinflussen.
Titel: Antw:DOIF initialisiert sich nicht selbst
Beitrag von: kumue am 23 Dezember 2016, 15:01:43
Hintergrund des Ganzen: Ein Dash Button, der mehrere short events absetzt.

Das DOIF dazu:
(["^SW_Dash_05:short"]) (msg 1 blablabla)

Ist do always gesetzt, bekomme ich eben auch mehrere Messages, was natürlich nicht gewollt ist.
Deshalb habe ich do always weggelassen. Auch Tests mit event-min-interval waren nicht vielversprechend.

Nun dachte ich mir, daß das DOIF sich ja nach 1min wieder selbst initilisieren kann.
(["^SW_Dash_05:short"]) (msg 1 blablabla) (set $SELF initialize)
wait 0,60


Workaround derzeit: Ein at, welches das DOIF nachts wieder auf initialize setzt.
Titel: Antw:DOIF initialisiert sich nicht selbst
Beitrag von: Per am 23 Dezember 2016, 15:15:15
1. Müsste das nicht
set [$SELF] initialize
heißen?
2. Was, wenn du mit cmdState ...|initialize arbeitest?
3. Was ist mit cmdPause?
Titel: Antw:DOIF initialisiert sich nicht selbst
Beitrag von: kumue am 23 Dezember 2016, 15:29:22
Zitat von: Per am 23 Dezember 2016, 15:15:15
1. Müsste das nicht
set [$SELF] initialize
heißen?
2. Was, wenn du mit cmdState ...|initialize arbeitest?
3. Was ist mit cmdPause?

Mit set [$SELF] initialize kommt FM
DO_SW_Dash_05: set cmd_1_1 initialize: Please define cmd_1_1 first

Die anderen Attribute schau ich mir an.
Danke schon mal.
Titel: Antw:DOIF initialisiert sich nicht selbst
Beitrag von: kumue am 23 Dezember 2016, 15:55:47
Zitat von: Per am 23 Dezember 2016, 15:15:15
3. Was ist mit cmdPause?

Mit cmdPause und noch do always funktioniert es  ;)

Danke !