2020-08-14 11:31:33.618 [vent.ItemStateChangedEvent] - AussenTemp changed from 21.0 to 20.9
2020-08-14 11:31:33.901 [INFO ] [rthome.model.script.Aussentemperatur] - stagnierend
2020-08-14 11:31:33.943 [vent.ItemStateChangedEvent] - AussenTemp_Tendenz_Proxy changed from 21.0 °C to 20.9 °C
rule "Aussentemperatur Tendenz ermitteln"
when
Item AussenTemp changed or
System started
//Time cron "0 * * * * ?"// jede Minute// jede Minute
then
if((AussenTemp.previousState.state as Number) > (AussenTemp_Tendenz_Proxy.state as Number)){
logInfo("Aussentemperatur", "steigend")
AussenTemp_Tendenz.postUpdate("steigend")
}
if((AussenTemp.previousState.state as Number) == (AussenTemp_Tendenz_Proxy.state as Number)){
logInfo("Aussentemperatur", "stagnierend")
AussenTemp_Tendenz.postUpdate("stagnierend")
}
if((AussenTemp.previousState.state as Number) < (AussenTemp_Tendenz_Proxy.state as Number)){
logInfo("Aussentemperatur", "fallend")
AussenTemp_Tendenz.postUpdate("fallend")
}
AussenTemp_Tendenz_Proxy.postUpdate((AussenTemp.state as Number).floatValue)
end
2020-08-14 11:40:33.833 [vent.ItemStateChangedEvent] - AussenTemp changed from 20.9 to 21.0
2020-08-14 11:40:34.000 [INFO ] [rthome.model.script.Aussentemperatur] - fallend
2020-08-14 11:40:34.185 [vent.ItemStateChangedEvent] - AussenTemp_Tendenz_Proxy changed from 20.9 °C to 21.0 °C
rule "Aussentemperatur Tendenz mit Proxy ermitteln"
when
Item Wetterstation1ACTUALTEMPERATURE changed
then
if(!(prevTemperatur.state instanceof Number)) {
prevTemperatur.postUpdate(0)
}
if((Wetterstation1ACTUALTEMPERATURE.state as Number).floatValue > prevTemperatur.state as Number) {
logInfo("Aussentemperatur", "steigt: "+(Wetterstation1ACTUALTEMPERATURE.state as Number).floatValue+" > "+prevTemperatur.state as Number)
}
if((Wetterstation1ACTUALTEMPERATURE.state as Number).floatValue == prevTemperatur.state as Number){
logInfo("Aussentemperatur", "stagniert: "+(Wetterstation1ACTUALTEMPERATURE.state as Number).floatValue+" = "+prevTemperatur.state as Number)
}
if((Wetterstation1ACTUALTEMPERATURE.state as Number).floatValue < prevTemperatur.state as Number){
logInfo("Aussentemperatur", "fällt: "+(Wetterstation1ACTUALTEMPERATURE.state as Number).floatValue+" < "+prevTemperatur.state as Number)
}
prevTemperatur.postUpdate((Wetterstation1ACTUALTEMPERATURE.state as Number).floatValue)
end
Frage: ist rrd4j tatsächlich der default Persistence Service? Weil, Du hast ja gar nicht angegeben, dass rrd4j abgefragt werden soll...
Abgesehen davon, da es um eine Rule geht, die auf changed triggert, benötigst Du weder die Persistence, noch benötigst Du ein 2. Item. Es reicht, newState und previousState zu vergleichen. Da changed der Trigger ist, kannst Du auch die stagnierende Meldung weg lassen.
Gesendet von iPad mit Tapatalk
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
udo1toni hat geschrieben: ↑14. Aug 2020 12:28
Es reicht, newState und previousState zu vergleichen. Da changed der Trigger ist, kannst Du auch die stagnierende Meldung weg lassen.
Wenn ich die Worte von Udo richtig interpretiere, bezieht sich das auf das Trigger-Item.
Edit: Hab noch ein Rule gefunden, wo ich mal damit rumgespielt habe:
rule "test Wind"
when
Item Dummy1 changed to ON or
Item localHourlyForecastWindSpeed_00 changed
then
logInfo("windspeed","Status previous: {} new: {}", previousState, newState)
var Number wg = ((localHourlyForecastWindSpeed_00.state as QuantityType<Number>).floatValue)
var wr = transform("SCALE", "wind.scale", localHourlyForecastWindDirection_00.state.toString)
var Number prevtest = (previousState as Number).floatValue
var String Ausgabe = String::format("%1$.0f km/h aus " +wr, wg)
logInfo("test_wind","Der Wind bläst mit " + Ausgabe + " : " + prevtest + " : " + wg)
SummaryStateWind.postUpdate(Ausgabe)
end
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian
rule "Aussentemperatur Tendenz mit previousState ermitteln"
when
Item Wetterstation1ACTUALTEMPERATURE changed
then
if (previousState as Number > newState as Number){
logInfo("Aussentemperatur_prev", "fällt")
}
if (newState as Number > previousState as Number){
logInfo("Aussentemperatur_prev", "steigt")
}
end
Kannst Du mal bitte zu den geschweiften Klammern etwas sagen? Kommen bei der Ruleabarbeitung die Werte (previousState, newState)
an Stelle der geschweiften Klammern?