Nabend.
Frauchen is bei der Nachbarin, also sturmfreie Bude
udo1toni hat geschrieben: ↑2. Dez 2021 17:16
Also ein paar Dinge...
1. Bitte nach Möglichkeit
Integer statt
int verwenden. also
var Integer intStAdvent. Grund: Integer definiert ein Objekt, int definiert ein Primitive. openHAB braucht für ein Primitive ungleich länger als für ein Objekt.
2. Inaktive Rules sollten tunlichst nicht in der Verzeichnis-Struktur gespeichert werden, allenfalls kannst Du sie in eine Datei verschieben, deren Endung nicht rules lautet, also z.B. rules/xmas.rules.old wäre ok, aber NICHT rules/old/xmas.rules, weil das Verhalten von openHAB hierfür nicht eindeutig definiert ist.
Zu 1: wird geändert.

Zu 2: Wie bei int5749, Endung wird abgeändert, auf z. B.: *.rule_ oder *.item_. Die ganzen Prereleases oder nicht benötigten Configs werden mit mod. Endung in ein Unterordner verschoben, wegen der übersichtlichkeit. Hat bis jetzt keine erkennbaren Auswirkungen, alles in eine .txt Datei ist auch eine Möglichkeit. Jede Rule ist übrigens eine Datei. hier.
Jetzt das verrückte, mit der Rule von int5749 looft es auf einmal. Ein Restart von openhab und alles ist schön.
Meine raus gefunden zu haben, nach JEDER Änderung die christmas.rules braucht OH einen Neustart. Ohne ein Neustart gibt es die Fehlermeldung. Hat das mit dem Errechnen von intSTAdvent zu tun? Andere einfache Rules , die stumpf nach Zeit laufen brauchen keinen Neustart.
Jedenfalls ging pünktlich um 22 Uhr das Licht aus. Hab mir jetzt einen Wein verdient.
So sieht übrigens die Rule aus:
Code: Alles auswählen
var Integer intStAdvent
rule "Feiertage" when
Time cron "5 0 0 * * ?" or
System started
then
intStAdvent = LocalDate.now.withMonth(12).withDayOfMonth(25).getDayOfYear - (now.withMonth(12).withDayOfMonth(25).getDayOfWeek.getValue +27)
logInfo("XMAS", "intStAdvent: {}", intStAdvent.toString)
end
rule "Weihnachtslicht ein"
when
Time cron "0 0 16 * * ?"
then
if (now.getDayOfYear < 7 || now.getDayOfYear > intStAdvent) {
logInfo("x-mas","Weihnachtsbeleuchtung an.")
gChristmas.sendCommand(ON)
}
end
rule "Weihnachtslicht aus"
when
Time cron "0 0 22 * * ?"
then
if (now.getDayOfYear < 7 || now.getDayOfYear > intStAdvent) {
logInfo("x-mas","Weihnachtsbeleuchtung aus.")
gChristmas.sendCommand(OFF)
}
end
@int5749
Ist der Schnipsel notwendig?
@peter-pan
Danke für den Code. Fragt er hier den Zustand ab und schaltet erst, wenn er nicht an ist?