zeitgesteuertes DOIF versagt anscheinend beim Vergleich von Zeiten

Begonnen von kermitthefrog, 06 November 2018, 08:42:11

Vorheriges Thema - Nächstes Thema

kermitthefrog

Moin,

ich komme leider nicht mehr weiter. Ich möchte meine Dekobeleuchtung per DOIF zeitgesteuert ein/ausschalten lassen. Ich bin der festen Überzeugung, dass folgendes DOIF letztes Jahr noch einwandfrei lief.
Die Beleuchtung soll 4000 Sekunden vor Sonnenuntergang eingeschaltet und um 22:30h wieder ausgeschaltet werden. Zusätzlich soll morgens an Werktagen um 06:00h eingeschaltet werden, sofern dies zeitlich vor Sonnenaufgang + 3000 Sekunden liegt (dem dann auch anzusetzenden Ausschaltzeitpunkt). Abends funktioniert es wie es soll, morgens geht es nicht an.

Kann man dies sonst auch noch eleganter lösen?

Danke und Gruß!


Internals:
   DEF        ([{sunset_abs(-4000)}] or ([06:00|AT] and [06:00|AT]<=[{sunrise_abs(+3000)}])) (set Dekobeleuchtung on) DOELSEIF ([22:30] or [{sunrise_abs(+3000)}]) (set Dekobeleuchtung off)
   MODEL      FHEM
   NAME       di_DekobeleuchtungZeitsteuerung
   NR         258
   NTFY_ORDER 50-di_DekobeleuchtungZeitsteuerung
   STATE      cmd_2
   TYPE       DOIF
   READINGS:
     2018-11-05 22:30:01   cmd             2
     2018-11-05 22:30:01   cmd_event       timer_5
     2018-11-05 22:30:01   cmd_nr          2
     2018-11-05 07:15:02   mode            enabled
     2018-11-05 22:30:01   state           cmd_2
     2018-11-05 22:58:30   timer_01_c01    06.11.2018 16:12:43
     2018-11-06 06:00:00   timer_02_c01    07.11.2018 06:00:00|AT
     2018-11-06 06:00:00   timer_03_c01    07.11.2018 06:00:00|AT
     2018-11-06 07:39:59   timer_04_c01    07.11.2018 07:41:46
     2018-11-05 22:58:30   timer_05_c02    06.11.2018 22:30:00
     2018-11-06 07:39:59   timer_06_c02    07.11.2018 07:41:46
   Regex:
   attr:
     waitdel:
   condition:
     0          ::DOIF_time_once($hash,0,$wday) or (::DOIF_time_once($hash,1,$wday,"AT") and ::DOIF_time_once($hash,2,$wday,"AT")<=::DOIF_time_once($hash,3,$wday))
     1          ::DOIF_time_once($hash,4,$wday) or ::DOIF_time_once($hash,5,$wday)
   days:
     1          AT
     2          AT
   devices:
   do:
     0:
       0          set Dekobeleuchtung on
     1:
       0          set Dekobeleuchtung off
     2:
   helper:
     event      timer_6
     globalinit 1
     last_timer 6
     sleeptimer -1
     timerdev   
     timerevent timer_6
     timereventsState
     triggerDev
     timerevents:
       timer_6
     triggerEvents:
       timer_6
   internals:
   interval:
   intervalfunc:
   itimer:
   localtime:
     0          1541517163
     1          1541566800
     2          1541566800
     3          1541572906
     4          1541539800
     5          1541572906
   perlblock:
   readings:
   realtime:
     0          16:12:43
     1          06:00:00
     2          06:00:00
     3          07:41:46
     4          22:30:00
     5          07:41:46
   time:
     0          {sunset_abs(-4000)}
     1          06:00:00
     2          06:00:00
     3          {sunrise_abs(+3000)}
     4          22:30:00
     5          {sunrise_abs(+3000)}
   timeCond:
     0          0
     1          0
     2          0
     3          0
     4          1
     5          1
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
   timers:
     0           0  1  2  3
     1           4  5
   triggertime:
     1541517163:
       localtime  1541517163
       hash:
     1541539800:
       localtime  1541539800
       hash:
     1541566800:
       localtime  1541566800
       hash:
     1541572906:
       localtime  1541572906
       hash:
   uiState:
   uiTable:
Attributes:

Morgennebel

Was spricht gegen

([{sunset_abs(-4000)}-22:30] or [06:00-{sunrise_abs(+3000)}|AT])
   set Dekobeleuchtung on
DOELSE
   set Dekobeleuchtung off


Ciao, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

Ellert

[06:00|AT]<=[{sunrise_abs(+3000)}] dieser Vergleich funktioniert nicht, weil [Zeit] nur logisch wahr oder falsch liefert.

so sollte es funktionieren
"06:00:00" le sunrise_abs(+3000)

Damian

Bei der Funktion sunrise selbst kann man den Zeitbereich festlegen. Es gibt sogar Beispiele in der Commandref zu DOIF dazu.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

kermitthefrog

Zitat von: Morgennebel am 06 November 2018, 12:05:59
Was spricht gegen

([{sunset_abs(-4000)}-22:30] or [06:00-{sunrise_abs(+3000)}|AT])
   set Dekobeleuchtung on
DOELSE
   set Dekobeleuchtung off


Ciao, -MN

Sehr schön, werde ich so übernehmen... DANKE!

Ellert

Falls bei dieser Bedingung [06:00-{sunrise_abs(+3000)}|AT] der Ausdruck {sunrise_abs(+3000)} eine Zeit vor 6 Uhr liefert, geht das Licht in der resultierenden Zeit Spanne an, z.B. {sunrise_abs(+3000)} liefert 05:00:00, dann geht das Licht um 6 Uhr an und am nächsten Tag um 5 Uhr aus.

Morgennebel

Zitat von: Ellert am 06 November 2018, 15:35:22
Falls bei dieser Bedingung [06:00-{sunrise_abs(+3000)}|AT] der Ausdruck {sunrise_abs(+3000)} eine Zeit vor 6 Uhr liefert, geht das Licht in der resultierenden Zeit Spanne an, z.B. {sunrise_abs(+3000)} liefert 05:00:00, dann geht das Licht um 6 Uhr an und am nächsten Tag um 5 Uhr aus.

Bist Du da sicher? Ich hab so ähnliche Bedingungen schon lange im Einsatz und wenn der "Ausschaltpunkt" vor dem "Einschaltpunkt" liegt, passierte bisher nichts (oder hab ich das nur verschlafen?).

Ciao, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

Damian

Zitat von: Morgennebel am 06 November 2018, 16:54:10
Bist Du da sicher? Ich hab so ähnliche Bedingungen schon lange im Einsatz und wenn der "Ausschaltpunkt" vor dem "Einschaltpunkt" liegt, passierte bisher nichts (oder hab ich das nur verschlafen?).

Ciao, -MN

Da hast du wohl etwas übersehen ;)

[19:00-07:00] ist von 19:00 Uhr bis 07:00 Uhr wahr und sonst nicht.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF