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
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