FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: juemuc am 11 Februar 2025, 21:44:01

Titel: at nur an bestimmten Monaten an einem bestimmten Tag
Beitrag von: juemuc am 11 Februar 2025, 21:44:01
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
Titel: Aw: at nur an bestimmten Monaten an einem bestimmten Tag
Beitrag von: Otto123 am 11 Februar 2025, 22:12:25
Hallo Jürgen,

das ist wünsch Dir was Code, weil 5 8 und 11 sind immer wahr ;) :
$month==2 || 5 || 8 || 11Du 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
Titel: Aw: at nur an bestimmten Monaten an einem bestimmten Tag
Beitrag von: juemuc am 11 Februar 2025, 22:30:32
Hallo Otto,

danke. So funktioniert es.

Viele Grüße
Jürgen
Titel: Aw: at nur an bestimmten Monaten an einem bestimmten Tag
Beitrag von: betateilchen am 12 Februar 2025, 09:28:29
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.
 
Titel: Aw: at nur an bestimmten Monaten an einem bestimmten Tag
Beitrag von: juemuc am 12 Februar 2025, 11:25:08
Super.

Das ist natürlich noch besser. Vielen Dank.

Viele Grüße
Jürgen