Rule - Xmas-Beleuchtung

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

Re: Rule - Xmas-Beleuchtung

Beitrag von udo1toni »

Ähm... Ja, das hat schon seine Richtigkeit :) Die Formel stimmt und funktioniert soweit.
Allerdings ist die Prüfung in der Rule falsch, denn heute ist der erste Advent und da ist now.getDayOfYear = intStAdvent. Korrekt wäre also

Code: Alles auswählen

var Integer intStAdvent            = 0
rule "Berechnung nach Mitternacht"
 when
    Time cron "5 0 0 * * ?" or
    System started
 then
    val firstAdvent = LocalDate.of(now.getYear,12,25).minusDays(LocalDate.of(now.getYear,12,25).getDayOfWeek.getValue + 21)
    intStAdvent = firstAdvent.getDayOfYear
    logInfo("holiday","Der erste Advent ist am {}", firstAdvent)
end

rule "Weihnachtslicht ein"
 when
    Time cron "0 0 6 * * ?" or          // morgens 6 Uhr
    Time cron "0 30 16 * * ?"          // nachmittags 16:30 Uhr
 then
    if (now.getDayOfYear < 7 || now.getDayOfYear >= intStAdvent) { // ab 1. Advent, inclusive
        logDebug("x-mas","Weihnachtsbeleuchtung ein.")
        Swi_Weihnachtsbaum.sendCommand(ON)
    }
end

rule "Weihnachtslicht aus"
 when
    Time cron "0 0 8 * * ?" or               // morgens 8 Uhr
    Time cron "0 45 23 * * ?"               // abends 23:45 Uhr
 then
    if (now.getDayOfYear < 7 || now.getDayOfYear >= intStAdvent) { // ab 1. Advent, inclusive
        logDebug("x-mas","Weihnachtsbeleuchtung aus.")
        Swi_Weihnachtsbaum.sendCommand(OFF)
    }
end
Ich habe schon lange keine Adventsbeleuchtung mehr aufgehängt, sonst wäre mir dieser Fehler schon früher aufgefallen...
openHAB5.0.3 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.1.1, LXC)

EMaster
Beiträge: 111
Registriert: 13. Dez 2018 21:02
Answers: 2

Re: Rule - Xmas-Beleuchtung

Beitrag von EMaster »

Nach etwas Basteln und Auswertung der entstandenen Fehlermeldungen im LOG, habe ich jetzt folgende Version, die bis jetzt funktioniert.
Mal schauen, wie es über den Jahreswechsel bis zum 6. Januar ausschaut. Wobei ich denke, dass der Teil da jetzt irgendwie fehlt. :-(

Code: Alles auswählen

import java.time.LocalDate
import java.time.format.DateTimeFormatter

var Integer intStAdvent = 0

rule "Berechnung des 1. Advents nach Mitternacht"
when
    Time cron "5 0 0 * * ?" or
    System started
then
    val firstAdvent = LocalDate.of(LocalDate.now().getYear, 12, 25)
        .minusDays(LocalDate.of(LocalDate.now().getYear, 12, 25).getDayOfWeek().getValue + 21)

    intStAdvent = firstAdvent.getDayOfYear()

    logInfo("holiday", "Der erste Advent ist in diesem Jahr am " + firstAdvent.toString)

    val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy")
    logInfo("holiday", "Formatiert: " + firstAdvent.format(formatter))
end

rule "Weihnachtslicht AUSSEN ein"
when
    Time cron "0 00 05 * * MON,TUE,WED,THU,FRI" or // 05:00:00 Uhr Montag-Freitag
    Time cron "0 00 05 * * SAT,SUN" or // 05:00:00 Uhr Samstag + Sonntag
    Time cron "0 00 16 * * MON,TUE,WED,THU,FRI" or // 16:00:00 Uhr Montag-Freitag
    Time cron "0 00 16 * * SAT,SUN" // 16:00:00 Uhr Samstag + Sonntag
then
    val today = LocalDate.now()
    if (today.getDayOfYear() < 7 || today.getDayOfYear() >= intStAdvent) {
        logDebug("x-mas_aussen", "Weihnachtsbeleuchtung Aussen ein.")
        Xmas_Aussen.sendCommand(ON)
    }
end
openHAB 5.0.3 im Docker@Synology

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

Re: Rule - Xmas-Beleuchtung

Beitrag von udo1toni »

Nein, diese Regel funktioniert nicht.
Der Time cron Ausdruck ist falsch.
openHAB5.0.3 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.1.1, LXC)

EMaster
Beiträge: 111
Registriert: 13. Dez 2018 21:02
Answers: 2

Re: Rule - Xmas-Beleuchtung

Beitrag von EMaster »

udo1toni hat geschrieben: 30. Nov 2025 17:45 Nein, diese Regel funktioniert nicht.
Der Time cron Ausdruck ist falsch.
OK, da sind paar 0 zu viel drin. Das meinst Du doch sicher, oder?
Hat aber auch mit den 0 zum richtigen Zeitpunkt eingeschaltet.
Die Frage war eher, ob sie bis zum 6. Januar berechnet.
openHAB 5.0.3 im Docker@Synology

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

Re: Rule - Xmas-Beleuchtung

Beitrag von udo1toni »

Nein.

Jeder Time cron Ausdruck muss exakt(!) ein Fragezeichen enthalten.
Entweder, Du setzt das Fragezeichen beim Tag im Monat (4. Stelle) oder beim Wochentag (6. Stelle). Also entweder

Code: Alles auswählen

when
    Time cron "0 00 05 ? * MON,TUE,WED,THU,FRI" or // 05:00:00 Uhr Montag-Freitag
    Time cron "0 00 05 ? * SAT,SUN" or             // 05:00:00 Uhr Samstag + Sonntag
    Time cron "0 00 16 ? * MON,TUE,WED,THU,FRI" or // 16:00:00 Uhr Montag-Freitag
    Time cron "0 00 16 ? * SAT,SUN"                // 16:00:00 Uhr Samstag + Sonntag
then
oder

Code: Alles auswählen

when
    Time cron "0 00 05 * * ?" or // 05:00:00 Uhr
    Time cron "0 00 16 * * ?"    // 16:00:00 Uhr
then
Im vorliegenden Fall sind die Trigger tatsächlich Wochentag unabhängig. entsprechend wäre die zweite Variante zielführender ;)

Ob man 0 oder 00 schreibt, ist hingegen egal. Auch * und 0/1 sind gleichwertig. 0/1 bedeutet: "nimm jeden möglichen Wert, beginnend mit 0". Entsprechend wäre 2/5: "Nimm jeden 5. Wert, beginnend mit 2", also 2,7,12 usw. bis zum höchstmöglichen Wert des Feldes.
openHAB5.0.3 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.1.1, LXC)

EMaster
Beiträge: 111
Registriert: 13. Dez 2018 21:02
Answers: 2

Re: Rule - Xmas-Beleuchtung

Beitrag von EMaster »

Ah, OK.
Vielen Dank für den Hinweis.
openHAB 5.0.3 im Docker@Synology

Antworten