Wetterdaten mit Sonnenuntergang verknüpfen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
m.i.c.h.a
Beiträge: 22
Registriert: 4. Apr 2019 10:47
Answers: 0

Wetterdaten mit Sonnenuntergang verknüpfen

Beitrag von m.i.c.h.a »

Hallo,
ich habe folgende Rule:

Code: Alles auswählen

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.

Code: Alles auswählen

Number   Clouds   "Clouds [%.0f %%]"   {weather="locationId=home-FIO, type=clouds, property=percent"}
Wie kann ich die Bewölkung über das Weatherbinding mit verknüpfen?
micha
-------------------------------------------------------------------------
openHab4.3.3 auf Synology DS918+

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

Re: Wetterdaten mit Sonnenuntergang verknüpfen

Beitrag von udo1toni »

Du brauchst nur zusätzliche Eigenschaften abzufragen. Das Ganze geht in einer einzigen Rule, ungefähr so:

Code: Alles auswählen

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

m.i.c.h.a
Beiträge: 22
Registriert: 4. Apr 2019 10:47
Answers: 0

Re: Wetterdaten mit Sonnenuntergang verknüpfen

Beitrag von m.i.c.h.a »

Hallo udo1toni,

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+

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

Re: Wetterdaten mit Sonnenuntergang verknüpfen

Beitrag von udo1toni »

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):

Code: Alles auswählen

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

Antworten