Hauptmenü

DOIF: Frage zu attribut wait

Begonnen von Spartacus, 28 März 2016, 16:51:52

Vorheriges Thema - Nächstes Thema

Spartacus

Hallo,
habe folgendes DOIF gebaut.
Internals:
   DEF        ([EG.wz.TV.UE46ES8090]eq "disconnected" and
[?scene.EG.wz.Licht] eq "TV")
(set scene.EG.wz.Licht scene essen)(set EG.wz.DI.Stehlampe off)(set EG.ku.DI.DeckenSpot off)(set EG.wz.DI.Esstisch off)
   NAME       LichtAus
   NR         1050
   NTFY_ORDER 50-LichtAus
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-03-28 16:31:13   Device          EG.wz.TV.UE46ES8090
     2016-03-28 16:32:46   cmd_event       EG.wz.TV.UE46ES8090
     2016-03-28 16:32:46   cmd_nr          1
     2016-03-28 16:32:46   cmd_seqnr       4
     2016-03-28 16:31:13   e_EG.wz.TV.UE46ES8090_STATE disconnected
     2016-03-28 16:32:46   state           cmd_1
     2016-03-28 16:32:46   wait_timer      no timer
   Condition:
     0          InternalDoIf($hash,'EG.wz.TV.UE46ES8090','STATE','','',AttrVal($hash->{NAME},'notexist',undef))eq "disconnected" and InternalDoIf($hash,'scene.EG.wz.Licht','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "TV"
   Devices:
     0           EG.wz.TV.UE46ES8090
     all         EG.wz.TV.UE46ES8090
   Do:
     0:
       0          set scene.EG.wz.Licht scene essen
       1          set EG.wz.DI.Stehlampe off
       2          set EG.ku.DI.DeckenSpot off
       3          set EG.wz.DI.Esstisch off
     1:
   Helper:
     event      DISCONNECTED
     globalinit 1
     last_timer 0
     sleepdevice EG.wz.TV.UE46ES8090
     sleepsubtimer -1
     sleeptimer -1
     timerdev   EG.wz.TV.UE46ES8090
     timerevent DISCONNECTED
     triggerDev EG.wz.TV.UE46ES8090
     timerevents:
       DISCONNECTED
     triggerEvents:
       DISCONNECTED
   Internals:
     0           EG.wz.TV.UE46ES8090:STATE scene.EG.wz.Licht:STATE
     all         EG.wz.TV.UE46ES8090:STATE scene.EG.wz.Licht:STATE
   Itimer:
   Readings:
   Regexp:
     0:
     All:
   State:
   Trigger:
Attributes:
   room       99-Test
   wait       0,30,30,30


Ziel soll es sein, dass bei eingeschalteter LichtSzene "TV" direkt nach dem Ausschalten des TVs die Szene "essen" eingestellt wird und dann nach je 30s "Stehlampe", "Deckenspot" und "Esstisch" ausgeschaltet werden. In der Commandref steht, dass sich die Verzögerung auf den zuvor ausgeführten Befehl bezieht. Demnach schaltet die Stehlampe nach 30s, die Deckenspots nach 60s und die Esstischbeleuchtung nach 90s ab. Ist das so richtig verstanden? Denn diesen Absatz könnte man auch so verstehen, dass die 2te Sequenz nach 2s ausgeführt wird und nicht nach 3s.
Beispieldefinition bei mehreren DO-Blöcken mit mehreren Sequenzen:

DOIF (Bedingung1)
(set ...) ## erster Befehl der ersten Sequenz soll um eine Sekunde verzögert werden
(set ...) ## zweiter Befehl der ersten Sequenz soll um 2 Sekunden verzögert werden
DOELSEIF (Bedingung2)
(set ...) ## erster Befehl der zweiten Sequenz soll um 3 Sekunden verzögert werden
(set ...) ## zweiter Befehl der zweiten Sequenz soll um 0,5 Sekunden verzögert werden

attr <DOIF-module> wait 1,2:3,0.5



Danke und Gruß,
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Damian

Zitat von: Spartacus am 28 März 2016, 16:51:52
Ziel soll es sein, dass bei eingeschalteter LichtSzene "TV" direkt nach dem Ausschalten des TVs die Szene "essen" eingestellt wird und dann nach je 30s "Stehlampe", "Deckenspot" und "Esstisch" ausgeschaltet werden. In der Commandref steht, dass sich die Verzögerung auf den zuvor ausgeführten Befehl bezieht. Demnach schaltet die Stehlampe nach 30s, die Deckenspots nach 60s und die Esstischbeleuchtung nach 90s ab. Ist das so richtig verstanden? Denn diesen Absatz könnte man auch so verstehen, dass die 2te Sequenz nach 2s ausgeführt wird und nicht nach 3s.
Beispieldefinition bei mehreren DO-Blöcken mit mehreren Sequenzen:

DOIF (Bedingung1)
(set ...) ## erster Befehl der ersten Sequenz soll um eine Sekunde verzögert werden
(set ...) ## zweiter Befehl der ersten Sequenz soll um 2 Sekunden verzögert werden
DOELSEIF (Bedingung2)
(set ...) ## erster Befehl der zweiten Sequenz soll um 3 Sekunden verzögert werden
(set ...) ## zweiter Befehl der zweiten Sequenz soll um 0,5 Sekunden verzögert werden

attr <DOIF-module> wait 1,2:3,0.5



Danke und Gruß,
Christian

Das hast du richtig verstanden: "die Verzögerungszeit bezieht sich immer auf den vorherigen Befehl" (entspricht dem Verhalten eines Sleep-Befehl) - das hast du bestimmt an dem Verhalten deiner Definition bereits feststellen können.

Gruß

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