Seite 1 von 1
jeden 2 Tag
Verfasst: 18. Mai 2020 17:03
von Boxana
hallo,
gibt es eine Möglichkeit das ich in einer rule überprüfen kann ob ein tag gerade oder ungerade ist.
Ich würde gerne jeden zweiten tag eine if Bedingung erfüllen.
Es soll kein trigger sein sondern eine Bedingung.
Re: jeden 2 Tag
Verfasst: 18. Mai 2020 18:27
von harteknut
Wenns kein Trigger sein soll (also keine cron-Bedingung), würde ich es mit
versuchen: Die Variable "Tag" durch zwei Teilen, abrunden, verdoppeln, von der Urprungsvariable subtrahieren. Ist das Ergebnis == 0, dann hast Du einen geraden Tag.
Ist etwas kompliziert, aber ein findiger Syntaxler kann das bestimmt in einer Zeile berechnen.
Gruß,
Simon
Re: jeden 2 Tag
Verfasst: 18. Mai 2020 18:49
von udo1toni
Hmm... das könnte man dann aber mit einem Vergleich auf Montag Mittwoch Freitag Sonntag erledigen. Ich denke eher, dass Boxana tatsächlich jeden 2. Tag meint, also in der einen Woche Montag, Mittwoch,Freitag, Sonntag, in der nächsten Woche Dienstag, Donnerstag Samstag, Danach geht's wieder von vorne los.
Du kannst das im Zweifel am einfachsten aus Now.millis extrahieren, also (ungetestet)
Code: Alles auswählen
val Boolean evenDay = if((now.millis/1000/60/60/24).intValue % 2 == 0) true else false
Falls das mit dem Modulo nicht geht, kann man es so versuchen:
Code: Alles auswählen
val Boolean evenDay = if((now.millis/1000/60/60/24).intValue/2 == ((now.millis/1000/60/60/24).intValue/2).intValue) true else false
aber das ist hässlich...
now.millis enthält die Anzahl Millisekunden seit dem 1.1.1970, 00:00:00.000 Uhr. Dieser Tag wäre also ein gerader Tag.
Re: jeden 2 Tag
Verfasst: 19. Mai 2020 18:38
von Boxana
Ja udo1toni ,
mir würde es reichen wenn ich wochentage setzen könnte.
Z.B. Mo Mi Fr So und dann Die
kann ich das irgendwie abfragen welchen Wochentag man hat?
Re: jeden 2 Tag
Verfasst: 19. Mai 2020 21:33
von violine21
Boxana hat geschrieben: ↑19. Mai 2020 18:38
kann ich das irgendwie abfragen welchen Wochentag man hat?
So zum Beispiel:
Code: Alles auswählen
rule "Tag ermitteln"
when
Time cron "0 0 0 * * ?" //Mitternacht
then
logInfo("Kalender", "Tag-Nr.: " + now.getDayOfWeek)
end
Code: Alles auswählen
2020-05-19 21:28:00.332 [INFO ] [ipse.smarthome.model.script.Kalender] - Tag-Nr.: 2
now.getDayOfWeek gibt den Tag der Woche an. Das Ergebnis ist eine normale Zahl. Damit kannst Du dann rechnen.
Re: jeden 2 Tag
Verfasst: 20. Mai 2020 09:07
von Tokamak
Wenn du bestimmte Tage nehmen kannst und willst, geht es direkt mit
Timer cron:
Code: Alles auswählen
rule "Wochentag"
when
Timer cron "0 0 4 * * MON,WED,FRI"
then
...
Jeder zweite Tag, beginnend ab dem 1. eines Monats, wäre
Code: Alles auswählen
rule "Wochentag"
when
Timer cron "0 0 4 1/2 * *"
then
...
Wenn du tatsächlich genau jeden zweiten Tag benötigst, reicht die Wochentagsbetrachtung alleine nicht, sondern musst auch die Kalenderwoche berücksichtigen. Und dann musst du den Spezialfall Jahreswechsel berücksichtigen.
Wenn also exakt, würde ich es genauso machen wie von udo1toni vorgeschlagen, die Millisekunden bestimmen, durch 24*60*60*1000 teilen, dann hast du die Anzahl der Tage seit "the epoch", und diesen Wert darauf prüfen, ob es gerade oder ungerade ist (mittels %).
Re: jeden 2 Tag
Verfasst: 20. Mai 2020 14:20
von Boxana
violine21 hat geschrieben: ↑19. Mai 2020 21:33
Boxana hat geschrieben: ↑19. Mai 2020 18:38
kann ich das irgendwie abfragen welchen Wochentag man hat?
So zum Beispiel:
Code: Alles auswählen
rule "Tag ermitteln"
when
Time cron "0 0 0 * * ?" //Mitternacht
then
logInfo("Kalender", "Tag-Nr.: " + now.getDayOfWeek)
end
Code: Alles auswählen
2020-05-19 21:28:00.332 [INFO ] [ipse.smarthome.model.script.Kalender] - Tag-Nr.: 2
now.getDayOfWeek gibt den Tag der Woche an. Das Ergebnis ist eine normale Zahl. Damit kannst Du dann rechnen.
DANKE!
Das ist mehr als genug und so komme ich weiter.
Cron ist gut wenn man darauf triggern möchte aber ich möchte bestimmte tage überspringen je nach Wetter und da ist das was du hier vorschlägst mehr als gut.