Seite 3 von 14
Re: Temperatur Tendenz ermitteln
Verfasst: 14. Aug 2020 11:33
von PeterA
Wir kommen der Sache näher
Code: Alles auswählen
rule "Aussentemperatur Tendenz ermitteln"
when
Item AussenTemp changed or
System started
//Time cron "0 * * * * ?"// jede Minute// jede Minute
then
if((AussenTemp.previousState.state instanceof Number) > (AussenTemp_Tendenz_Proxy.state instanceof Number)){
logInfo("Aussentemperatur", "steigend")
AussenTemp_Tendenz.postUpdate("steigend")
}
if((AussenTemp.previousState.state instanceof Number) == (AussenTemp_Tendenz_Proxy.state instanceof Number)){
logInfo("Aussentemperatur", "stagnierend")
AussenTemp_Tendenz.postUpdate("stagnierend")
}
if((AussenTemp.previousState.state instanceof Number) < (AussenTemp_Tendenz_Proxy.state instanceof Number)){
logInfo("Aussentemperatur", "fallend")
AussenTemp_Tendenz.postUpdate("fallend")
}
AussenTemp_Tendenz_Proxy.postUpdate((AussenTemp.state as Number).floatValue)
end
Log:
Code: Alles auswählen
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
Aber weshalb wird auf stagnierend getriggert ?
Re: Temperatur Tendenz ermitteln
Verfasst: 14. Aug 2020 11:44
von violine21
Hier mal die letzten log's:
Code: Alles auswählen
2020-08-14 11:28:59.441 [INFO ] [rthome.model.script.Aussentemperatur] - steigt: 23.5 > 23.3
2020-08-14 11:28:59.448 [INFO ] [e.model.script.Aussentemperatur_pers] - stagniert: 23.50 °C =
2020-08-14 11:31:04.943 [INFO ] [e.model.script.Aussentemperatur_pers] - stagniert: 23.70 °C =
2020-08-14 11:31:04.954 [INFO ] [rthome.model.script.Aussentemperatur] - steigt: 23.7 > 23.5
2020-08-14 11:34:04.683 [INFO ] [e.model.script.Aussentemperatur_pers] - stagniert: 23.80 °C =
2020-08-14 11:34:04.699 [INFO ] [rthome.model.script.Aussentemperatur] - steigt: 23.8 > 23.7
2020-08-14 11:39:20.722 [INFO ] [e.model.script.Aussentemperatur_pers] - stagniert: 23.60 °C =
2020-08-14 11:39:20.725 [INFO ] [rthome.model.script.Aussentemperatur] - fällt: 23.6 < 23.8
Die
sind mit der Persistence (previousState) geloggt. Hier stagniert's nur
Die
mit dem Proxy-Item ohne Persistence.
Irgend eine "Schweinerei" scheint rrd4j vor uns zu verbergen

Re: Temperatur Tendenz ermitteln
Verfasst: 14. Aug 2020 11:51
von PeterA
So noch mal etwas anderer Code:
Code: Alles auswählen
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
Log:
Code: Alles auswählen
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
????
Re: Temperatur Tendenz ermitteln
Verfasst: 14. Aug 2020 12:05
von violine21
In meinem Code
mit dem Proxy-Item verzichte ich komplett auf die Persistence (previousState)
Damit läuft es
Code: Alles auswählen
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
Re: Temperatur Tendenz ermitteln
Verfasst: 14. Aug 2020 12:28
von udo1toni
Also, warum...
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
Re: Temperatur Tendenz ermitteln
Verfasst: 14. Aug 2020 12:51
von PeterA
Kann es sein das "newState" mit OH 2.4 noch nicht funktioniert ?
Re: Temperatur Tendenz ermitteln
Verfasst: 14. Aug 2020 13:04
von violine21
udo1toni hat geschrieben: ↑14. Aug 2020 12:28benötigst Du weder die Persistence
Sorry, klassischer Ausdrucksfehler
Ich bringe Persistence und previousState immer irgendwie in Verbindung
udo1toni hat geschrieben: ↑14. Aug 2020 12:28newState
Muß das so angegeben werden?
Code: Alles auswählen
(Wetterstation1ACTUALTEMPERATURE.newState().state as Number).floatValue
Das funktioniert bei mir nicht.
Und mit dem "normalen" .state funktioniert der Vergleich irgendwie nicht wie erwartet.
Re: Temperatur Tendenz ermitteln
Verfasst: 14. Aug 2020 13:34
von peter-pan
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:
Code: Alles auswählen
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
Re: Temperatur Tendenz ermitteln
Verfasst: 14. Aug 2020 14:01
von PeterA
So dachte ich funktionierts.... dachte ich.... :/
Code: Alles auswählen
rule "Aussentemperatur Tendenz ermitteln"
when
Item AussenTemp changed or
System started
//Time cron "0 * * * * ?"// jede Minute// jede Minute
then
if(!(AussenTemp_Tendenz_Proxy.state instanceof Number)) {
AussenTemp_Tendenz_Proxy.postUpdate(0)
}
if((AussenTemp.state as Number) > (AussenTemp_Tendenz_Proxy.state as Number)){
logInfo("Aussentemperatur", "steigend")
AussenTemp_Tendenz.postUpdate("steigend")
}
if((AussenTemp.state as Number) == (AussenTemp_Tendenz_Proxy.state as Number)){
logInfo("Aussentemperatur", "stagnierend")
AussenTemp_Tendenz.postUpdate("stagnierend")
}
if((AussenTemp.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
Log:
Code: Alles auswählen
2020-08-14 13:10:42.293 [vent.ItemStateChangedEvent] - AussenTemp changed from 20.7 to 20.6
2020-08-14 13:10:42.532 [INFO ] [rthome.model.script.Aussentemperatur] - fallend
2020-08-14 13:10:42.886 [vent.ItemStateChangedEvent] - AussenTemp_Tendenz_Proxy changed from 20.7 to 20.6
2020-08-14 13:29:42.887 [vent.ItemStateChangedEvent] - AussenTemp changed from 20.6 to 20.5
2020-08-14 13:29:42.955 [INFO ] [rthome.model.script.Aussentemperatur] - fallend
2020-08-14 13:29:43.032 [vent.ItemStateChangedEvent] - AussenTemp_Tendenz_Proxy changed from 20.6 to 20.5
2020-08-14 13:33:42.960 [vent.ItemStateChangedEvent] - AussenTemp changed from 20.5 to 20.4
2020-08-14 13:33:43.067 [INFO ] [rthome.model.script.Aussentemperatur] - fallend
2020-08-14 13:33:43.086 [vent.ItemStateChangedEvent] - AussenTemp_Tendenz_Proxy changed from 20.5 to 20.4
2020-08-14 13:55:02.004 [vent.ItemStateChangedEvent] - AussenTemp changed from 20.4 to 20.5
2020-08-14 13:59:15.729 [vent.ItemStateChangedEvent] - AussenTemp changed from 20.5 to 20.6
Triggert brav auf fallend aber nicht auf steigend ???
Edit:
Jetzt wurde auf steigend getriggert......
Code: Alles auswählen
2020-08-14 14:33:12.915 [vent.ItemStateChangedEvent] - AussenTemp changed from 21.8 to 21.9
2020-08-14 14:33:43.401 [INFO ] [rthome.model.script.Aussentemperatur] - steigend
2020-08-14 14:33:43.589 [vent.ItemStateChangedEvent] - AussenTemp_Tendenz changed from fallend to steigend
Edit 2:
Scheint wohl doch zu funktionieren....
Code: Alles auswählen
2020-08-14 14:39:06.125 [INFO ] [rthome.model.script.Aussentemperatur] - steigend
2020-08-14 14:39:06.167 [vent.ItemStateChangedEvent] - AussenTemp_Tendenz_Proxy changed from 21.9 to 22.2
2020-08-14 14:39:27.338 [INFO ] [rthome.model.script.Aussentemperatur] - stagnierend
2020-08-14 14:39:27.365 [vent.ItemStateChangedEvent] - AussenTemp_Tendenz changed from steigend to stagnierend
2020-08-14 14:39:54.399 [INFO ] [rthome.model.script.Aussentemperatur] - stagnierend
2020-08-14 14:40:15.777 [INFO ] [rthome.model.script.Aussentemperatur] - stagnierend
2020-08-14 14:40:17.741 [vent.ItemStateChangedEvent] - AussenTemp changed from 22.2 to 22.3
2020-08-14 14:40:31.729 [INFO ] [rthome.model.script.Aussentemperatur] - steigend
2020-08-14 14:40:31.768 [vent.ItemStateChangedEvent] - AussenTemp_Tendenz changed from stagnierend to steigend
2020-08-14 14:40:31.789 [vent.ItemStateChangedEvent] - AussenTemp_Tendenz_Proxy changed from 22.2 to 22.3
2020-08-14 14:40:49.782 [INFO ] [rthome.model.script.Aussentemperatur] - stagnierend
2020-08-14 14:40:49.808 [vent.ItemStateChangedEvent] - AussenTemp_Tendenz changed from steigend to stagnierend
2020-08-14 14:41:03.975 [INFO ] [rthome.model.script.Aussentemperatur] - stagnierend
2020-08-14 14:41:16.372 [INFO ] [rthome.model.script.Aussentemperatur] - stagnierend
2020-08-14 14:41:17.912 [vent.ItemStateChangedEvent] - AussenTemp changed from 22.3 to 22.4
2020-08-14 14:41:33.051 [INFO ] [rthome.model.script.Aussentemperatur] - steigend
2020-08-14 14:41:33.069 [vent.ItemStateChangedEvent] - AussenTemp_Tendenz changed from stagnierend to steigend
2020-08-14 14:41:33.112 [vent.ItemStateChangedEvent] - AussenTemp_Tendenz_Proxy changed from 22.3 to 22.4
2020-08-14 14:41:39.730 [INFO ] [rthome.model.script.Aussentemperatur] - stagnierend
2020-08-14 14:41:39.746 [vent.ItemStateChangedEvent] - AussenTemp_Tendenz changed from steigend to stagnierend
2020-08-14 14:42:04.041 [INFO ] [rthome.model.script.Aussentemperatur] - stagnierend
2020-08-14 14:42:17.848 [vent.ItemStateChangedEvent] - AussenTemp changed from 22.4 to 22.5
2020-08-14 14:42:48.060 [INFO ] [rthome.model.script.Aussentemperatur] - steigend
2020-08-14 14:42:48.147 [vent.ItemStateChangedEvent] - AussenTemp_Tendenz changed from stagnierend to steigend
2020-08-14 14:42:48.176 [vent.ItemStateChangedEvent] - AussenTemp_Tendenz_Proxy changed from 22.4 to 22.5
2020-08-14 14:43:01.151 [INFO ] [rthome.model.script.Aussentemperatur] - stagnierend
2020-08-14 14:43:01.176 [vent.ItemStateChangedEvent] - AussenTemp_Tendenz changed from steigend to stagnierend
Re: Temperatur Tendenz ermitteln
Verfasst: 14. Aug 2020 18:38
von violine21
peter-pan hat geschrieben: ↑14. Aug 2020 13:34
Wenn ich die Worte von Udo richtig interpretiere, bezieht sich das auf das Trigger-Item.
Ah!!!

Du meinst etwa so:
Code: Alles auswählen
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
Ich lass das jetzt mal laufen und beobachte.
Nachtrag:
Code: Alles auswählen
2020-08-14 18:33:12.558 [INFO ] [e.model.script.Aussentemperatur_prev] - fällt
2020-08-14 18:33:12.578 [INFO ] [rthome.model.script.Aussentemperatur] - fällt: 21.1 < 21.2
2020-08-14 18:39:01.581 [INFO ] [e.model.script.Aussentemperatur_prev] - steigt
2020-08-14 18:39:01.588 [INFO ] [rthome.model.script.Aussentemperatur] - steigt: 21.2 > 21.1
Kaum macht man etwas richtig, funktionierts!
logInfo("windspeed","Status previous: {} new: {}", previousState, newState)
Kannst Du mal bitte zu den geschweiften Klammern etwas sagen? Kommen bei der Ruleabarbeitung die Werte (previousState, newState)
an Stelle der geschweiften Klammern?