Tachchen,
ich habe mir (u.a.) ein DOIF gebastelt, welches mir die Rollos in den Kinderzimmern steuert.
Nun möchte ich folgendes erreichen:
An Wochentagen sollen die Rollos aufgehen, wenn es Hell genug ist, jedoch nicht bevor es an der Zeit zum aufstehen (definiert als Dummy) ist.
Am Wochenede prinzipiell das selbe, nur die Zeit zum aufstehen ist später.
Jetzt funktioniert meine Lösung wunderbar, solange die Helligkeit vor der Zeit triggert. Im Winter, wenn es später hell wird triggert mein DOIF nicht mehr, da es zu den besagten Zeitpunkten ja noch zu dunkel ist.
Wie erkläre ich also einem DOIF das es ab einem Zeitpunkt eine zweite Bedingung (die Helligkeit) überprüft und dann triggert, auch wenn der Zeitpunkt selbst bereits verstrichen ist?
Ich habe bisher folgendes:
Internals:
DEF ##erster Fall: Aufstehen
(([[Kinder_aufstehen_Wochentag]|8] or [[Aufstehen_Wochenende]|7]) and ([Helligkeit] > [hellRollosAuf]))
(set Rollos Ronja open, set Rollos Julian open)
##zweiter Fall: Rollos zu
DOELSE([[Kinder_zu_Bett_Wochentag]|01234] or ([Helligkeit] < [dunkelRollosZu]))
(set Rollos Ronja dim 85, set Rollos Julian dim 85)
NAME di_KinderzimmerSteuerung
NR 198
NTFY_ORDER 50-di_KinderzimmerSteuerung
STATE cmd_2
TYPE DOIF
READINGS:
2018-02-10 17:29:11 Device Helligkeit
2018-02-10 09:00:21 cmd 2.2
2018-02-10 09:00:21 cmd_event Helligkeit
2018-02-10 09:00:21 cmd_nr 2
2018-02-10 09:00:21 cmd_seqnr 2
2018-02-10 17:29:11 e_Helligkeit_STATE 7
2018-01-12 16:44:09 e_hellRollosAuf_STATE 19
2018-02-10 09:00:21 state cmd_2
2018-02-10 17:20:36 timer_01_c01 11.02.2018 06:30:00|8
2018-02-10 17:20:36 timer_02_c01 11.02.2018 09:00:00|7
Regex:
condition:
0 (DOIF_time_once($hash,0,$wday,"8") or DOIF_time_once($hash,1,$wday,"7")) and (InternalDoIf($hash,'Helligkeit','STATE') > InternalDoIf($hash,'hellRollosAuf','STATE'))
days:
0 8
1 7
devices:
0 Helligkeit hellRollosAuf
all Helligkeit hellRollosAuf
do:
0:
0 set Rollos Ronja open, set Rollos Julian open
1:
0 [[Kinder_zu_Bett_Wochentag]|01234] or ([Helligkeit] < [dunkelRollosZu])
1 set Rollos Ronja dim 85, set Rollos Julian dim 85
helper:
DOIF_Readings_events
DOIF_eventas
event 7
globalinit 1
last_timer 2
sleeptimer -1
timerdev Helligkeit
timerevent 7
triggerDev Helligkeit
timerevents:
7
timereventsState:
state: 7
triggerEvents:
7
triggerEventsState:
state: 7
internals:
0 Helligkeit:STATE hellRollosAuf:STATE
all Helligkeit:STATE hellRollosAuf:STATE
itimer:
all Kinder_aufstehen_Wochentag Aufstehen_Wochenende
localtime:
0 1518327000
1 1518336000
readings:
realtime:
0 06:30:00
1 09:00:00
time:
0 [Kinder_aufstehen_Wochentag]
1 [Aufstehen_Wochenende]
timeCond:
0 0
1 0
timer:
0 0
1 0
timers:
0 0 1
trigger:
triggertime:
1518327000:
localtime 1518327000
hash:
1518336000:
localtime 1518336000
hash:
uiState:
uiTable:
Attributes:
room Haus allgemein->System->Rolladensteuerung
Die ganzen Steuerungswerte sind in Dummys ausgelagert, da ich die Werte änderbar haben möchte, ohne die Logik einsehbar haben zu müssen.
Irgendjemand eine hilfreiche Idee?
Mit Zeitintervallen arbeiten.
Den Gedanken hatte ich auch schon...
Gibt es ein nach hinten offenes Zeitintervall?
Zitat von: Darkmozart am 10 Februar 2018, 17:44:38
Die ganzen Steuerungswerte sind in Dummys ausgelagert, da ich die Werte änderbar haben möchte, ohne die Logik einsehbar haben zu müssen.
Irgendjemand eine hilfreiche Idee?
Die Dummys könntest Du Dir sparen, denn Du könntest im DOIF die Widgets auf selbsbenannte Readings legen und im Frontend über readingList, setList, webCmd, und webCmdLabel anzeigen, wie in einem Dummy aber an einer Stelle.
Oder Du nutzt das Attribut uiTable mit weitergehenden Konfigurationsmöglichkeiten zum Erstellen der Benutzerschnittstelle.
ZitatGibt es ein nach hinten offenes Zeitintervall?
Hast Du in der Befehlsreferenz eins gesehen? ;)
Zitat von: Ellert am 10 Februar 2018, 18:26:57
Hast Du in der Befehlsreferenz eins gesehen? ;)
Nope, darum frag ich ja, undokumentiertes Feature, Workaround und so Sachen :-)
Aber dann bastel ich mal ein passendes Intervall zusammen...