Hallo,
so jetzt hab ich einigermaßen verstanden.
Und so sieht jetzt die Rule aus und funktioniert auch:
Code: Alles auswählen
rule "berechne Wirkungsgrad"
when
Item Abluft changed or
Item Zuluft changed or
Item Aussenluft changed
then
if(LuefterStufe.state.toString != "0" && LuefterStufe.state != NULL)
{
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
val Number nFaktor = (Zuluft.state as Number) - Aussenluft
if(nDivisor == 0) {
logWarn("Wirkungsgrad","Aussentemperatur = Ablufttemperatur, Division durch 0!")
Wirkungsgrad.postUpdate(NULL)
} else
Wirkungsgrad.postUpdate((100/nDivisor*nFaktor).intValue)
}
end
Jetzt gibt es aber auch noch ein weitere Methode um einen Wirkungsgrad zu berechnen. Und zwar im Bezug auf die Fortluft:
Formel: tAbluft – tFortluft / tAbluft – tAußenluft
Wie sähe dann die rule aus?
etwa so?
Code: Alles auswählen
rule "berechne Wirkungsgrad"
when
Item Abluft changed or
Item Zuluft changed or
Item Aussenluft changed or
Item Fort_Luft changed
then
if(LuefterStufe.state.toString != "0" && LuefterStufe.state != NULL)
{
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;
}
if(!(Fort_Luft.state instanceof Number)) {
logWarn("Wirkungsgrad","Fort_Luft.state not a Number: {}",Fort_Luft.state)
return;
}
val Number Aussenluft = (Aussenluft.state as Number)
val Number Fort_Luft = (Fort_Luft.state as Number)
val Number nDivisor = (Abluft.state as Number) - Aussenluft
val Number nFaktor = (Zuluft.state as Number) - Aussenluft
val Number nDivisor2 = (Abluft.state as Number) - Fort_Luft
if(nDivisor == 0) {
logWarn("Wirkungsgrad","Aussentemperatur = Ablufttemperatur, Division durch 0!")
Wirkungsgrad.postUpdate(NULL)
} else
Wirkungsgrad.postUpdate((100/nDivisor*nFaktor).intValue)
Wirkungsgrad2.postUpdate((100/nDivisor2*nFaktor).intValue)
}
end
Scheint zu funktionieren
2019-02-15 21:39:26.165 [vent.ItemStateChangedEvent] - Wirkungsgrad changed from 65 to 66
2019-02-15 21:39:26.173 [vent.ItemStateChangedEvent] - Wirkungsgrad2 changed from 80 to 81