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 »

violine21 hat geschrieben: 1. Sep 2020 19:43 Cool, was man mit OpenHAB alles machen kann! Hut ab!
Allerdings wüßte ich schon, was Du Dir zu Weihnachten wünschen kannst. Eine neue Uhr ;) ;) ;)
Die ist schon ganz schön ramponiert!
Quatsch. Das zerkratze ist nur ein aufgeklebter Aluring. Da drunter ist die original Krone.
- OpenHab 2.4
#PWRUP

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

Re: Temperatur Tendenz ermitteln

Beitrag von violine21 »

Um welches Model handelt es sich denn?

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

Re: Temperatur Tendenz ermitteln

Beitrag von PeterA »

violine21 hat geschrieben: 2. Sep 2020 19:56 Um welches Model handelt es sich denn?
Galaxy Watch
- OpenHab 2.4
#PWRUP

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

Re: Temperatur Tendenz ermitteln

Beitrag von PeterA »

Um mal on Topic zu bleiben :) frage ich die Kompetenz hier ob sich folgende Rules vereinfachen liessen ?

Code: Alles auswählen

rule "Aussentemperatur Tendenz ermitteln / Update Kombi Item"
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).floatValue > (AussenTemp_Tendenz_Proxy.state as Number)){
        logInfo("Aussentemperatur", "steigend")
        AussenTemp_Tendenz.postUpdate("⬆️")
    }
    //if((AussenTemp.state as Number).floatValue == (AussenTemp_Tendenz_Proxy.state as Number)){
    //    logInfo("Aussentemperatur", "stagnierend")
    //    AussenTemp_Tendenz.postUpdate("⟷")
    //}
    if((AussenTemp.state as Number).floatValue < (AussenTemp_Tendenz_Proxy.state as Number)){
        logInfo("Aussentemperatur", "fallend")
        AussenTemp_Tendenz.postUpdate("⬇️")
    }
   AussenTemp_Tendenz_Proxy.postUpdate((AussenTemp.state as Number).floatValue)
   LaCrosse_Aussen_Kombi.postUpdate(AussenTemp_Tendenz.state.toString + " " + AussenTemp.state + " °C / " + AussenFeuchte_Tendenz.state.toString + " " + AussenFeuchte.state.toString + " ")
end

rule "AussenFeuchte Tendenz ermitteln / Update Kombi Item"
when
    Item AussenFeuchte changed or
    System started
    //Time cron "0 * * * * ?"// jede Minute// jede Minute
then
    if(!(AussenFeuchte_Tendenz_Proxy.state instanceof Number)) {
        AussenFeuchte_Tendenz_Proxy.postUpdate(0)
    }
    if((AussenFeuchte.state as Number).floatValue > (AussenFeuchte_Tendenz_Proxy.state as Number)){
        logInfo("Aussenfeuchte", "steigend")
        AussenFeuchte_Tendenz.postUpdate("⬆️")
    }
    //if((AussenFeuchte.state as Number) == (AussenFeuchte_Tendenz_Proxy.state as Number)){
    //    logInfo("Aussenfeuchtee", "stagnierend")
    //    AussenFeuchte_Tendenz.postUpdate("⟷")
    //}
    if((AussenFeuchte.state as Number).floatValue < (AussenFeuchte_Tendenz_Proxy.state as Number)){
        logInfo("Aussenfeuchte", "fallend")
        AussenFeuchte_Tendenz.postUpdate("⬇️")
    }
   AussenFeuchte_Tendenz_Proxy.postUpdate((AussenFeuchte.state as Number).floatValue)
   LaCrosse_Aussen_Kombi.postUpdate(AussenTemp_Tendenz.state.toString + " " + AussenTemp.state + " °C / " + AussenFeuchte_Tendenz.state.toString + " " + AussenFeuchte.state.toString + " ")
end
Es sind zwei Rules. Das Temp und Feuchte Item kommen aber vom gleichen Sensor.
Triggern auch nicht gleichzeitig. Aber könnte man das nicht nicht eine Rule zusammen fassen ?
- OpenHab 2.4
#PWRUP

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

Re: Temperatur Tendenz ermitteln

Beitrag von udo1toni »

Ja sicher. Es ist zwar kaum etwas dabei zu gewinnen, aber zumindest sieht es etwas aufgeräumter aus.

Code: Alles auswählen

rule "Update Kombi Item"
when
    Item AussenTemp changed or
    Item AussenFeuchte changed or
    System started
    //Time cron "0 * * * * ?"// jede Minute// jede Minute
then
    val Number nTempTendence = if(AussenTemp_Tendenz_Proxy.state instanceof Number) (AussenTemp_Tendenz_Proxy.state as Number) else 0
    val Number nHumTendence  = if(AussenFeuchte_Tendenz_Proxy.state instanceof Number) (AussenFeuchte_Tendenz_Proxy.state as Number) else 0
    val Number nTemp = if(AussenTemp.state instanceof Number) (AussenTemp.state as Number).floatValue else nTempTendence
    val Number nHum  = if(AussenFeuchte.state instanceof Number) (AussenFeuchte.state as Number).floatValue else nHumTendence
    var String strTempTendence = "⟷"
    var String strTempMessage = "stagnierend"
    if(nTemp < nTempTendence) {
        strTempTendence = "⬆️"
        strTempMessage = "steigend"
    }
    if(nTemp > nTempTendence) {
        strTempTendence = "⬇️"
        strTempMessage = "fallend"
    }
    logInfo("temphum","Aussentemperatur {}",strTempMessage)
    AussenTemp_Tendenz.postUpdate(strTempTendence)
    AussenTemp_Tendenz_Proxy.postUpdate(nTemp)
    var String strHumTendence = "⟷"
    var String strHumMessage = "stagnierend"
    if(nHum < nHumTendence) {
        strHumTendence = "⬆️"
        strHumMessage = "steigend"
    }
    if(nHum > nHumTendence) {
        strHumTendence = "⬇️"
        strHumMessage = "fallend"
    }
    logInfo("temphum","Aussenfeuchte {}",strHumMessage)
    AussenFeuchte_Tendenz.postUpdate(strHumTendence)
    AussenFeuchte_Tendenz_Proxy.postUpdate(nHum)
    LaCrosse_Aussen_Kombi.postUpdate(strTempTendence + " " + nTemp.toString + " °C / " + strHumTendence + " " + nHum.toString + " %")
end
Bitte immer darauf achten, die Log-Befehle korrekt zu verwenden ;)
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 »

Allright.
Das würde die Anzahl der Rules schon erheblich von derzeit 28 (14 Temp und 14 Feuchte items) auf 14 Rules reduzieren.
Könnte man hier nicht auch etwas mit dieser Gruppenfilter Funktion machen ?
Denn alle Temperatur und Feuchte Items sind in einer Gruppe. Alle Items enden mit der Bezeichnung "Temp" und "Feuchte".

Gruß Peter
- OpenHab 2.4
#PWRUP

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

Re: Temperatur Tendenz ermitteln

Beitrag von udo1toni »

Ja sicher :) das sollte kein unlösbares Problem sein :)

Du brauchst für jede Sorte Items eine eigene Gruppe. Der Sensorname (also z.B. "Aussen") muss bei allen Items jeweils identisch sein, an 1. Stelle stehen und ein Unterstrich muss folgen. Also z.B.

Code: Alles auswählen

Group gTempTendenz
Group gTempProxy
Group gHumTendenz
Group gHumProxy
Group gTemp
Group gHum
Group gKombi

String Aussen_TempTendenz "Außentemp. Tendenz [%s]"   (gTempTendenz)
Number Aussen_TempProxy   "Außentemp. Proxy [%s]"     (gTempProxy)
String Aussen_HumTendenz  "Außenfeuchte Tendenz [%s]" (gHumTendenz)
Number Aussen_HumProxy    "Außenfeuchte Proxy [%s]"   (gHumProxy)
Number Aussen_Temp        "Außentemp. [%s]"           (gTemp)
Number Aussen_Hum         "Außenfeuchte [%s]"         (gHum)
String Aussen_Kombi       "Außen [%s]"                (gKombi)
Die anderen Items jeweils entsprechend.
Nun reicht eine Rule:

Code: Alles auswählen

rule "Update Kombi Item"
when
    Member of gTemp changed or
    Member of gFeuchte changed
then
    val String strSensor = triggeringItem.name.split("_").get(0)                                                        // Sensor bestimmen
                                                                                                                        // zugehörige Items bestimmen
    val ItemTempTendenz = gTempTendenz.members.findFirst[i|i.name.split("_").get(0) == strSensor] as StringItem
    val ItemTempProxy   =   gTempProxy.members.findFirst[i|i.name.split("_").get(0) == strSensor] as NumberItem
    val ItemHumTendenz  =  gHumTendenz.members.findFirst[i|i.name.split("_").get(0) == strSensor] as StringItem
    val ItemHumProxy    =    gHumProxy.members.findFirst[i|i.name.split("_").get(0) == strSensor] as NumberItem
    val ItemTemp        =        gTemp.members.findFirst[i|i.name.split("_").get(0) == strSensor] as NumberItem
    val ItemHum         =         gHum.members.findFirst[i|i.name.split("_").get(0) == strSensor] as NumberItem
    val ItemKombi       =       gKombi.members.findFirst[i|i.name.split("_").get(0) == strSensor] as StringItem
                                                                                                                        // Werte bestimmen
    val Number nTempTendence = if(ItemTempProxy.state instanceof Number) (ItemTempProxy.state as Number) else 0
    val Number nHumTendence  = if(ItemHumTendenz.state instanceof Number) (ItemHumTendenz.state as Number) else 0
    val Number nTemp = if(ItemTemp.state instanceof Number) (ItemTemp.state as Number).floatValue else nTempTendence
    val Number nHum  = if(ItemHum.state instanceof Number) (ItemHum.state as Number).floatValue else nHumTendence
                                                                                                                        // Tendenz Temperatur
    var String strTempTendence = "⟷"
    var String strTempMessage = "stagnierend"
    if(nTemp < nTempTendence) {
        strTempTendence = "⬆️"
        strTempMessage = "steigend"
    }
    if(nTemp > nTempTendence) {
        strTempTendence = "⬇️"
        strTempMessage = "fallend"
    }
    logInfo("temphum","Sensor {} Temperatur {}",strSensor,strTempMessage)
    ItemTempTendenz.postUpdate(strTempTendence)
    ItemTempProxy.postUpdate(nTemp)
                                                                                                                        // Tendenz Feuchte
    var String strHumTendence = "⟷"
    var String strHumMessage = "stagnierend"
    if(nHum < nHumTendence) {
        strHumTendence = "⬆️"
        strHumMessage = "steigend"
    }
    if(nHum > nHumTendence) {
        strHumTendence = "⬇️"
        strHumMessage = "fallend"
    }
    logInfo("temphum","Sensor {} Feuchte {}",strSensor,strHumMessage)
    ItemHumTendenz.postUpdate(strHumTendence)
    ItemHumProxy.postUpdate(nHum)
                                                                                                                        // Kombiitem
    ItemKombi.postUpdate(strTempTendence + " " + nTemp.toString + " °C / " + strHumTendence + " " + nHum.toString + " %")
end
Da die Rule jeweils nur einen Sensor setzt und dazu zwingend den Namen des triggeringItems braucht, kann diese Rule nicht über System started oder Time cron getriggert werden, doch das sollte kein Problem darstellen. Man könnte eine Extra Rule für den Systemstart erstellen, aber per Definition stehen zu diesem Zeitpunkt ja keine gültigen Werte zur Verfügung, es wäre also sinnvoller, die Items samt und sonders per restoreOnStartup aus der Persistence Deiner Wahl beim Systemstart wiederherzustellen. Sobald die Sensoren den nächsten Wert liefern, werden die Werte aktualisiert.

Hier sind es halt massig unterschiedliche Items :) Man könnte die Items auch über den 2. Teil des Itemnamens identifizieren und alle Items in einer Gruppe zusammenfassen, aber so sind alle Items gleich nach Sorte gruppiert.
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 »

Wow!
Nun versuche ich das ganze erst mal zu Verstehen :)
Mir ist noch nicht ganz klar wie die Rule die "Ausgabe" sortiert.
Insgesamt habe ich ja 14 Sensoren. Das macht zusammen 28 Werte. 14 Temperatur und 14 Humidtiy.
Wie "Sortiere" wird denn dann das "steigend" oder "fallend" dem entsprechenden AussenItemKombi.postUpdate oder zb. InnenDGKombi.postUpdate
zugeordnet ?

hier mal die ganzen Items:
(Die eigentlichen Items mit den Werten sind über die PaperUI angelegt und fehlen hier)
(Folgen aber dem Schema "AussenTemp, AussenFeuchte, InnenDGTemp .... usw)

Code: Alles auswählen

String                     AussenTemp_Tendenz                            "Temperatur Tendenz [%s]"                         <temperature>
Number                     AussenTemp_Tendenz_Proxy
String                     AussenFeuchte_Tendenz                         "Luftfeuchtigkeit Tendenz [%s]"                   <humidity>
Number                     AussenFeuchte_Tendenz_Proxy
String                     InnenDGTemp2_Tendenz                          "Temperatur Tendenz [%s]"                         <temperature>
Number                     InnenDGTemp2_Tendenz_Proxy
String                     InnenDGFeuchte_Tendenz                        "Luftfeuchtigkeit Tendenz [%s]"                   <humidity>
Number                     InnenDGFeuchte_Tendenz_Proxy
String                     InnenDGKind1Temp_Tendenz                      "Temperatur Tendenz [%s]"                         <temperature>
Number                     InnenDGKind1Temp_Tendenz_Proxy
String                     InnenDGKind1Feuchte_Tendenz                   "Luftfeuchtigkeit Tendenz [%s]"                   <humidity>
Number                     InnenDGKind1Feuchte_Tendenz_Proxy
String                     InnenDGKind2Temp_Tendenz                      "Temperatur Tendenz [%s]"                         <temperature>
Number                     InnenDGKind2Temp_Tendenz_Proxy
String                     InnenDGKind2Feuchte_Tendenz                   "Luftfeuchtigkeit Tendenz [%s]"                   <humidity>
Number                     InnenDGKind2Feuchte_Tendenz_Proxy
String                     InnenDGBadTemp_Tendenz                        "Temperatur Tendenz [%s]"                         <temperature>
Number                     InnenDGBadTemp_Tendenz_Proxy
String                     InnenDGBadFeuchte_Tendenz                     "Luftfeuchtigkeit Tendenz [%s]"                   <humidity>
Number                     InnenDGBadFeuchte_Tendenz_Proxy
String                     InnenDGSZTemp_Tendenz                         "Temperatur Tendenz [%s]"                         <temperature>
Number                     InnenDGSZTemp_Tendenz_Proxy
String                     InnenDGSZFeuchte_Tendenz                      "Luftfeuchtigkeit Tendenz [%s]"                   <humidity>
Number                     InnenDGSZFeuchte_Tendenz_Proxy
String                     InnenEGFlurTemp_Tendenz                       "Temperatur Tendenz [%s]"                         <temperature>
Number                     InnenEGFlurTemp_Tendenz_Proxy
String                     InnenEGFlurFeuchte_Tendenz                    "Luftfeuchtigkeit Tendenz [%s]"                   <humidity>
Number                     InnenEGFlurFeuchte_Tendenz_Proxy
String                     InnenWHZTemp_Tendenz                          "Temperatur Tendenz [%s]"                         <temperature>
Number                     InnenWHZTemp_Tendenz_Proxy
String                     InnenWHZFeuchte_Tendenz                       "Luftfeuchtigkeit Tendenz [%s]"                   <humidity>
Number                     InnenWHZFeuchte_Tendenz_Proxy
String                     InnenKellerFlurTemp_Tendenz                   "Temperatur Tendenz [%s]"                         <temperature>
Number                     InnenKellerFlurTemp_Tendenz_Proxy
String                     InnenKellerFlurFeuchte_Tendenz                "Luftfeuchtigkeit Tendenz [%s]"                   <humidity>
Number                     InnenKellerFlurFeuchte_Tendenz_Proxy
String                     InnenKellerTechnikTemp_Tendenz                "Temperatur Tendenz [%s]"                         <temperature>
Number                     InnenKellerTechnikTemp_Tendenz_Proxy
String                     InnenKellerTechnikFeuchte_Tendenz             "Luftfeuchtigkeit Tendenz [%s]"                   <humidity>
Number                     InnenKellerTechnikFeuchte_Tendenz_Proxy
String                     InnenKellerHBYTRRTemp_Tendenz                 "Temperatur Tendenz [%s]"                         <temperature>
Number                     InnenKellerHBYTRRTemp_Tendenz_Proxy
String                     InnenKellerHBYTRRFeuchte_Tendenz              "Luftfeuchtigkeit Tendenz [%s]"                   <humidity>
Number                     InnenKellerHBYTRRFeuchte_Tendenz_Proxy
String                     InnenKellerKeller1Temp_Tendenz                "Temperatur Tendenz [%s]"                         <temperature>
Number                     InnenKellerKeller1Temp_Tendenz_Proxy
String                     InnenKellerKeller1Feuchte_Tendenz             "Luftfeuchtigkeit Tendenz [%s]"                   <humidity>
Number                     InnenKellerKeller1Feuchte_Tendenz_Proxy
String                     InnenKellerKeller2Temp_Tendenz                "Temperatur Tendenz [%s]"                         <temperature>
Number                     InnenKellerKeller2Temp_Tendenz_Proxy
String                     InnenKellerKeller2Feuchte_Tendenz             "Luftfeuchtigkeit Tendenz [%s]"                   <humidity>
Number                     InnenKellerKeller2Feuchte_Tendenz_Proxy
String                     Durchschnitt_Temperatur_Haus_Tendenz          "∅ Temperatur Haus Tendenz [%s]"                  <temperature>
Number                     Durchschnitt_Temperatur_Haus_Tendenz_Proxy
String                     Durchschnitt_Feuchte_Haus_Tendenz             "∅ Luftfeuchtigkeit Haus Tendenz [%s]"            <humidity>
Number                     Durchschnitt_Feuchte_Haus_Tendenz_Proxy
Bild
- OpenHab 2.4
#PWRUP

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

Re: Temperatur Tendenz ermitteln

Beitrag von PeterA »

Hallo Udo,
in einem anderen Post hast Du eine Rule gepostet wo direkt nach einem "Zeichen" in der Gruppe gesucht wird:

Code: Alles auswählen

GS_GFA.allMembers.forEach[ m |                                    // Altbau Erdgeschoss
        if (m.name.contains("5")) 
            m.sendCommand(50)                                         // Schlafzimmertür auf 50%
        else if (m.name.contains("3")) 
            m.sendCommand(90)  	                                      // Wohnzimmerfenster auf 90%
        else m.sendCommand(100)
Könnte ich das bei mir auch so anwenden ?
Also direkt in der Gruppe nach "Temp" und "Feuchte" in der Bezeichnung der Items suchen ?
- OpenHab 2.4
#PWRUP

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

Re: Temperatur Tendenz ermitteln

Beitrag von udo1toni »

Ja, das geht auch, aber es ist letztlich zusätzlicher Aufwand im Code. Man kann ein Item beliebig vielen Gruppen gleichzeitig zuordnen, falls Du also nur "schon eine Gruppe hast", pack einfach eine weitere dazu...

Gesendet von meinem SM-G973F mit Tapatalk

openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten