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

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Benutzeravatar
scotty
Beiträge: 676
Registriert: 28. Apr 2020 04:44
Answers: 0

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

Beitrag 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?
Zuletzt geändert von scotty am 15. Aug 2023 16:25, insgesamt 1-mal geändert.
OH 3.4.5 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's

Benutzeravatar
udo1toni
Beiträge: 15243
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: shutter rule für eine bestimmte Zeitspanne

Beitrag 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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
scotty
Beiträge: 676
Registriert: 28. Apr 2020 04:44
Answers: 0

Re: shutter rule für eine bestimmte Zeitspanne

Beitrag von scotty »

Vielen Dank @udo1toni. Dann werde ich mir daraus mal eine für mich geeignete Variante bauen.
OH 3.4.5 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's

Rondo
Beiträge: 4
Registriert: 22. Dez 2021 23:23
Answers: 0

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

Beitrag von Rondo »

Den Urlaubs-Switch kann man auch über den Kalender sich ins System holen.

Antworten