Hallo zusammen,
ich habe ein "at" definiert, welches nur in den Monaten 2, 5, 8, 11 am 19. ausgeführt werden soll. Hier die Definition:
defmod at_DS920_19_3monatlich_on at *18:45:00 {if ($month==2 || 5 || 8 || 11 && $mday ==19){fhem("set DS920_WOL on")}}
Leider wird der Befehl aktuell täglich ausgeführt. Wer kann helfen?
Viele Grüße
Jürgen
Hallo Jürgen,
das ist wünsch Dir was Code, weil 5 8 und 11 sind immer wahr ;) :
$month==2 || 5 || 8 || 11
Du musst das nicht abkürzen sondern ausformulieren. So könnte es klappen (ungetestet nur logisch nachgedacht):
$month==2 || $month==5 || $month==8 || $month==11
Außerdem musst Du die "oder" klammern (siehe (https://perldoc.perl.org/perlop#Operator-Precedence-and-Associativity)):
($month==2 || $month==5 || $month==8 || $month==11) && $mday==19
sonst würde erst das "und" aufgelöst und dann der Rest damit "verodert" :)
Gruß Otto
Hallo Otto,
danke. So funktioniert es.
Viele Grüße
Jürgen
Was spricht gegen:
defmod at_DS920_19_3monatlich_on at *18:45:00 { fhem("set DS920_WOL on") if ($mday == 19 && contains_numeric($month,(2,5,8,11))) }
Warum ich die Abfrage auf $mday nach vorne gestellt habe? Weil das eine Prüfung ist, die an n-1 Tagen eines Monats ohnehin "false" ergibt und dann die vorgegebenen Monate gar nicht mehr geprüft werden müssen.
Super.
Das ist natürlich noch besser. Vielen Dank.
Viele Grüße
Jürgen