DOIF schaltet nicht wie es soll

Begonnen von Michi240281, 23 Dezember 2020, 11:51:36

Vorheriges Thema - Nächstes Thema

Michi240281

Hallo zusammen,

folgendes DI macht nicht, was es soll, nämlich abends und morgens die Heckenbeleuchtung einschalten und in den anderen Zeiträumen ausschalten. Jemand ne Idee?


(([{sunset_abs("HORIZON=-2",0,"16:00","19:30")}] -[23:30]) or (([05:00]-[{sunrise_abs("HORIZON=-2",0,"7:00","9:30")}]))) (set Licht_Hecke an) DOELSE (set Licht_Hecke aus)
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

amenomade

#1
Zu viele Klammern.

Eine Zeitspanne schreibt man [08:00-23:00]
und zwar auch wenn die Uhrzeit (z.B. 08:00) das Ergebnis einer Perl Funktion sein soll:
[{sunset   }-23:00] => Zeitspanne zwischen sunset und 23:00 Uhr

Was Du geschrieben hast: ([{sunset }] - [23:00]) heisst " Uhrzeit von sunset minus 23:00"

Den Unterschied sieht man ganz gut in einem "list" des DOIFs:
Falsch
   condition:
     0          (::DOIF_time_once($hash,0,$wday) -::DOIF_time_once($hash,1,$wday)) or ((::DOIF_time_once($hash,2,$wday)-::DOIF_time_once($hash,3,$wday)))

"(Uhrziet timer_01 minus Uhrzeit timer_02) oder (Uhrzeit timer_03 minusUhrzeit  timer_04)"

Richtig:
   condition:
     0          (::DOIF_time($hash,0,1,$wday,$hms)) or (::DOIF_time($hash,2,3,$wday,$hms))

"(Zeit zwischen timer_01 und timer_02) oder (Zeit zwischen timer_03 und timer_04)"
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Michi240281

Zitat von: amenomade am 23 Dezember 2020, 12:43:12
Zu viele Klammern.

Eine Zeitspanne schreibt man [08:00-23:00]
und zwar auch wenn die Uhrzeit (z.B. 08:00) das Ergebnis einer Perl Funktion sein soll:
[{sunset   }-23:00] => Zeitspanne zwischen sunset und 23:00 Uhr

Was Du geschrieben hast: ([{sunset }] - [23:00]) heisst " Uhrzeit von sunset minus 23:00"

Den Unterschied sieht man ganz gut in einem "list" des DOIFs:
Falsch
   condition:
     0          (::DOIF_time_once($hash,0,$wday) -::DOIF_time_once($hash,1,$wday)) or ((::DOIF_time_once($hash,2,$wday)-::DOIF_time_once($hash,3,$wday)))

"(Uhrziet timer_01 minus Uhrzeit timer_02) oder (Uhrzeit timer_03 minusUhrzeit  timer_04)"

Richtig:
   condition:
     0          (::DOIF_time($hash,0,1,$wday,$hms)) or (::DOIF_time($hash,2,3,$wday,$hms))

"(Zeit zwischen timer_01 und timer_02) oder (Zeit zwischen timer_03 und timer_04)"

Ahhh, vielen Dank! Dann müsste es so funktionieren?

(([{sunset_abs("HORIZON=-2",0,"16:00","19:30")} -23:30]) or (([05:00-{sunrise_abs("HORIZON=-2",0,"7:00","9:30")}]))) (set Licht_Hecke an) DOELSE (set Licht_Hecke aus)
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

amenomade

#3
Zitat von: Michi240281 am 23 Dezember 2020, 13:13:48
Ahhh, vielen Dank! Dann müsste es so funktionieren?

(([{sunset_abs("HORIZON=-2",0,"16:00","19:30")} -23:30]) or (([05:00-{sunrise_abs("HORIZON=-2",0,"7:00","9:30")}]))) (set Licht_Hecke an) DOELSE (set Licht_Hecke aus)
Was sagt ein "list"? ;) Ich glaube es ist jetzt richtig. Da könnte man sich noch ein Paar Rundeklammern sparen, aber es sollte funktionieren
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Michi240281

Internals:
   DEF        (([{sunset_abs("HORIZON=-2",0,"16:00","19:30")} -23:30]) or (([05:00-{sunrise_abs("HORIZON=-2",0,"7:00","9:30")}]))) (set Licht_Hecke an) DOELSE (set Licht_Hecke aus)
   FUUID      5c461a77-f33f-5e60-283d-dab7d7ec6ee17343
   MODEL      FHEM
   NAME       Licht_Hecke_DI
   NR         1008
   NTFY_ORDER 50-Licht_Hecke_DI
   STATE      initialized
   TYPE       DOIF
   READINGS:
     2020-12-23 13:12:34   cmd             0
     2020-12-23 13:12:34   mode            enabled
     2020-12-23 13:12:34   state           initialized
     2020-12-23 13:12:34   timer_01_c01    23.12.2020 16:42:32
     2020-12-23 13:12:34   timer_02_c01    23.12.2020 23:30:00
     2020-12-23 13:12:34   timer_03_c01    24.12.2020 05:00:00
     2020-12-23 13:12:34   timer_04_c01    24.12.2020 08:28:41
   Regex:
   attr:
     cmdState:
     waitdel:
   condition:
     0          (::DOIF_time($hash,0,1,$wday,$hms)) or ((::DOIF_time($hash,2,3,$wday,$hms)))
   days:
   devices:
   do:
     0:
       0          set Licht_Hecke an
     1:
       0          set Licht_Hecke aus
   helper:
     globalinit 1
     last_timer 4
     sleeptimer -1
   interval:
     0          -1
     1          0
     2          -1
     3          2
   intervalfunc:
   itimer:
   localtime:
     0          1608738152
     1          1608762600
     2          1608782400
     3          1608794921
   realtime:
     0          16:42:32
     1          23:30:00
     2          05:00:00
     3          08:28:41
   time:
     0          {sunset_abs("HORIZON=-2",0,"16:00","19:30")}
     1          23:30:00
     2          05:00:00
     3          {sunrise_abs("HORIZON=-2",0,"7:00","9:30")}
   timeCond:
     0          0
     1          0
     2          0
     3          0
   timer:
     0          0
     1          0
     2          0
     3          0
   timers:
     0           0  1  2  3
   triggertime:
     1608738152:
       localtime  1608738152
       hash:
     1608762600:
       localtime  1608762600
       hash:
     1608782400:
       localtime  1608782400
       hash:
     1608794921:
       localtime  1608794921
       hash:
   uiState:
   uiTable:
Attributes:
   do         always
   room       Aussen


Die Zeiträume sehen jetzt richtg aus! Bin optimistisch!
FHEM auf QNAP per VM / HM LAN Adapter / diverse HM-Devices
QNAP TVS 463
VU+ Duo4kSE
Sony 75ZD9

Damian

(([{sunset_abs("HORIZON=-2",0,"16:00","19:30")} -23:30]) or (([05:00-{sunrise_abs("HORIZON=-2",0,"7:00","9:30")}])))

Ich würde empfehlen überflüssige Klammern nicht anzugeben, dann kommt man nicht so schnell durcheinander ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF