OH3 - Leidiges Thema - Licht an/aus bei Sonnenauf-/untergang
-
Rainer
- Beiträge: 114
- Registriert: 28. Nov 2017 21:33
Re: OH3 - Leidiges Thema - Licht an/aus bei Sonnenauf-/untergang
Sehr guter Hinweis. Ich habe erst heute Morgen gemerkt das irgendwas nicht mehr funktioniert.
Das Unterscheidet den Profi vom Laien. 
-
Rainer
- Beiträge: 114
- Registriert: 28. Nov 2017 21:33
Re: OH3 - Leidiges Thema - Licht an/aus bei Sonnenauf-/untergang
Die Rule hat so nicht funktioniert. Ich habe sie geändert in:
Wofür floatValue steht ist mir noch nicht ganz klar denn
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?
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)
endCode: Alles auswählen
if ((CurrentHour >=6 && CurrentHour <23) && (LokaleSonnendaten_Hohenwinkel.state <=0|°)Was mir nicht gefällt ist, dass bei jeder Statusänderung des Sonnenwinkels auch der Aktor ein Kommando bekommt. Kann man das ändern?
- peter-pan
- Beiträge: 2814
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: OH3 - Leidiges Thema - Licht an/aus bei Sonnenauf-/untergang
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
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(trixie)/SSD 120GB - OH5.0.2 openhabian
-
Rainer
- Beiträge: 114
- Registriert: 28. Nov 2017 21:33
Re: OH3 - Leidiges Thema - Licht an/aus bei Sonnenauf-/untergang
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.
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- peter-pan
- Beiträge: 2814
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: OH3 - Leidiges Thema - Licht an/aus bei Sonnenauf-/untergang
...freut mich 
Pi5/8GB(PiOS Lite 64-bit(trixie)/SSD 120GB - OH5.0.2 openhabian
- udo1toni
- Beiträge: 15449
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: OH3 - Leidiges Thema - Licht an/aus bei Sonnenauf-/untergang
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:
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.
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)
endAnschließ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.
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.11, LXC)