Seite 1 von 1

[gelöst] shutter rule für eine bestimmte Zeitspanne

Verfasst: 15. Aug 2023 01:20
von scotty
Hallo zusammen,

bei mir läuft die folgende Regel, um die Rollläden für meine Terrasse in der Urlaubszeit zu steuern:

Code: Alles auswählen

//------------------------------------------------------------------------
//    Rollladen Abwärts, Urlaub
//------------------------------------------------------------------------
rule "Rollladen Terrasse abwärts"
when 
    Time cron "0 17 9 ? * MON-WED,FRI-SUN" or
    Time cron "0 2 8 ? * THU"
 then
         logInfo("shutters", "Rollläden Terrasse fahren runter!")
    gUntenShutters.allMembers.forEach[ n |   // Terrasse
        if (n.name.contains("1") || n.name.contains("2")) 
            n.sendCommand(90)                   // Terrasse auf 90%
        else n.sendCommand(90)
    ]
end
Lässt sich nun zusätzlich eine Datumspanne (Bsp: 01.08.2023 bis 14.08.2023) einbauen, um den Lauf einzugrenzen?

Re: shutter rule für eine bestimmte Zeitspanne

Verfasst: 15. Aug 2023 08:00
von udo1toni
Ja :)

Es gibt verschiedene Optionen dafür, z.B.

Code: Alles auswählen

val iDay = now.getDayOfMonth
val iMonth = now.getMonthValue // alternativ now.getMonth.getValue, sollte beides funktionieren
val iDayU = 1
val iDayO = 14
val iMonthU = 8
val iMonthO = 9
if(iDay < iDayU && iMonth < iMonthU)
  // davor
if(iDay > iDayO && iMonth > iMonthO)
  // danach
if(iDay >= iDayU && iMonth >= iMonthU && iMonth <= iMonthO && iDay <= iDayO)
// innerhalb
Wenn Du etwas drüber nachdenkst, wirst Du schnell feststellen, dass es diverse Sonderfälle gibt, die von den Formeln oben nur teilweise abgedeckt sind. Deshalb ist es wesentlich einfacher (zumindest wenn der Urlaub nicht über die Jahresgrenze hinausgeht) Start- und Enddatum als Tag des Jahres anzugeben, also z.B. 1. 8. -> 31+28+31+30+31+30+31+1, 14. 8. -> 31+28+31+30+31+30+31+14, dann sähe edie Formel so aus:

Code: Alles auswählen

if(now.getDayOfYear>=213 && now.getDayOfYear<=226)
Wenn der Urlaub über die Jahresgrenze hinausgeht, bietet es sich an, eine Grenzverschiebung vorzunehmen, z.B. Urlaub startet am 24.12. und endest am 16.01., -> 24.12. + 8 = 1.1. 16.1. + 8 = 24.1.

Code: Alles auswählen

if(now.plusDays(8).getDayOfYear < 25)
Auf jeden Fall muss man hier schon etwas tricksen, um nicht gehörige Bool'sche Algebra anwenden zu müssen.

Die Alternative wäre, einen Schalter "Urlaub_Aktiv" anzulegen (Typ Switch) und diesen von zwei Rules ein- und ausschalten zu lassen (einmaliger Termin, einfach jeweils Datum hinschreiben...) und innerhalb der Auto-Rule diesen Schalter abzufragen.

Re: shutter rule für eine bestimmte Zeitspanne

Verfasst: 15. Aug 2023 16:23
von scotty
Vielen Dank @udo1toni. Dann werde ich mir daraus mal eine für mich geeignete Variante bauen.

Re: [gelöst] shutter rule für eine bestimmte Zeitspanne

Verfasst: 12. Aug 2024 20:51
von Rondo
Den Urlaubs-Switch kann man auch über den Kalender sich ins System holen.