Temperatur Tendenz ermitteln

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Benutzeravatar
PeterA
Beiträge: 1106
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Temperatur Tendenz ermitteln

Beitrag 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 ?
- OpenHab 2.4
#PWRUP

violine21
Beiträge: 600
Registriert: 20. Sep 2019 05:49
Answers: 7

Re: Temperatur Tendenz ermitteln

Beitrag 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 ;)

Benutzeravatar
PeterA
Beiträge: 1106
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Temperatur Tendenz ermitteln

Beitrag 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

????
- OpenHab 2.4
#PWRUP

violine21
Beiträge: 600
Registriert: 20. Sep 2019 05:49
Answers: 7

Re: Temperatur Tendenz ermitteln

Beitrag 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

Benutzeravatar
udo1toni
Beiträge: 15265
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Temperatur Tendenz ermitteln

Beitrag 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
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Benutzeravatar
PeterA
Beiträge: 1106
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Temperatur Tendenz ermitteln

Beitrag von PeterA »

Kann es sein das "newState" mit OH 2.4 noch nicht funktioniert ?
- OpenHab 2.4
#PWRUP

violine21
Beiträge: 600
Registriert: 20. Sep 2019 05:49
Answers: 7

Re: Temperatur Tendenz ermitteln

Beitrag 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.

Benutzeravatar
peter-pan
Beiträge: 2768
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Temperatur Tendenz ermitteln

Beitrag 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
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Benutzeravatar
PeterA
Beiträge: 1106
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Temperatur Tendenz ermitteln

Beitrag 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
- OpenHab 2.4
#PWRUP

violine21
Beiträge: 600
Registriert: 20. Sep 2019 05:49
Answers: 7

Re: Temperatur Tendenz ermitteln

Beitrag 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?

Antworten