ja die vermaledeiten Klammern

Aber jetzt funktioniert es! [SOLVED]!!!!
Vielen Dank Udo und Dir!
Code: Alles auswählen
// Beginn der Datei
// globale Variablen
var Long lLStufe
rule "luefter geändert"
when
Item LuefterStufe changed
then
lLStufe = now.millis
end
rule "berechne Wirkungsgrad"
when
Item Abluft changed or
Item Zuluft changed or
Item Aussenluft changed
then
if(lLStufe + 15*60*1000 < now.millis && LuefterStufe.state.toString != "0"){
//Lüfter läuft bereits mindestens 15 Minuten auf der aktuellen Stufe
if(!(Abluft.state instanceof Number)) {
logWarn("Wirkungsgrad","Abluft.state not a Number: {}",Abluft.state)
return;
}
if(!(Zuluft.state instanceof Number)) {
logWarn("Wirkungsgrad","Zuluft.state not a Number: {}",Zuluft.state)
return;
}
if(!(Aussenluft.state instanceof Number)) {
logWarn("Wirkungsgrad","Aussenluft.state not a Number: {}",Aussenluft.state)
return;
}
val Number Aussenluft = (Aussenluft.state as Number)
val Number nDivisor = (Abluft.state as Number) - Aussenluft //Wert fuer Berechung gem. Westaflex
val Number nFaktor = (Zuluft.state as Number) - Aussenluft //Wert fuer Berechung gem. Westaflex
if(nDivisor == 0) {
logWarn("Wirkungsgrad","Aussentemperatur = Ablufttemperatur, Division durch 0!")
Wirkungsgrad.postUpdate(NULL)
} else
Wirkungsgrad.postUpdate((100*nFaktor/nDivisor).intValue) //Berechung gem. Westaflex
}
end
Code: Alles auswählen
2019-03-06 17:00:13.890 [vent.ItemStateChangedEvent] - LuefterStufe changed from NULL to 1
Code: Alles auswählen
2019-03-06 17:00:32.246 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'berechne Wirkungsgrad': An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.LongExtensions.operator_plus(long,int) on instance: null
Code: Alles auswählen
2019-03-06 17:00:48.183 [ome.event.ItemCommandEvent] - Item 'LuefterStufe' received command 0
2019-03-06 17:00:48.202 [nt.ItemStatePredictedEvent] - LuefterStufe predicted to become 0
2019-03-06 17:00:48.216 [vent.ItemStateChangedEvent] - LuefterStufe changed from 1 to 0
2019-03-06 17:00:52.568 [ome.event.ItemCommandEvent] - Item 'LuefterStufe' received command 1
2019-03-06 17:00:52.575 [nt.ItemStatePredictedEvent] - LuefterStufe predicted to become 1
2019-03-06 17:00:52.590 [vent.ItemStateChangedEvent] - LuefterStufe changed from 0 to 1
Code: Alles auswählen
rule "luefter geändert"
when
System started or
Item LuefterStufe changed
then
lLStufe = now.millis
end
Code: Alles auswählen
if(lLStufe === null) lLStufe = now.minusMinute(15)
Ja, aber das bezieht sich ja nur auf die Anlage, nicht auf openHAB. Wenn Du openHAB neu startest, dauert es halt 15 Minuten, bis das erste Mal Werte übermittelt werden, auch wenn Du die Anlage schon seit Stunden auf der gleichen Stufe laufen hast. Im Zweifel ist das zu verschmerzen.Peter Aschinger hat geschrieben: ↑7. Mär 2019 20:28 Ausserdem musste ich die Pause bis zum Start der Berechnung sowieso auf 15min verändern, da erst ab diesem Zeitpunkt
die Werte der Anlage nach Wiederanlauf aussagekräftig sind.
Code: Alles auswählen
// Beginn der Datei
// globale Variablen
var Long lLStufe
rule "luefter geändert"
when
System started or
Item LuefterStufe changed
then
lLStufe = now.millis
end
rule "berechne Wirkungsgrad"
when
Item Abluft changed or
Item Zuluft changed or
Item Aussenluft changed
then
if(lLStufe + 15*60*1000 < now.millis && LuefterStufe.state.toString != "0"){
//Lüfter läuft bereits mindestens 15 Minuten auf der aktuellen Stufe
if(!(Abluft.state instanceof Number)) {
logWarn("Wirkungsgrad","Abluft.state not a Number: {}",Abluft.state)
return;
}
if(!(Zuluft.state instanceof Number)) {
logWarn("Wirkungsgrad","Zuluft.state not a Number: {}",Zuluft.state)
return;
}
if(!(Aussenluft.state instanceof Number)) {
logWarn("Wirkungsgrad","Aussenluft.state not a Number: {}",Aussenluft.state)
return;
}
val Number Aussenluft = (Aussenluft.state as Number)
val Number nDivisor = (Abluft.state as Number) - Aussenluft //Wert fuer Berechung gem. Westaflex
val Number nFaktor = (Zuluft.state as Number) - Aussenluft //Wert fuer Berechung gem. Westaflex
if(nDivisor == 0) {
logWarn("Wirkungsgrad","Aussentemperatur = Ablufttemperatur, Division durch 0!")
Wirkungsgrad.postUpdate(NULL)
} else
Wirkungsgrad.postUpdate((100*nFaktor/nDivisor).intValue) //Berechung gem. Westaflex
}
end