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.

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.