Hallo zusammen,
Ich möchte meine Rolladen zu einem bestimmten Zeitpunkt runterfahren und habe hierzu ein doif mit twilight gebaut. Es führt dann dazu, dass bei Erreichen des twilight-Zeitpunktes die Rolladen heruntergefahren werden. Soweit ok. Dann wird aber ca. 70 Sekunden später das gleiche Kommando zum Runterfahren der Rolladen erneut ausgeführt. Was ziemlich doof ist, wenn sich zwischenzeitlich dazu entschieden hat, die Rolladen doch wieder per Hand hochzufahren. Was läuft falsch?
Viele Grüße
Frank
List vom DOIF:
Internals:
DEF ([{twilight("TC_TWILIGHT","ss_civil","16:00","21:00")}]) (set EG.wz.l.?.RO pct 0:FILTER=STATE!=off;
set EG.wz.ml.RO off)
NAME EG.wz.l.RO_OFF
NR 463
NTFY_ORDER 50-EG.wz.l.RO_OFF
STATE cmd_1
TYPE DOIF
Readings:
2017-04-06 20:47:58 cmd 1
2017-04-06 20:47:58 cmd_event timer_1
2017-04-06 20:47:58 cmd_nr 1
2017-03-28 19:17:41 mode enable
2017-04-06 20:47:58 state cmd_1
2017-04-06 20:47:58 timer_01_c01 07.04.2017 20:47:58
Condition:
0 DOIF_time_once($hash,0,$wday)
Days:
Devices:
Do:
0:
0 set EG.wz.l.?.RO pct 0:FILTER=STATE!=off; set EG.wz.ml.RO off
1:
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 1491590878
Readings:
Realtime:
0 20:47:58
Regexp:
State:
Time:
0 {twilight("TC_TWILIGHT","ss_civil","16:00","21:00")}
Timecond:
0 0
Timer:
0 0
Timers:
0 0
Triggertime:
1491590878:
localtime 1491590878
Hash:
Attributes:
do always
room EG.Wohnen
Genau das ist die Bedeutung von do always... jedes Mal wenn twilight ein Event auslöst wird dein DOIF getriggert... Do always muss weg (und du brauchst ein DOELSE, sonst wird dein Rollladem nächsten Tag nicht geschlossen
Vielen Dank für deinen Hinweis.
Aber welches Kommando packe ich in das DOELSE rein? Ich möchte ja nur, dass zu dem Zeitpunkt die Rolladen runterfahren. Das Rauffahren soll nicht ins DOELSE rein.
Vermutlich liegt es daran, dass die Sonne jeden Tag später untergeht.
Am 07.04.2017 um 20:47:58 und am 08.04.2017 dann später. Bei der Ausführung wird aber schon der neue Zeitpunkt berechnet. Es gibt ein im DOIF ein Attribut um einzuschränken wie schnell Befehle mehrmals gesendet werden. Ich bin mir nicht ganz sicher, aber es könnte cmdpause gewesen sein.
DOELSE braucht kein Komanndo.
Dein Problem:
Sunset heute (Beispiel) 20.15
Sunset morgen 20.17
nachdem Sunset Heute abgelaufen ist, wird der Wert für Sunset morgen gesetzt und diese Zeit gibts heute auch nochmal (ca. 70 Sekunden später) daher wird dein DOIF wegen dem 'do alwasys' nochmal ausgeführt.
Du kannst das umgehen in dem du ein leeres
DOELSE
setzt, dann wechselt das DOIF in cmd_2, wenn es getriggert wird und die Bedingungen für cmd_1 nicht wahr sind.
Oder aber ein
DOELSEIF ([21:05])
ohne Ausführungsteil. Dann wechselt das DOIF immer fix um 21:05 in cmd_2.
Bastel-Frank
Ich meine DOELSE reicht! Du musst das DOIF ja nur in einen anderen Zustand bringen! Steht aber auch irgendwo (Hilfe oder Wiki!)
Gruss Christoph
Edith: Der automatisierer war schneller!
OK, vielen Dank an Euch! (insbesondere auch für die Erläuterungen, warum dies so passiert)
Ich bauen dann man ein leeres DOELSE ein und werde berichten.
Zitat von: automatisierer am 07 April 2017, 07:42:11
Du kannst das umgehen in dem du ein leeres
DOELSE
setzt, dann wechselt das DOIF in cmd_2, wenn es getriggert wird und die Bedingungen für cmd_1 nicht wahr sind.
Das Problem: Die einzige Bedingung ist der Zeitpunkt, zu dem es getriggert wird. Deshalb trifft cmd_1
immer zu, wenn getriggert wird und es geht
nie in den DOELSE-Zweig. Insofern wäre das keine sinnvolle Lösung.
Zitat von: automatisierer am 07 April 2017, 07:42:11
Oder aber ein
DOELSEIF ([21:05])
ohne Ausführungsteil. Dann wechselt das DOIF immer fix um 21:05 in cmd_2.
So geht es. Dann aber das
do always entfernen, sonst hilft das auch nicht.
Ich habe die Variante mit DOELSEIF ([21:05]) umgesetzt und bin gespannt darauf, wie es sich verhalten wird.
Ich bin mir nicht sicher, ob ein DOELSE reicht. Habs getestet, geht nicht.
da durch
[{twilight("TC_TWILIGHT","ss_civil","16:00","21:00")}]
ein Timer gesetzt wird:
2017-04-06 20:47:58 timer_01_c01 07.04.2017 20:47:58
es wird nur der Timer neu berechnet und gesetzt, das DOIF wechselt aber nicht in cmd_2 daher wird cmd_1 nicht nochmal ausgeführt werden. Abgesehen davon, sollte das DOIF durch das DOELSE in cmd_2 wechseln, würde auch der neu gesetzte Timer am gleichen Tag wieder zuschlagen.
also, besser das DOIF durch ein DOELSEIF ([21:05]) auf cmd_2 setzten.
Kurzes Feedback: Die Lösung mit DOELSEIF funktioniert hervorragend. Jetzt habe ich DOIF auch wieder ein kleines bisschen besser verstanden.
Nochmal Danke an alle Hinweisgeber :D.
Frohe Ostern
Frank