jeden 2 Tag
- Boxana
- Beiträge: 125
- Registriert: 19. Feb 2020 16:24
jeden 2 Tag
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.
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.
Openhab auf einem Qnap NAS
Gruß
Christian
Gruß
Christian
-
- Beiträge: 235
- Registriert: 3. Dez 2019 08:21
Re: jeden 2 Tag
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
Code: Alles auswählen
val Integer Tag = now.getDayOfWeek
Ist etwas kompliziert, aber ein findiger Syntaxler kann das bestimmt in einer Zeile berechnen.
Gruß,
Simon
- udo1toni
- Beiträge: 15249
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: jeden 2 Tag
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)
Falls das mit dem Modulo nicht geht, kann man es so versuchen:
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.
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
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
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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
- Boxana
- Beiträge: 125
- Registriert: 19. Feb 2020 16:24
Re: jeden 2 Tag
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?
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?
Openhab auf einem Qnap NAS
Gruß
Christian
Gruß
Christian
-
- Beiträge: 600
- Registriert: 20. Sep 2019 05:49
Re: jeden 2 Tag
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
-
- Beiträge: 183
- Registriert: 20. Aug 2019 08:37
- Wohnort: Aachen
Re: jeden 2 Tag
Wenn du bestimmte Tage nehmen kannst und willst, geht es direkt mit Timer cron:
Jeder zweite Tag, beginnend ab dem 1. eines Monats, wäre
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 %).
Code: Alles auswählen
rule "Wochentag"
when
Timer cron "0 0 4 * * MON,WED,FRI"
then
...
Code: Alles auswählen
rule "Wochentag"
when
Timer cron "0 0 4 1/2 * *"
then
...
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 %).
Proxmox mit OH 4.2 und HABApp 24 im LXC-Container
- Boxana
- Beiträge: 125
- Registriert: 19. Feb 2020 16:24
Re: jeden 2 Tag
violine21 hat geschrieben: ↑19. Mai 2020 21:33So zum Beispiel:Code: Alles auswählen
rule "Tag ermitteln" when Time cron "0 0 0 * * ?" //Mitternacht then logInfo("Kalender", "Tag-Nr.: " + now.getDayOfWeek) end
now.getDayOfWeek gibt den Tag der Woche an. Das Ergebnis ist eine normale Zahl. Damit kannst Du dann rechnen.Code: Alles auswählen
2020-05-19 21:28:00.332 [INFO ] [ipse.smarthome.model.script.Kalender] - Tag-Nr.: 2
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.
Openhab auf einem Qnap NAS
Gruß
Christian
Gruß
Christian