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

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Rainer
Beiträge: 114
Registriert: 28. Nov 2017 21:33
Answers: 0

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

Beitrag von Rainer »

Sehr guter Hinweis. Ich habe erst heute Morgen gemerkt das irgendwas nicht mehr funktioniert. :oops: Das Unterscheidet den Profi vom Laien. :)

Rainer
Beiträge: 114
Registriert: 28. Nov 2017 21:33
Answers: 0

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

Beitrag 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?

Benutzeravatar
peter-pan
Beiträge: 2773
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

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

Beitrag 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 ;)
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Rainer
Beiträge: 114
Registriert: 28. Nov 2017 21:33
Answers: 0

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

Beitrag 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

Benutzeravatar
peter-pan
Beiträge: 2773
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

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

Beitrag von peter-pan »

...freut mich 👍
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

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

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

Beitrag 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.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten