Aber ein anderer Ansatz:
Code: Alles auswählen
rule "RenaultZEService Zoe send broadcast if under certain limit"
when
System started or
Item RenaultZEServices_Zoe_RemainingRange changed
then
if(RenaultZEServices_Zoe_Charging.state.toString != "Not charging") { // falscher Zustand, also Abbruch
logInfo("RemainingRange","Charging Status ist {}. Deshalb Abbruch!",RenaultZEServices_Zoe_Charging.state)
return; // das Semikolongehört da hin!
}
var Number nNewState = 0 // Variable für aktuelle Reichweite
if(RenaultZEServices_Zoe_RemainingRange.state instanceof Number) // Falls gültige Zahl im Status
nNewState = RenaultZEServices_Zoe_RemainingRange.state as Number // Variable setzen
var Number nOldState = 100 // Variable für alte Reichweite
if(previousState instanceof Number) // Falls gültige Zahl
nOldState = previousState as Number // Variable setzen
var Number nLevel = 0 // Variable für Level
if(RenaultZEServices_Zoe_ChargeLevel.state instanceof Number) // Falls gültige Zahl
nLevel = RenaultZEServices_Zoe_ChargeLevel.state as Number // Variable setzen
if(nOldState >= 100 && nNewState < 100) { // Falls Reichweite unter 100 gesunken
sendBroadcastNotification("Achtung! Restreichweite: " + nNewState.toString +"km Ladestatus: " + nLevel.toString + "%" )
logInfo("RemainingRange", "Remaining Range unter 100 km")
}
if(nOldState >= 50 && nNewState < 50) { // Falls Reichweite unter 100 gesunken
sendBroadcastNotification("Kritisch! Restreichweite: " + nNewState.toString +"km Ladestatus: " + nLevel.toString + "%" )
logInfo("RemainingRange", "Remaining Range unter 50 km")
}
end
Da die Rule auch auf System started triggern soll, muss das berücksichtigt werden. Es könnte z.B. sein, dass die Items noch gar nicht initialisiert sind. previousState ist bei der ersten Wertänderung NULL, hier käme es also sicher zu einem Problem. Mit vorbelegten Variablen wird das Problem umgangen.
Sollten previousState und RemainingRange beide nicht initialisiert sein, werden zwei Notifications geschickt. MAn kann das verhindern, aber vielleicht ist das Verhalten sogar gut? Das dürfte ohnehin nur beim Systemstart der Fall sein (nicht beim Reload der Rule-Datei, obwohl sie dann ebenfalls triggert).