FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Darkmozart am 10 Februar 2018, 17:44:38

Titel: DOIF ab einem Zeitpunkt triggern lassen
Beitrag von: Darkmozart am 10 Februar 2018, 17:44:38
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?
Titel: Antw:DOIF ab einem Zeitpunkt triggern lassen
Beitrag von: Damian am 10 Februar 2018, 17:50:12
Mit Zeitintervallen arbeiten.
Titel: Antw:DOIF ab einem Zeitpunkt triggern lassen
Beitrag von: Darkmozart am 10 Februar 2018, 18:17:16
Den Gedanken hatte ich auch schon...
Gibt es ein nach hinten offenes Zeitintervall?
Titel: Antw:DOIF ab einem Zeitpunkt triggern lassen
Beitrag von: Ellert am 10 Februar 2018, 18:26:57
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? ;)
Titel: Antw:DOIF ab einem Zeitpunkt triggern lassen
Beitrag von: Darkmozart am 10 Februar 2018, 18:50:25
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...