Seite 2 von 2

Re: OH3 - Leidiges Thema - Licht an/aus bei Sonnenauf-/untergang

Verfasst: 8. Mär 2021 07:19
von Rainer
Sehr guter Hinweis. Ich habe erst heute Morgen gemerkt das irgendwas nicht mehr funktioniert. :oops: Das Unterscheidet den Profi vom Laien. :)

Re: OH3 - Leidiges Thema - Licht an/aus bei Sonnenauf-/untergang

Verfasst: 26. Mär 2021 10:14
von Rainer
Die Rule hat so nicht funktioniert. Ich habe sie geändert in:

Code: Alles auswählen

rule "AutoBeleuchtung"            
    when
        Time cron "0 0/15 * * * ?"
    then
        val CurrentHour = ZonedDateTime.now.getHour
        if ((CurrentHour >=6 && CurrentHour <23) && (LokaleSonnendaten_Hohenwinkel.state as Number).floatValue <=0|°) TreppenhausEGShelly25_Betrieb2.sendCommand(ON)
       else TreppenhausEGShelly25_Betrieb2.sendCommand(OFF)
end
Wofür floatValue steht ist mir noch nicht ganz klar denn

Code: Alles auswählen

if ((CurrentHour >=6 && CurrentHour <23) && (LokaleSonnendaten_Hohenwinkel.state <=0|°)
macht den selben Job.

Was mir nicht gefällt ist, dass bei jeder Statusänderung des Sonnenwinkels auch der Aktor ein Kommando bekommt. Kann man das ändern?

Re: OH3 - Leidiges Thema - Licht an/aus bei Sonnenauf-/untergang

Verfasst: 26. Mär 2021 11:50
von peter-pan
Das "floatValue" bewirkt, dass die "Einheit(UoM)" aus dem Quantity-Item "LokaleSonnendaten_Hohenwinkel" eliminiert/gefiltert wird, also das "°".
Damit ist dann ein Vergleich mit einer einfachen Zahl (0) möglich.
Die andere Möglichkeit ist die, die du nun gewählt hast, nämlich einen Vergleich mit Einheit zu machen (0|°).

Eine Änderung der Regel, dahingehend, dass der Aktor nur geschaltet wird, wenn er noch nicht geschaltet wurde ist sicherlich möglich. du musst halt in deiner IF-Bedingung noch abfragen, ob der Schalter schon an ist. Aber Achtung, dann wird ein Mehrzeiler draus und du musst die Bedingung in geschweifte Klammern setzen ;)

Re: OH3 - Leidiges Thema - Licht an/aus bei Sonnenauf-/untergang

Verfasst: 26. Mär 2021 12:24
von Rainer
Peter, besten Dank. Ich werde das probieren und an dieser Stelle berichten. :)

Edit: Nachtrag
Die Rule läuft wie gewünscht. Keine unnötigen Befehle an den Aktor und ein wenig am Sonnenstand gespielt.

Code: Alles auswählen

rule "AutoBeleuchtung"            
    when
        Time cron "0 0/15 * * * ?"
    then
        val CurrentHour = ZonedDateTime.now.getHour
        if ((CurrentHour >=6 && CurrentHour <23) && LokaleSonnendaten_Hohenwinkel.state <=-2|°) {
        if (TreppenhausEGShelly25_Betrieb2.state == OFF) TreppenhausEGShelly25_Betrieb2.sendCommand(ON) }
        else { if (TreppenhausEGShelly25_Betrieb2.state == ON) TreppenhausEGShelly25_Betrieb2.sendCommand(OFF)
        }
end

Re: OH3 - Leidiges Thema - Licht an/aus bei Sonnenauf-/untergang

Verfasst: 27. Mär 2021 12:13
von peter-pan
...freut mich 👍

Re: OH3 - Leidiges Thema - Licht an/aus bei Sonnenauf-/untergang

Verfasst: 27. Mär 2021 19:54
von udo1toni
Ich nörgele ja immer...
Die Formatierung des Codes ist nicht so schön ;)
Es gibt einen Grenzfall, in dem die Rule nicht korrekt funktioniert, das ist, wenn das Item TreppenhausEGShelly25_Betrieb2 nicht initialisiert ist.
Sauberer:

Code: Alles auswählen

rule "AutoBeleuchtung"
when
    Time cron "0 0/15 * * * ?"
then
    val CurrentHour = ZonedDateTime.now.getHour
    var soll = OFF
    if(CurrentHour >= 6 && CurrentHour < 23 && LokaleSonnendaten_Hohenwinkel.state <= -2|°)
        soll = ON
    if(TreppenhausEGShelly25_Betrieb2.state != soll)
        TreppenhausEGShelly25_Betrieb2.sendCommand(soll.toString)
end
Die Rule nutzt eine lokale Variable, die mit dem Wert OFF vorblegt wird. Falls die erste bedingte Verzweigung erfüllt ist, wird der Wert auf ON geändert.
Anschließend wird der Ist-Status mit dem Soll-Status verglichen, bei Abweichung wird der entsprechende Befehl gesendet. Das .toString dient dazu, dass der Wert als Kommando interpretiert wird.