rule "Sonnenaufgang"
when
Channel 'astro:sun:home:rise#event' triggered START
then
sNacht.postUpdate(OFF)
end
rule "Sonnenuntergang"
when
Channel 'astro:sun:home:set#event' triggered START
then
sNacht.postUpdate(ON)
end
rule "Fernsehlicht an"
when
Item Onkyo_Power1 changed to ON or
Item sNacht changed to ON
then
if(Onkyo_Power1.state == ON && sNacht.state == ON)
if(Sonoff_S20_1_Switch.state == OFF) Sonoff_S20_1_Switch.sendCommand(ON)
end
rule "Fernsehlicht aus"
when
Item Onkyo_Power1 changed to OFF
then
if(Sonoff_S20_1_Switch.state == ON){
createTimer(now.plusSeconds(120), [|
Sonoff_S20_1_Switch.sendCommand(OFF)
])
}
end
damit wird über meine Onkyo-Anlage das Fernsehlicht bei Sonnenuntergang eingeschaltet.
Nun wird das Licht je nach Bewölkung erst eingeschaltet, wenn es schon dunkel ist.
rule "Fernsehlicht"
when
Channel 'astro:sun:home:rise#event' triggered START or
Channel 'astro:sun:home:set#event' triggered START or
Item Clouds changed or
Item Onkyo_Power1 changed
then
if(receivedEvent == "astro:sun:home:rise") // bitte prüfen, ob das receivedEvent tatsächlich so lautet
sNacht.postUpdate(OFF)
else if(receivedEvent == "astro:sun:home:set") // bitte prüfen, ob das receivedEvent tatsächlich so lautet
sNacht.postUpdate(ON)
Thread::sleep(300)
var newState = OFF
if(Onkyo_Power1.state == ON && (sNacht.state == ON || (Clouds.state as Number).floatValue > 70) )
newState = ON
if(Sonoff_S20_1_Switch.state != newState) Sonoff_S20_1_Switch.sendCommand(newState)
end
Wahlweise kannst Du eine globale Variable verwenden, um Nacht/Tag zu speichern, dann kannst Du auf das Thead::sleep() verzichten. Hier geht es darum, openHAB etwas Zeit zu geben, das Item zu ändern.
Da wir im zweiten Teil der Rule auf das Item zugreifen, ist das Timing hier etwas kritisch (openHAB setzt auf asynchrone Verarbeitung, das heißt, das Setzen des Status passiert in einem eigenen Thread. Die Rule läuft inzwischen weiter...)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
vielen Dank für deine Erklärung.
Ich wollte aber eigentlich die Formel nach folgendem Format einbauen:
"Licht Ein" wenn "(Sonnenuntergang-50min) + 50-Bewölkungsgrad/2"
Den Sonnenuntergang-50min habe ich schon hinbekommen. Da habe ich im Astro-Thing einen Offset eingetragen.
Meine Idee wäre dann einen Timer zu starten, der die entsprechende Zeit läuft.
Also bei 0% Bewölkung wird das Licht bei Sonnenuntergang geschaltet und bei 50% Bewölkung dann 25min früher.
Jetzt habe ich aber keine Ahnung wie ich die Bewölkung (Clouds) in den Timer bekomme.
Kannst du mir dabei helfen? Funktioniert mein Ansatz überhaupt?
micha
-------------------------------------------------------------------------
openHab4.3.3 auf Synology DS918+
Na ja, ob das den gewünschten Effekt liefert? Aber egal, es geht ja auch ums Prinzip.
In dem Fall spielt es dann keine Rolle, ob sich die Bewölkung ändert, es geht nur um den Bewölkungsgrad zum Zeitpunkt des Sonnenuntergang Triggers (der ja 50 Minuten vor Sonnenuntergang erfolgt):
var Timer tSunset = null
rule "Tag-Nacht Umschaltung"
when
Channel 'astro:sun:home:rise#event' triggered START or
Channel 'astro:sun:home:set#event' triggered START
then
if(receivedEvent == "astro:sun:home:rise") // bitte prüfen, ob das receivedEvent tatsächlich so lautet
sNacht.postUpdate(OFF)
else if(receivedEvent == "astro:sun:home:set") // bitte prüfen, ob das receivedEvent tatsächlich so lautet
tSunset?.cancel
tSunset = createTimer(now.plusMinutes(50 - ((Clouds.state as Number).floatValue/2).intValue), [ |
sNacht.postUpdate(ON)
tSunset = null
])
end
rule "Fernsehlicht"
when
Item sNacht changed or
Item Onkyo_Power1 changed
then
var newState = OFF
if(Onkyo_Power1.state == ON && sNacht.state == ON)
newState = ON
if(Sonoff_S20_1_Switch.state != newState) Sonoff_S20_1_Switch.sendCommand(newState)
end
Nun ist es sinnvoller, die beiden Teile der Rule zu trennen Das Ganze ist trotzdem kompakt und, wie ich hoffe, gut verständlich.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet