Hallo,
ich habe mir ein kleines DOIF gebaut, welches den Rolladen 2min zeitverzögert schließt, wenn im Garten die Gartenbeleuchtung abgeschaltet wird.
Internals:
CFGFN Config/01-Wohnzimmer.cfg
DEF ([?21:30-03:00] and [GA.ss.SA.Licht] eq "off") (set EG.wz.RO.links closes)
NAME di.01.EG.wz.RO.links
NR 832
NTFY_ORDER 50-di.01.EG.wz.RO.links
STATE initialized
TYPE DOIF
Readings:
2015-11-26 11:20:13 state initialized
2015-11-26 11:20:13 timer_1_c1 26.11.2015 21:30:00
2015-11-26 11:20:13 timer_2_c1 27.11.2015 03:00:00
2015-11-26 11:20:23 wait_timer no timer
Condition:
0 DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and InternalDoIf('GA.ss.SA.Licht','STATE','') eq "off"
Days:
Devices:
0 GA.ss.SA.Licht
all GA.ss.SA.Licht
Do:
0:
0 set EG.wz.RO.links closes
Helper:
globalinit 1
last_timer 2
sleeptimer -1
Internals:
0 GA.ss.SA.Licht:STATE
all GA.ss.SA.Licht:STATE
Itimer:
Realtime:
0 21:30:00
1 03:00:00
State:
Time:
0 21:30:00
1 03:00:00
Timecond:
0 0
1 0
Timer:
0 0
1 0
Timerfunc:
Attributes:
alias autom. Rolladen schließen
cmdState auto on
comment schließe Rolladen zeitverzögert nach Abschaltung des Gartenlichte,
nur zwischen 21:30 und 03:00
group Scripte
room 01-Wohnzimmer
wait 120
Das funktioniert soweit.
Jetzt habe ich ein Blockade. Ich möchte jetzt, das der cmdState sich so ändert, dass er mir zwischen 21:30 und 03:00 "auto on" und in der restlichen Zeit "auto off" anzeigt. Da ich nur ein Kommandozweig im DOIF habe, funktioniert das nicht. Kann mir jemand mal einen Tipp geben?
Spartacus
..würde ein leeres DOELSE am Ende setzen...
aus commandref DOIF
Zitat+ Es können beliebig viele DOELSEIF-Angaben gemacht werden, sie sind, wie DOELSE am Ende der Kette, optional
DOLESEIF muss dementsprechend nicht gesetzt werden, es kann ein leerer DOELSE sein.
([?21:30-03:00] and [GA.ss.SA.Licht] eq "off") (set EG.wz.RO.links closes) DOELSE
Hallo kumue,
super danke! Das war´s
Gruß,
Spartacus
Zitat von: Spartacus am 26 November 2015, 11:52:42
Hallo kumue,
super danke! Das war´s
Gruß,
Spartacus
Wundert mich aber, da ohne do always bei einer einzigen Bedingung der DOELSE-Fall (cmd_2) bei nicht Erfüllung der Bedingung immer gesetzt wird.
DOIF (...) (set bla on)
ist das Gleiche, wie
DOIF (...) (set bla on) DOELSE
wenn kein do always gesetzt wird.
Gruß
Damian
Hallo Damian,
Das heißt dann, dass man cmdState und devStateIcon auch bei nur einer Bedingung zwei Zustände zuordnen kann.
Das habe ich nicht probiert!
Christian
Zitat von: Spartacus am 26 November 2015, 22:29:09
Hallo Damian,
Das heißt dann, dass man cmdState und devStateIcon auch bei nur einer Bedingung zwei Zustände zuordnen kann.
Das habe ich nicht probiert!
Christian
ja, aber nur wenn das Attribut do always
nicht gesetzt ist.
Gruß
Damian
Hallo,
ich kriege das irgendwie nicht so hin, wie ich will. Es scheitert an der Visualisierung des DOIFs
Ziel soll es sein, dass der "autom.Shutdown" nur dann aktiviert wird(cmdState="on"), wenn die "autom. Gartenbeleuchtung" (Auto) aktiv ist.
Der Rolladen soll dann zeitverzögert (120s) schließen, wenn die GartenBeleuchtung (GartenLicht) abschaltet. Gleichzeitig wird der "autom. Shutdown" wieder deaktiviert(cmdState="off"). Damit soll sichergestellt sein, dass Rolladen und GartenLicht unabhängig gefahren/geschaltet werden können. "Auto" sich quasi der trigger für Shutdown-Automatik.
DEF:
([?Auto] eq "on" and [GartenLicht] eq "off")
(set Rollo close, set Auto off)
DOELSEIF ([Auto] eq "on")
DOELSEiF ([Auto] eq "off")
cmdState:
devStateIcon:
.*on:general_an@lightgreen .*off:general_aus@red
Hat jemand einen Tipp?
Christian
on|on|off
Spartacus.
P.S. AUTO ist ein dummy, welches in dem DOIF der Gartenbeleuchtung gesetzt wird.
Zitat von: Spartacus am 28 November 2015, 15:14:53
Hallo,
ich kriege das irgendwie nicht so hin, wie ich will. Es scheitert an der Visualisierung des DOIFs
Ziel soll es sein, dass der "autom.Shutdown" nur dann aktiviert wird(cmdState="on"), wenn die "autom. Gartenbeleuchtung" (Auto) aktiv ist.
Der Rolladen soll dann zeitverzögert (120s) schließen, wenn die GartenBeleuchtung (GartenLicht) abschaltet. Gleichzeitig wird der "autom. Shutdown" wieder deaktiviert(cmdState="off"). Damit soll sichergestellt sein, dass Rolladen und GartenLicht unabhängig gefahren/geschaltet werden können. "Auto" sich quasi der trigger für Shutdown-Automatik.
DEF:
([?Auto] eq "on" and [GartenLicht] eq "off")
(set Rollo close, set Auto off)
DOELSEIF ([Auto] eq "on")
DOELSEiF ([Auto] eq "off")
cmdState:
devStateIcon:
.*on:general_an@lightgreen .*off:general_aus@red
Hat jemand einen Tipp?
Christian
on|on|off
Spartacus.
P.S. AUTO ist ein dummy, welches in dem DOIF der Gartenbeleuchtung gesetzt wird.
Rekursionen werden mit dem aktuellen DOIF-Modul unterbunden.
set Auto off
triggert nicht das gleiche Modul, somit bleibt das Modul im ersten Zustand.
Gruß
Damian
Hallo Damian,
ne,ich glaube wir reden aneinander vorbei. Auto ist nur ein dummy der in einem anderen DOIF gesetzt wird.
Deshalb hier mal ein List:
Internals:
CFGFN Config/01-Wohnzimmer.cfg
DEF ([Auto] eq "on")
DOELSEIF
([Auto] eq "off")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set EG.wz.RO.links position 100 0, set Auto off)
NAME di.01.EG.wz.RO.links
NR 839
NTFY_ORDER 50-di.01.EG.wz.RO.links
STATE on
TYPE DOIF
Readings:
2015-11-30 20:43:49 Device Auto
2015-11-30 20:43:49 cmd_event Auto
2015-11-30 20:43:49 cmd_nr 1
2015-11-30 20:43:49 e_Auto_STATE on
2015-11-30 20:43:49 state on
Condition:
0 InternalDoIf('Auto','STATE','') eq "on"
1 InternalDoIf('Auto','STATE','') eq "off"
2 InternalDoIf('Auto','STATE','') eq "on" and InternalDoIf('GA.ss.SA.Licht','STATE','') eq "off"
Devices:
0 Auto
1 Auto
2 GA.ss.SA.Licht
all Auto GA.ss.SA.Licht
Do:
0:
0
1:
0
2:
0 set EG.wz.RO.links position 100 0, set Auto off
Helper:
globalinit 1
last_timer 0
sleeptimer -1
Internals:
0 Auto:STATE
1 Auto:STATE
2 GA.ss.SA.Licht:STATE
all Auto:STATE GA.ss.SA.Licht:STATE
Itimer:
Readings:
State:
Timerfunc:
Trigger:
Attributes:
alias autom. Rolladen schließen
cmdState on|off|off
comment schließe Rolladen zeitverzögert nach Abschaltung des Gartenlichte,
nur zwischen 21:30 und 02:30
devStateIcon .*on:general_an@lightgreen .*off:general_aus@red
group Scripte
icon fts_shutter_down
room 01-Wohnzimmer
wait 0:0:120
Im Prinzip funktioniert es ja wie es soll, und der Zustand des Moduls wird auch richtig angezeigt, allerdings mit einem Schönheitsfehler:
Wenn "GA.ss.SA.Licht" während des Wait-Timers wieder auf "on" geht, soll der Wait-Timer abgebrochen werden und die Aktionen " (set EG.wz.RO.links position 100 0, set Auto off)" abgebrochen werden.
Ich habe gedacht, dies mit "do resetwait" zu realisieren, aber das klappt nicht. In der Commandref steht: "Im Gegensatz zu do always wird ein Waittimer mit dem Attribut do resetwait auch dann zurückgesetzt, wenn die gleiche Bedingung wiederholt wahr wird." Aber offenbar verstehe ich den Sachverhalt falsch.
Bin ich hier auf dem falschen Dampfer?
Spartacus
Zitat von: Spartacus am 30 November 2015, 21:02:15
Hallo Damian,
ne,ich glaube wir reden aneinander vorbei. Auto ist nur ein dummy der in einem anderen DOIF gesetzt wird.
Deshalb hier mal ein List:
Internals:
CFGFN Config/01-Wohnzimmer.cfg
DEF ([Auto] eq "on")
DOELSEIF
([Auto] eq "off")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set EG.wz.RO.links position 100 0, set Auto off)
NAME di.01.EG.wz.RO.links
NR 839
NTFY_ORDER 50-di.01.EG.wz.RO.links
STATE on
TYPE DOIF
Readings:
2015-11-30 20:43:49 Device Auto
2015-11-30 20:43:49 cmd_event Auto
2015-11-30 20:43:49 cmd_nr 1
2015-11-30 20:43:49 e_Auto_STATE on
2015-11-30 20:43:49 state on
Condition:
0 InternalDoIf('Auto','STATE','') eq "on"
1 InternalDoIf('Auto','STATE','') eq "off"
2 InternalDoIf('Auto','STATE','') eq "on" and InternalDoIf('GA.ss.SA.Licht','STATE','') eq "off"
Devices:
0 Auto
1 Auto
2 GA.ss.SA.Licht
all Auto GA.ss.SA.Licht
Do:
0:
0
1:
0
2:
0 set EG.wz.RO.links position 100 0, set Auto off
Helper:
globalinit 1
last_timer 0
sleeptimer -1
Internals:
0 Auto:STATE
1 Auto:STATE
2 GA.ss.SA.Licht:STATE
all Auto:STATE GA.ss.SA.Licht:STATE
Itimer:
Readings:
State:
Timerfunc:
Trigger:
Attributes:
alias autom. Rolladen schließen
cmdState on|off|off
comment schließe Rolladen zeitverzögert nach Abschaltung des Gartenlichte,
nur zwischen 21:30 und 02:30
devStateIcon .*on:general_an@lightgreen .*off:general_aus@red
group Scripte
icon fts_shutter_down
room 01-Wohnzimmer
wait 0:0:120
Im Prinzip funktioniert es ja wie es soll, und der Zustand des Moduls wird auch richtig angezeigt, allerdings mit einem Schönheitsfehler:
Wenn "GA.ss.SA.Licht" während des Wait-Timers wieder auf "on" geht, soll der Wait-Timer abgebrochen werden und die Aktionen " (set EG.wz.RO.links position 100 0, set Auto off)" abgebrochen werden.
Ich habe gedacht, dies mit "do resetwait" zu realisieren, aber das klappt nicht. In der Commandref steht: "Im Gegensatz zu do always wird ein Waittimer mit dem Attribut do resetwait auch dann zurückgesetzt, wenn die gleiche Bedingung wiederholt wahr wird." Aber offenbar verstehe ich den Sachverhalt falsch.
Bin ich hier auf dem falschen Dampfer?
Spartacus
Ein laufender Timer kann nur zurückgesetzt werden, wenn der Status des Moduls wechselt. Evtl. ein DOELSE hinten dranhängen für diesen Fall.
Gruß
Damian
Hallo Damian,
ZitatEin laufender Timer kann nur zurückgesetzt werden, wenn der Status des Moduls wechselt. Evtl. ein DOELSE hinten dranhängen für diesen Fall.
Gruß
Damian
yep, das scheint es gewesen zu sein. Hier noch einmal meine Teststruktur:
Internals:
DEF ([Auto1] eq "on")
DOELSEIF
([Auto1] eq "off")
DOELSEIF
([?Auto1] eq "on" and [GartenLicht] eq "off")
(set Auto1 off) (set Rollo close)
DOELSE
NAME diRollo
NR 945
NTFY_ORDER 50-diRollo
STATE off
TYPE DOIF
Readings:
2015-12-01 13:49:37 Device GartenLicht
2015-12-01 13:49:37 cmd_event GartenLicht
2015-12-01 13:49:37 cmd_nr 4
2015-12-01 13:49:30 e_Auto1_STATE off
2015-12-01 13:49:37 e_GartenLicht_STATE on
2015-12-01 13:49:37 state off
2015-12-01 13:49:37 wait_timer no timer
Condition:
0 InternalDoIf('Auto1','STATE','') eq "on"
1 InternalDoIf('Auto1','STATE','') eq "off"
2 InternalDoIf('Auto1','STATE','') eq "on" and InternalDoIf('GartenLicht','STATE','') eq "off"
Devices:
0 Auto1
1 Auto1
2 GartenLicht
all Auto1 GartenLicht
Do:
0:
0
1:
0
2:
0 set Auto1 off
1 set Rollo close
3:
0
Helper:
globalinit 1
last_timer 0
sleepdevice GartenLicht
sleepsubtimer 1
sleeptimer -1
Internals:
0 Auto1:STATE
1 Auto1:STATE
2 GartenLicht:STATE
all Auto1:STATE GartenLicht:STATE
Itimer:
Readings:
State:
Timerfunc:
Trigger:
Attributes:
alias auto Rollo schließen
cmdState on|off|off|off
devStateIcon .*on:general_an@lightgreen .*off:general_aus@red
do resetwait
group Scripte
icon fts_shutter_down
wait 0:0:0,40
Ich habe eine neue Funktion des Wait-Timers verwendet (0,40). Allerdings habe ich es nicht hingekriegt, den cmdState für diesen Teil zu überschreiben. Ist das noch ein Fehler von mir, oder ist das so von Dir gewollt, dass er mir dann cmd_3_1 (oder ähnlich) anzeigt.
Christian
Zitat von: Spartacus am 01 Dezember 2015, 14:31:02
Ich habe eine neue Funktion des Wait-Timers verwendet (0,40). Allerdings habe ich es nicht hingekriegt, den cmdState für diesen Teil zu überschreiben. Ist das noch ein Fehler von mir, oder ist das so von Dir gewollt, dass er mir dann cmd_3_1 (oder ähnlich) anzeigt.
Christian
Z. Zt. lassen sich nur die Endzustände cmd_1, cmd_2, ... mit dem Attribut cmdState überschreiben. Die Zwischenzustände cmd_1_1, cmd_1_2, usw. lassen sich noch nicht umdefinieren. Das wird aber nächstes Jahr kommen.
Gruß
Damian
Damin,
alles klar! kein Thema!
@ all:
Ich habe immer noch ein Problem mit meiner Rolladenautomatik. Ich versuche mal den ganzen Sachverhalt vollständig zu beschreiben. Vielleicht hat ja jemand einen Tipp für mich:
Ich habe ein DOIF, welches die Gartenbeleuchtung schaltet (di.01.GA.ss.SA.Licht).
([16:30-[offtime.GA.ss.SA.Licht.dum]] and
[state.TW.Tageslicht.dum] eq "dunkel" and
[?state.TW.Tageslicht.dum:SU] lt {TimeOffset (OffTimeLicht(),'-30')})
(set GA.ss.SA.Licht on, set Auto on, set offtime.GA.ss.SA.Licht.dum {(OffTimeLicht())})
DOELSE
(set GA.ss.SA.Licht off)
Attribute:
cmdstate on|off
Die Offtime wird in einer Funktion berechnet und im Dummy offtime.GA.ss.SA.Licht.dum gespeichert.
Das funktioniert auch einwandfrei.
Jetzt arbeite ich daran, das in einem zweiten DOIF "diRollo" eine Rolladenautomatik aktiviert werden soll, wenn das erste DOIF in den cmdState "on" wechselt.
([di.01.GA.ss.SA.Licht] eq "on")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set Rollo close, set Auto off)
DOELSE
Attribute:
cmdState on|off|off
wait 0:30:0
do resetwait
Damit soll "diRollo" anzeigen, dass nun die Rolladenautomatik aktiviert wurde. Schaltet nun der Aktor GA.ss.SA.Licht ab, wird der Rolladen zeitverzögert heruntergefahen. Wird "GA.ss.SA.Licht" innerhalb der zeitverzögerung wieder eingeschaltet, wird der Wait-Timer abgebrochen. Bleibt das Licht aus und läuft der Timer ab, fährt der Rolladen herunter. Gleichzeitig wird damit auch die Rolladenautomatik deaktiviert. Dafür benutze ich das Dummy-Device "Auto", welches im 1. DOIF zusammen mit dem Gartenlicht gesetzt wird.
Das zur Theorie:
Leider klappt das nicht so wie es soll. Ich habe erwartet, dass diRollo auf "on" geht, wenn "di.01.GA.ss.SA.Licht "den cmdState "on" annimmt. Das passiert aber nicht, das Reading cmd_nr von "diRollo" steht auf 3, obwohl "di.01.GA.ss.SA.Licht" auf "on" steht. Ein manuelles "trigger di.01.GA.ss.SA.Licht" schafft Abhilfe und diRollo steht auf "on"
Warum ist das so? Hat jemand ggf. eine bessere Idee, das o.a. Szenario abzubilden?
Christian
Hallo,
also, vom Prinzip her scheint die o.a Logik zu funktionieren, aber wenn das 1. DOIF triggert, schaltet das 2te DOIF nicht auf "on" ! Wo ist der Fehler?
Christian
Hallo,
hat niemand einen Tipp für mich? Ich krieg das irgendwie nicht sauber gelöst!
Spartacus
Hallo,
ich verstehe beim Besten Willen nicht, warum dieses DOIF nicht richtig triggert.
Auto ist ein dummy und wird in einem anderen DOIF zusammen mit "GA.ss.SA.Licht" gesetzt.
Auszug aus dem anderen DOIF:
(set GA.ss.SA.Licht on, set Auto on, set offtime.GA.ss.SA.Licht.dum {(OffTimeLicht())})
Der Wert von Auto steht momentan auch auf "on" und "GA.ss.SA.Licht" ist ebenfalls "on"
Warum ist dann der cmdState von diesem DOIF auf "off"? Ich hätte hier ein "on" erwartet.
Internals:
DEF ([Auto] eq "on")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set Rollo close, set Auto off)
DOELSE
NAME diRollo
NR 951
NTFY_ORDER 50-diRollo
STATE off
TYPE DOIF
Readings:
2015-12-10 16:31:59 Device GA.ss.SA.Licht
2015-12-10 16:31:59 cmd_event GA.ss.SA.Licht
2015-12-10 16:31:59 cmd_nr 3
2015-12-10 16:31:59 e_Auto_STATE on
2015-12-10 16:31:59 e_GA.ss.SA.Licht_STATE on
2015-12-10 16:31:59 state off
2015-12-09 22:00:30 wait_timer no timer
Condition:
0 InternalDoIf('Auto','STATE','') eq "on"
1 InternalDoIf('Auto','STATE','') eq "on" and InternalDoIf('GA.ss.SA.Licht','STATE','') eq "off"
Devices:
0 Auto
1 GA.ss.SA.Licht
all Auto GA.ss.SA.Licht
Do:
0:
0
1:
0 set Rollo close, set Auto off
2:
0
Helper:
globalinit 1
last_timer 0
sleepdevice GA.ss.SA.Licht
sleepsubtimer -1
sleeptimer -1
Internals:
0 Auto:STATE
1 GA.ss.SA.Licht:STATE
all Auto:STATE GA.ss.SA.Licht:STATE
Itimer:
Readings:
State:
Timerfunc:
Trigger:
Attributes:
alias auto Rollo schließen
cmdState on|off|off
devStateIcon .*on:general_an@lightgreen .*off:general_aus@red
do resetwait
group Scripte
icon fts_shutter_down
wait 0:30:0
Für Hilfe wäre ich dankbar!
Spartacus
Zitat von: Spartacus am 10 Dezember 2015, 16:58:19
Hallo,
ich verstehe beim Besten Willen nicht, warum dieses DOIF nicht richtig triggert.
Auto ist ein dummy und wird in einem anderen DOIF zusammen mit "GA.ss.SA.Licht" gesetzt.
Auszug aus dem anderen DOIF:
(set GA.ss.SA.Licht on, set Auto on, set offtime.GA.ss.SA.Licht.dum {(OffTimeLicht())})
Der Wert von Auto steht momentan auch auf "on" und "GA.ss.SA.Licht" ist ebenfalls "on"
Warum ist dann der cmdState von diesem DOIF auf "off"? Ich hätte hier ein "on" erwartet.
Internals:
DEF ([Auto] eq "on")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set Rollo close, set Auto off)
DOELSE
Es ist ganz einfach. Es werden nicht immer alle Bedingungen ausgewertet, sondern nur die, bei denen auch das triggernde Device vorkommt, da bei dir der Trigger von GA.ss.SA.Licht kam, wird der erste Fall bei der Auswertung erst gar nicht angepackt.
D. h. wenn der erste Fall auch beim Lichttrigger ausgewertet werden soll, dann muss dieses Device auch in der ersten Bedingung wie auch immer abgefragt werden.
Gruß
Damian
Hi Damian,
danke für den Tipp.
Aber das Dummy-Device "Auto" ist doch auch ein triggerndes Device in der ersten Bedingung. Oder muss in allen Bedingungen immer das Gleiche triggernde Device vorkommen, wenn mein Konstrukt funktionieren soll?
Dann müsste ich das irgendwie so machen, oder?
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "on")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set Rollo close, set Auto off)
DOELSE
Christian
Zitat von: Spartacus am 10 Dezember 2015, 21:05:56
Hi Damian,
danke für den Tipp.
Aber das Dummy-Device "Auto" ist doch auch ein triggerndes Device in der ersten Bedingung. Oder muss in allen Bedingungen immer das Gleiche triggernde Device vorkommen, wenn mein Konstrukt funktionieren soll?
Dann müsste ich das irgendwie so machen, oder?
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "on")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set Rollo close, set Auto off)
DOELSE
Christian
Wie ich es schon geschrieben habe, steht es auch in der Commandref:
Zitat
Die Angaben werden immer von links nach rechts abgearbeitet. Zu beachten ist, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event das dazughörige Device bzw. die dazugehörige Triggerzeit beinhalten. Kommt ein Device in mehreren Bedingungen vor, so wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist.
Eine Bedingung wird nur dann ausgewertet, wenn das triggernde Device drin vorkommt, ansonsten wird diese Bedingung nicht berücksichtigt.
Hi Damian,
danke Dir! Aber ich bin zu blöd das zu raffen! Inzwischen funktioniert der o.a Code, aber warum Auto in meinem ersten Bsp. Kein triggerndes Devise ist, raffe ich trotz der Erklärung aus der Commandref nicht!
Für mich ist Auto das erste Device in diesem DOIF welches auf ein Trigger-Event reagieren müsste Was allerdings sein kann ist, dass im anderen DOIF zuerst das Gartenlicht auf on und dann erst Auto gesetzt wird! Wenn das so ist, dann müsste es funzen, wenn ich das in dem anderen DOIF vertauschen...
Spartacus
Zitat von: Spartacus am 11 Dezember 2015, 19:47:49
Hi Damian,
danke Dir! Aber ich bin zu blöd das zu raffen! Inzwischen funktioniert der o.a Code, aber warum Auto in meinem ersten Bsp. Kein triggerndes Devise ist, raffe ich trotz der Erklärung aus der Commandref nicht!
Für mich ist Auto das erste Device in diesem DOIF welches auf ein Trigger-Event reagieren müsste Was allerdings sein kann ist, dass im anderen DOIF zuerst das Gartenlicht auf on und dann erst Auto gesetzt wird! Wenn das so ist, dann müsste es funzen, wenn ich das in dem anderen DOIF vertauschen...
Spartacus
Ich habe doch nicht behauptet, dass "Auto" nicht triggert. In deiner ersten Definition:
Internals:
DEF ([Auto] eq "on")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set Rollo close, set Auto off)
DOELSE
hat zuletzt "GA.ss.SA.Licht" mit "on" getriggert, weil:
2015-12-10 16:31:59 Device GA.ss.SA.Licht
2015-12-10 16:31:59 cmd_event GA.ss.SA.Licht
2015-12-10 16:31:59 e_GA.ss.SA.Licht_STATE on
und dann geht DOIF wie folgt vor:
1. schaue in der ersten Bedingung, ob GA.ss.SA.Licht vor kommt, nein -> dann gehe zu nächsten Bedingung
2. schaue in der zweiten Bedingung, ob GA.ss.SA.Licht vor kommt, ja -> werte die Bedingung aus, sie ist nicht wahr, dann gehe zur nächsten Bedingung
3. DOELSE -> setze cmd_3
4. Ende der Abarbeitung der Definition
Gruß
Damian
Hallo,
jetzt bin ich am Ende! Der o.a. Code hat jetzt mehrere Tage sauber funktioniert.
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "on")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set Rollo close, set Auto off)
DOELSE
Jetzt habe ich das Dummy Auto umbenannt und das DOIF arbeitet nicht mehr.
([?state.di.01.GA.ss.SA.Licht.dum] eq "on" and [GA.ss.SA.Licht] eq "on")
DOELSEIF
([?state.di.01.GA.ss.SA.Licht.dum] eq "on" and [GA.ss.SA.Licht] eq "off")
(set EG.wz.RO.links closes, set EG.wz.RO.rechts closes, set state.di.01.GA.ss.SA.Licht.dum off)
DOELSE
Wenn GA.ss.SA.Licht abgeschaltet wird, dann wird zwar cmd2 kurz ausgeführt, aber der Befehl state.di.01.GA.ss.SA.Licht.dum off wird nicht ausgeführt.
Was ist denn da jetzt passiert?
Christian
Hallo,
Keine Ahnung was da passiert ist, aber nach einem Neustart der Kiste, lief es plötzlich wieder!
Alles wieder OK!
Christian