Es gibt ein paar Meldungen darüber, dass die nicht finale Variable innerhalb des Lambdas nicht definiert sei. Ich hätte eigentlich erwartet, dass das Lambda in diesem Fall die Variable erbt, aber das ist anscheinend nicht der Fall. Also müssen die Variablen global definiert werden. Das ändert aber nichts an der Funktion als solcher, nur dass die Variablen eben schon im Kopf der Datei aufgeführt werden.
An einer Stelle habe ich eine Definition zu arg gekürzt, im Eifer des Gefechts... aber das führt nun zu einer weiteren Verkürzung denn man kann lfAvg den Wert 0 auch schon bei der Definition zuweisen und spart sich damit noch ein paar Klammern im else-Teil. Die restlichen Fehler sind Folgefehler der fehlerhaften Definition von lfAvg.
Nun also so:
Code: Alles auswählen
// globale Variablen zu Beginn der Datei definieren!
var Integer lfSumme=0
var lfMax=0
var Integer lfCnt=0
rule "PluggitLuftfeuchtigkeit" // bestimme die durchschnittliche und maximale Luftfeuchte
when
Member of gPluggit_Items_Luftfeuchtigkeit changed
then
lfSumme=0
lfMax=0
lfCnt=0
gPluggit_Items_Luftfeuchtigkeit.members.filter[i |
i.state instanceof Number].forEach[ item |
lfCnt+=1
val lf=(item.state as Number).intValue
lfSumme+=lf
if (lf>lfMax) lfMax=lf
]
var lfAvg=0
if (lfCnt>=2) lfAvg=lfSumme/lfCnt // nur bei mindestens 2 Werten ist es sinnvoll, die Werte zu betrachten
else lfMax=0
var newState=Pluggit_Status_Luftfeuchte.state
if (lfMax>=65 || lfAvg>=60) newState=ON // Bei mehr als max 65% oder avg 60% Luftfeuchtigkeit lüfte.
else if (lfMax<60) newState=OFF // fällt die Luftfeuchte aller Stationen unter 60%, wurde genug gelüftet
if(Pluggit_Status_Luftfeuchte.state != newState)
Pluggit_Status_Luftfeuchte.postUpdate(newState)
end