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

Code: Alles auswählen

Aussentemperatur_pers
sind mit der Persistence (previousState) geloggt. Hier stagniert's nur :?
Die

Code: Alles auswählen

Aussentemperatur
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 :oops:
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!!! :idea: 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?