Komisch, ich dachte, ich hätte das gestern beantwortet... egal.
Deine Anforderung passt jetzt irgendwie gar nicht zu Deiner Lösung
Raspberry wird gestartet -> Rule soll mit System started triggern
Ab 6 Uhr, vor 23 Uhr -> now.getHourOfDay >= 6 && now.getHourOfDay <= 22
Deine Rule triggert mit civilDawn, somit dürfte die Bedingung nie erfüllt sein, es sei denn, Du hast in einem der beiden Channel ein Offset gesetzt, dann (falls das Offset dazu führt) ist die Bedingung immer erfüllt.
Es gibt im englischen Forum eine nette Lösung, die Zeiträume definiert, also Nacht,Aufstehen,Tagsüber,Abends,Zubettgehen. Innerhalb einer Rule wird berechnet, in welchem Zeitraum wir uns befinden. Schaltbefehle werden dann abhängig von der Änderung dieser Zeiträume gemacht.
Eine mögliche Rule für Deine Anforderung sähe so aus:
Code: Alles auswählen
DateTime civilDawnStart {channel="astro:sun:home:civilDawn#start"}
DateTime civilDuskStart {channel="astro:sun:home:civilDusk#start"}
Group:Switch gNachtlicht
Switch Shelly01 "Shelley 01" (gNachtlicht) {mqtt="blah"}
Switch Shelly03 "Shelley 01" (gNachtlicht) {mqtt="blah"}
Code: Alles auswählen
rule "Dämmerung"
when
System started or
Time cron "0 0 6 * * ?" or
Time cron "0 0 23 * * ?" or
Channel 'astro:sun:home:civilDawn#event' triggered START
Channel 'astro:sun:home:civilDusk#event' triggered START
then
if(civilDawnStart.state != NULL) {
var cDawn = new DateTime(civilDawnStart.state)
} else var cDawn = now.withTimeAtStartOfDay.plusHours(7)
if(civilDuskStart.state != NULL) {
var cDusk = new DateTime(civilDuskStart.state)
} else var cDusk = now.withTimeAtStartOfDay.plusHours(20)
var SwitchType mySwitch
if(now.getHourOfDay < 6 || now.getHourOfDay == 23) mySwitch = OFF
else if (now.isAfter(cDawn) && now.isBefore(cDusk)) mySwitch = OFF
else mySwitch = ON
gNachtlich.sendCommand(mySwitch)
logInfo("duskdawn","Nachtlicht {}",mySwitch)
end
Die Rule triggert also auf fünf verschiedene Ereignisse, System wurde gestartet (oder die Rule-Datei wurde erneut geladen), Es ist 6 Uhr, es ist 23 Uhr, es ist Sonnenaufgang, es ist Sonnenuntergang.
Innerhalb der Rule müssen nun all diese Bedingungen erneut geprüft werden, da nicht bekannt ist, welcher Trigger nun ausgelöst hat. Dafür braucht es nur eine Rule um das Licht ein- oder auszuschalten.
Der if-Block zu Beginn ist notwendig, da es keine Möglichkeit gibt, sicherzustellen, dass bei einem Systemstart bereits die Berechnungen des astro Bindings abgeschlossen wurden. Deshalb müssen für Sonnenauf- und Untergang sinnvolle Default-Werte gesetzt werden, damit es anschließend nicht zu einer Fehlermeldung kommt.
Alternativ kann man sich ein Default-Verhalten für diesen Fall überlegen (also z.B. dass das Licht ausgeschaltet wird, falls die Zeiten für Auf- und Untergang nicht bekannt sind) und die Rule entsprechend anders aufbauen, so dass nur eingeschaltet wird, falls die Zeiten gesetzt sind und der Zeitraum passt.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet