Temperatur Tendenz ermitteln

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

Re: Temperatur Tendenz ermitteln

Beitrag von udo1toni »

hmm... Eigentlich sollte die Variable an dieser Stelle als lokale Variable ausreichend sein. Offensichtlich ist das aber nicht der Fall. Also ändere bitte wie folgt:

Code: Alles auswählen

var String strSensor = ""                            // diese Zeile ist neu und vor der 1. Rule einzufügen

rule "Update Kombi Item"
when
    Member of gTemp changed or
    Member of gHum changed or
    Member of gruppeRolladen_Sued changed or
    Member of gruppeRolladen_West changed
then
    strSensor = triggeringItem.name.split("_").get(0)    // diese Zeile hat einen geänderten Anfang
Noch kurz zu logInfo() (bzw. allen Log-Befehlen):
Jeder der Log Befehle erwartet zwei Strings. Der erste String ist der letzte Teil des Loggernamens, der zweite String ist die auszugebende Meldung. Die einzelnen Befehle sollten also besser so aufgebaut sein:

Code: Alles auswählen

logInfo("update.kombi","hier jeweils unterschiedliche texte")
wobei update.kombi dann in der gesamten Rule identisch sein sollte (außer man hat gute Gründe dafür). Dann kann man nämlich über die Karaf Konsole das Logging sinnvoll steuern, indem man z.B. mit log:set WARN org.openhab.module.script.update.kombi einfach die Info-Meldungen unterdrückt. Strenggenommen sind das eh alles logDebug() Befehle, um die zu sehen, müsste man das Logging auf DEBUG aufdrehen, aber es reicht dann ein Befehl für alle log Befehle.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

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

Re: Temperatur Tendenz ermitteln

Beitrag von PeterA »

Hab ich mal so übernommen.
VSC meckert nun nicht mehr.
Aaaber die übernahme der Rolladenposition ins Kombiitem funtzt nicht mehr....

Code: Alles auswählen

2020-09-18 12:56:20.514 [ome.event.ItemCommandEvent] - Item 'Shellyswitch25_E58F7A_roller' received command 70
2020-09-18 12:56:20.520 [nt.ItemStatePredictedEvent] - Shellyswitch25_E58F7A_roller predicted to become 70
2020-09-18 12:56:20.552 [vent.ItemStateChangedEvent] - Shellyswitch25_E58F7A_roller changed from 71 to 70
==> /var/log/openhab2/openhab.log <==
2020-09-18 12:56:20.572 [INFO ] [me.model.script.var String strSensor] - schritt durchlaufen
==> /var/log/openhab2/events.log <==
2020-09-18 12:56:20.583 [ome.event.ItemCommandEvent] - Item 'Shellyswitch25_E58F7A_roller_LUD' received command 2020-09-18T12:56:20.569+0200
2020-09-18 12:56:20.615 [vent.ItemStateChangedEvent] - Shellyswitch25_E58F7A_roller_LUD changed from 2020-09-18T12:41:00.462+0200 to 2020-09-18T12:56:20.569+0200
2020-09-18 12:56:21.494 [vent.ItemStateChangedEvent] - Shellyswitch25_E58F7A_roller changed from 70 to 68
2020-09-18 12:56:21.516 [ome.event.ItemCommandEvent] - Item 'Shellyswitch25_E58F7A_roller_LUD' received command 2020-09-18T12:56:21.509+0200
==> /var/log/openhab2/openhab.log <==
2020-09-18 12:56:21.510 [INFO ] [me.model.script.var String strSensor] - schritt durchlaufen
==> /var/log/openhab2/events.log <==
2020-09-18 12:56:21.540 [vent.ItemStateChangedEvent] - Shellyswitch25_E58F7A_roller_LUD changed from 2020-09-18T12:56:20.569+0200 to 2020-09-18T12:56:21.509+0200
- OpenHab 2.4
#PWRUP

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

Re: Temperatur Tendenz ermitteln

Beitrag von PeterA »

Habe die Änderungen wieder zurück genommen. Nun funktioniert die Übernahme der Rollladenposition ins Kombi Item wieder.

Nun habe ich mal über den Tag beobachtet wie viel von diesen Error null Meldungen kommen. Es sind ca. 20 bis 30. Damit kann ich leben denn die Rule macht ja was sie soll.

Kann nur für diese Rule diese Meldungen unterdrücken?
- OpenHab 2.4
#PWRUP

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Re: Temperatur Tendenz ermitteln

Beitrag von Cyrelian »

Hi Peter,

ja, das geht. Schau mal hier:
viewtopic.php?f=8&t=3019&p=15128#p15128
Musst halt genau definieren, was gefiltert werden soll.

CU
Cyrelian

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

Re: Temperatur Tendenz ermitteln

Beitrag von udo1toni »

Nnnn... bitte nicht. Symptome sollte man nicht unterdrücken, sondern herausfinden, wo es schief geht. Mit dem Unterdrücken geraten solche Fehler in ins Vergessen, und wenn Du dann mal irgendwas anderes anpasst, funktioniert vielleicht plötzlich gar nichts mehr und Du findest nicht heraus, warum.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

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

Re: Temperatur Tendenz ermitteln

Beitrag von PeterA »

Eijoo Udo, du hast schon recht.
VSC mault ja nur wenn die Rule geöffnet ist. Ansonsten funktioniert die Rule ja Prima.
Gestern habe ich z.B. noch zwei weitere Sensoren hinzugefügt. Das ging ratz fatz. :)
Und mit den paar "null" Meldungen im Log kann ich leben.
- OpenHab 2.4
#PWRUP

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

Re: Temperatur Tendenz ermitteln

Beitrag von udo1toni »

Ich habe hier noch mal eine aktualisierte Fassung:

Code: Alles auswählen

import java.util.HashMap

val HashMap <String,String> hmRoller = newHashMap(  "InnenDG"      -> "Shellyswitch25_745118_roller",                      // von Sensor nach Shutter
                                                    "InnenDGKind1" -> "Shellyswitch25_00B713_roller",
                                                    "InnenDGKind2" -> "Shellyswitch25_E58F7A_roller",
                                                    "InnenWHZ"     -> "Shellyswitch25_740A26_roller"
)

val HashMap <String,String> hmSensor = newHashMap(  "Shellyswitch25_745118_roller" -> "InnenDG",                          // von Shutter nach Sensor
                                                    "Shellyswitch25_00B713_roller" -> "InnenDGKind1",
                                                    "Shellyswitch25_E58F7A_roller" -> "InnenDGKind2",
                                                    "Shellyswitch25_740A26_roller" -> "InnenWHZ"
)

var String strSensor = ""

rule "Update Kombi Item"
when
    Member of gTemp changed or
    Member of gHum changed or
    Member of gruppeRolladen_Sued changed or
    Member of gruppeRolladen_West changed
then
    strSensor = triggeringItem.name.split("_").get(0)                                                                     // Sensor bestimmen.
    if(triggeringItem.name.contains("Shellyswitch25")) {                                                                  // Falls ein Rollershutter die Rule getriggert hat
        if(hmSensor.get(triggeringItem.name) !== null)                                                                    // Falls in der Hashmap enthalten
            strSensor = hmSensor.get(triggeringItem.name)                                                                 // Ermittle Sensornamen
        else {                                                                                                            // falls nicht in der Hashmap enthalten
            logInfo("kombiupdate","Rollladen ohne Sensoren. Abbruch!")
            return;                                                                                                       // Rule abbrechen
        }
    }
    logInfo("kombiupdate","var String strSensor: {}",strSensor)
                                                                                                                          // zugehörige Items bestimmen
    val ItemTempTendenz =  gTempTendenz.members.findFirst[i|i.name.split("_").get(0) == strSensor] as StringItem          // Item für Temperatur Tendenz bestimmen
    logInfo("kombiupdate","ItemTempTendenz: {}",ItemTempTendenz.name)
    val ItemTempProxy   =    gTempProxy.members.findFirst[i|i.name.split("_").get(0) == strSensor] as NumberItem          // Proxy Item für Temperatur bestimmen
    logInfo("kombiupdate","ItemTempProxy: {}",ItemTempProxy.name)
    val ItemHumTendenz  =   gHumTendenz.members.findFirst[i|i.name.split("_").get(0) == strSensor] as StringItem          // Item für Feuchte Tendenz bestimmen
    logInfo("kombiupdate","ItemHumTendenz: {}",ItemHumTendenz.name)
    val ItemHumProxy    =     gHumProxy.members.findFirst[i|i.name.split("_").get(0) == strSensor] as NumberItem          // Proxy Item für Feuchte bestimmen
    logInfo("kombiupdate","ItemHumProxy: {}",ItemHumProxy.name)
    val ItemTemp        =         gTemp.members.findFirst[i|i.name.split("_").get(0) == strSensor] as NumberItem          // Temperatur Item bestimmen
    logInfo("kombiupdate","ItemTemp: {}",ItemTemp.name)
    val ItemHum         =          gHum.members.findFirst[i|i.name.split("_").get(0) == strSensor] as NumberItem          // Feuchte Item bestimmen
    logInfo("kombiupdate","ItemHum: {}",ItemHum.name)
    val ItemKombi       =        gKombi.members.findFirst[i|i.name.split("_").get(0) == strSensor] as StringItem          // Kombi Item bestimmen
    logInfo("kombiupdate","ItemKombi: {}",ItemKombi.name)
    val ItemShutter = if(hmRoller.get(strSensor) !== null)                                                                                  // falls Rollladen vorhanden
        grAllshutters.allMembers.findFirst[i|i.name == hmRoller.get(strSensor)]  as RollershutterItem   // Rolladen Pos Item bestimmen
    else
        null
    logInfo("kombiupdate","ItemShutter: {}",ItemShutter.name)
                                                                                                                          // Werte bestimmen
    val Number nTempProxy = if(ItemTempProxy.state instanceof Number) (ItemTempProxy.state as Number) else 0              // Temperatur Proxy auslesen
    val Number nHumProxy  = if(ItemHumTendenz.state instanceof Number) (ItemHumTendenz.state as Number) else 0            // Feuchte  Proxy auslesen
    logInfo("kombiupdate","Number Proxy")
    val Number nTemp = if(ItemTemp.state instanceof Number) (ItemTemp.state as Number).floatValue else nTempProxy         // Temperatur auslesen
    val Number nHum  = if(ItemHum.state instanceof Number) (ItemHum.state as Number).floatValue else nHumProxy            // Feuchte auslesen
    logInfo("kombiupdate","Number")
                                                                                                                          // Tendenz Temperatur
    var String strTempTendence = "⬅️➡️"                                                                                    // Default String für Tendenz Anzeige
    var String strTempMessage = "stagnierend"                                                                             // Default String für Tendenz Logmeldung
    if(nTemp > nTempProxy) {                                                                                              // falls aktuelle Temperatur höher als alte Temperatur
        strTempTendence = "⬆️"                                                                                            // String für Tendenz Anzeige steigend
        strTempMessage = "steigend"                                                                                       // String für Logmeldung steigend
    }
    if(nTemp < nTempProxy) {                                                                                              // falls aktuelle Temperatur geringer als alte Temperatur
        strTempTendence = "⬇️"                                                                                            // String für Tendenz Anzeige sinkend
        strTempMessage = "fallend"                                                                                        // String für Logmeldung sinkend
    }
    logInfo("kombiupdate","Sensor {} Temperatur {}",strSensor,strTempMessage)                                             // Logmeldung ausgeben
    ItemTempProxy.postUpdate(nTemp)                                                                                       // Neue Temperatur in Proxy Item übernehmen
    ItemTempTendenz.postUpdate(strTempTendence)                                                                           // Tendenz Item setzen
                                                                                                                          // Tendenz Feuchte
    var String strHumTendence = "⬅️➡️"                                                                                     // Default String für Tendenz Anzeige
    var String strHumMessage = "stagnierend"                                                                              // Default String für Tendenz Logmeldung
    if(nHum > nHumProxy) {                                                                                                // falls aktuelle Feuchte höher als alte Feuchte
        strHumTendence = "⬆️"                                                                                             // String für Tendenz Anzeige steigend
        strHumMessage = "steigend"                                                                                        // String für Logmeldung steigend
    }
    if(nHum < nHumProxy) {                                                                                                // falls aktuelle Feuchte geringer als alte Feuchte
        strHumTendence = "⬇️"                                                                                             // String für Tendenz Anzeige sinkend
        strHumMessage = "fallend"                                                                                         // String für Logmeldung sinkend
    }
    logInfo("kombiupdate","Sensor {} Feuchte {}",strSensor,strHumMessage)                                                 // Logmeldung ausgeben
    ItemHumProxy.postUpdate(nHum)                                                                                         // Neue Feuchte in Proxy Item übernehmen
    ItemHumTendenz.postUpdate(strHumTendence)                                                                             // Tendenz Item setzen
                                                                                                                          // Kombiitem setzen
    var String strKombi = strTempTendence + " " + String::format("%.1f °C / ",nTemp) + strHumTendence + " " + String::format("%.0f %%",nHum) // Kombinierter String ohne Shutter
    if(ItemShutter !== null)                                                                                              // Falls es ein passendes Shutteritem gibt
        strKombi = "Rollladen: " + ItemShutter.state.toString + "% / " + strKombi                                         // füge den Shutterstatus vorne an
    ItemKombi.postUpdate(strKombi)                                                                                        // Setze das Kombiitem
end
  • Variable global definiert (das muss funktionieren!)
  • Die log-Befehle sind angepasst.
  • Ein paar Klammern wurden ergänzt (nötig durch die log-Befehle)
  • Eine potentielle null-Meldungsquelle beseitigt... ;)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

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

Re: Temperatur Tendenz ermitteln

Beitrag von PeterA »

Allright.
VSC motzt nicht mehr, Rolladen Position wird ins Kombitem übernommen! Top!

Hier nun ein Auszug aus dem Log:

Code: Alles auswählen

2020-09-20 17:29:50.176 [vent.ItemStateChangedEvent] - InnenEGGaesteWC_Temp changed from 21.0 to 20.9
==> /var/log/openhab2/openhab.log <==
2020-09-20 17:29:50.195 [INFO ] [e.smarthome.model.script.kombiupdate] - var String strSensor: InnenEGGaesteWC
2020-09-20 17:29:50.478 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemTempTendenz: InnenEGGaesteWC_TempTendenz
2020-09-20 17:29:50.636 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemTempProxy: InnenEGGaesteWC_TempProxy
2020-09-20 17:29:50.740 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemHumTendenz: InnenEGGaesteWC_HumTendenz
2020-09-20 17:29:50.964 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemHumProxy: InnenEGGaesteWC_HumProxy
2020-09-20 17:29:51.194 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemTemp: InnenEGGaesteWC_Temp
2020-09-20 17:29:51.320 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemHum: InnenEGGaesteWC_Hum
2020-09-20 17:29:51.386 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemKombi: InnenEGGaesteWC_Kombi
2020-09-20 17:29:51.392 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Update Kombi Item': cannot invoke method public java.lang.String org.eclipse.smarthome.core.items.GenericItem.getName() on null

Code: Alles auswählen

2020-09-20 17:32:50.499 [vent.ItemStateChangedEvent] - Aussen_Temp changed from 24.4 to 24.3
==> /var/log/openhab2/openhab.log <==
2020-09-20 17:32:51.664 [INFO ] [e.smarthome.model.script.kombiupdate] - var String strSensor: Aussen
2020-09-20 17:32:51.681 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemTempTendenz: Aussen_TempTendenz
2020-09-20 17:32:51.693 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemTempProxy: Aussen_TempProxy
2020-09-20 17:32:51.709 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemHumTendenz: Aussen_HumTendenz
2020-09-20 17:32:51.722 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemHumProxy: Aussen_HumProxy
2020-09-20 17:32:51.767 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemTemp: Aussen_Temp
2020-09-20 17:32:51.804 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemHum: Aussen_Hum
2020-09-20 17:32:51.826 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemKombi: Aussen_Kombi
2020-09-20 17:32:51.843 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Update Kombi Item': cannot invoke method public java.lang.String org.eclipse.smarthome.core.items.GenericItem.getName() on null

Code: Alles auswählen

2020-09-20 17:34:32.444 [vent.ItemStateChangedEvent] - InnenKellerHBYTRR_Temp changed from 21.1 to 21.2
==> /var/log/openhab2/openhab.log <==
2020-09-20 17:34:32.503 [INFO ] [e.smarthome.model.script.kombiupdate] - var String strSensor: InnenKellerHBYTRR
2020-09-20 17:34:32.644 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemTempTendenz: InnenKellerHBYTRR_TempTendenz
2020-09-20 17:34:32.716 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemTempProxy: InnenKellerHBYTRR_TempProxy
2020-09-20 17:34:32.769 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemHumTendenz: InnenKellerHBYTRR_HumTendenz
2020-09-20 17:34:32.827 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemHumProxy: InnenKellerHBYTRR_HumProxy
2020-09-20 17:34:32.950 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemTemp: InnenKellerHBYTRR_Temp
2020-09-20 17:34:33.002 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemHum: InnenKellerHBYTRR_Hum
2020-09-20 17:34:33.047 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemKombi: InnenKellerHBYTRR_Kombi
2020-09-20 17:34:33.053 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Update Kombi Item': cannot invoke method public java.lang.String org.eclipse.smarthome.core.items.GenericItem.getName() on null

Code: Alles auswählen

2020-09-20 17:40:16.745 [vent.ItemStateChangedEvent] - InnenKellerKeller2_Temp changed from 20.1 to 20.2
==> /var/log/openhab2/openhab.log <==
2020-09-20 17:40:16.765 [INFO ] [e.smarthome.model.script.kombiupdate] - var String strSensor: InnenKellerKeller2
==> /var/log/openhab2/events.log <==
2020-09-20 17:40:16.785 [vent.ItemStateChangedEvent] - InnenKellerKeller2Feuchte changed from 53 % to 52 %
2020-09-20 17:40:16.790 [vent.ItemStateChangedEvent] - InnenKellerKeller2_Hum changed from 53 to 52
==> /var/log/openhab2/openhab.log <==
2020-09-20 17:40:16.821 [INFO ] [e.smarthome.model.script.kombiupdate] - var String strSensor: InnenKellerKeller2
2020-09-20 17:40:16.839 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Update Kombi Item': null
2020-09-20 17:40:16.859 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemTempTendenz: InnenKellerKeller2_TempTendenz
2020-09-20 17:40:16.908 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemTempProxy: InnenKellerKeller2_TempProxy
2020-09-20 17:40:16.951 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemHumTendenz: InnenKellerKeller2_HumTendenz
2020-09-20 17:40:17.004 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemHumProxy: InnenKellerKeller2_HumProxy
2020-09-20 17:40:17.046 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemTemp: InnenKellerKeller2_Temp
2020-09-20 17:40:17.083 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemHum: InnenKellerKeller2_Hum
2020-09-20 17:40:17.123 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemKombi: InnenKellerKeller2_Kombi
2020-09-20 17:40:17.128 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Update Kombi Item': cannot invoke method public java.lang.String org.eclipse.smarthome.core.items.GenericItem.getName() on null
Und noch etwas fällt mir gerade auf:
Gestern habe ich zwei neue Räume also 4 Neue Sensorwerte hinzugefügt:

hier die komplette Items.
Neu hinzugekommen sind "GasteWC und Gästezimmer"

Code: Alles auswählen

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

String    Aussen_TempTendenz                 "Temperatur Tendenz [%s]"                  <temperature>       (gTempTendenz)
Number    Aussen_TempProxy                   "Außentemp. Proxy [%s]"                                        (gTempProxy)
String    Aussen_HumTendenz                  "Luftfeuchtigkeit Tendenz [%s]"            <humidity>          (gHumTendenz)
Number    Aussen_HumProxy                    "Außenfeuchte Proxy [%s]"                                      (gHumProxy)
Number    Aussen_Temp                        "Außentemp. [%s]"                                              (gTemp)                                                  {channel="jeelink:lacrosse:60:temperature"}
Number    Aussen_Hum                         "Außenfeuchte [%s]"                                            (gHum)                                                   {channel="jeelink:lacrosse:60:humidity"}
String    Aussen_Kombi                       "Außen [%s]"                               <garden>            (gKombi)

String    InnenDG_TempTendenz                "Temperatur Tendenz [%s]"                  <temperature>       (gTempTendenz)
Number    InnenDG_TempProxy                  "InnenDGTemp. Proxy [%s]"                                      (gTempProxy)
String    InnenDG_HumTendenz                 "Luftfeuchtigkeit Tendenz [%s]"            <humidity>          (gHumTendenz)
Number    InnenDG_HumProxy                   "InnenDGFeuchte Proxy [%s]"                                    (gHumProxy)
Number    InnenDG_Temp                       "InnenDGTemp. [%s]"                                            (gTemp)                                                  {channel="jeelink:lacrosse:4:temperature"}
Number    InnenDG_Hum                        "InnenDGFeuchte [%s]"                                          (gHum)                                                   {channel="jeelink:lacrosse:4:humidity"}
String    InnenDG_Kombi                      "Flur DG [%s]"                             <corridor>          (gKombi)

String    InnenDGKind1_TempTendenz           "Temperatur Tendenz [%s]"                  <temperature>       (gTempTendenz)
Number    InnenDGKind1_TempProxy             "InnenDGKind1temp. Proxy [%s]"                                 (gTempProxy)
String    InnenDGKind1_HumTendenz            "Luftfeuchtigkeit Tendenz [%s]"            <humidity>          (gHumTendenz)
Number    InnenDGKind1_HumProxy              "InnenDGKind1feuchte Proxy [%s]"                               (gHumProxy)
Number    InnenDGKind1_Temp                  "InnenDGKind1temp. [%s]"                                       (gTemp)                                                  {channel="jeelink:lacrosse:6:temperature"}
Number    InnenDGKind1_Hum                   "InnenDGKind1feuchte [%s]"                                     (gHum)                                                   {channel="jeelink:lacrosse:6:humidity"}
String    InnenDGKind1_Kombi                 "Kind 1 [%s]"                              <girl_1>            (gKombi)

String    InnenDGKind2_TempTendenz           "Temperatur Tendenz [%s]"                  <temperature>       (gTempTendenz)
Number    InnenDGKind2_TempProxy             "InnenDGKind2temp. Proxy [%s]"                                 (gTempProxy)
String    InnenDGKind2_HumTendenz            "Luftfeuchtigkeit Tendenz [%s]"            <humidity>          (gHumTendenz)
Number    InnenDGKind2_HumProxy              "InnenDGKind2feuchte Proxy [%s]"                               (gHumProxy)
Number    InnenDGKind2_Temp                  "InnenDGKind2temp. [%s]"                                       (gTemp)                                                  {channel="jeelink:lacrosse:35:temperature"}
Number    InnenDGKind2_Hum                   "InnenDGKind2feuchte [%s]"                                     (gHum)                                                   {channel="jeelink:lacrosse:35:humidity"}
String    InnenDGKind2_Kombi                 "Kind 2 [%s]"                              <girl_2>            (gKombi)

String    InnenDGBad_TempTendenz             "Temperatur Tendenz [%s]"                  <temperature>       (gTempTendenz)
Number    InnenDGBad_TempProxy               "InnenDGBadtemp. Proxy [%s]"                                   (gTempProxy)
String    InnenDGBad_HumTendenz              "Luftfeuchtigkeit Tendenz [%s]"            <humidity>          (gHumTendenz)
Number    InnenDGBad_HumProxy                "InnenDGBadfeuchte Proxy [%s]"                                 (gHumProxy)
Number    InnenDGBad_Temp                    "InnenDGBadtemp. [%s]"                                         (gTemp)                                                  {channel="jeelink:lacrosse:45:temperature"}
Number    InnenDGBad_Hum                     "InnenDGBadfeuchte [%s]"                                       (gHum)                                                   {channel="jeelink:lacrosse:45:humidity"}
String    InnenDGBad_Kombi                   "Bad [%s]"                                 <bath>              (gKombi)

String    InnenDGSZ_TempTendenz              "Temperatur Tendenz [%s]"                  <temperature>       (gTempTendenz)
Number    InnenDGSZ_TempProxy                "InnenDGSZtemp. Proxy [%s]"                                    (gTempProxy)
String    InnenDGSZ_HumTendenz               "Luftfeuchtigkeit Tendenz [%s]"            <humidity>          (gHumTendenz)
Number    InnenDGSZ_HumProxy                 "InnenDGSZfeuchte Proxy [%s]"                                  (gHumProxy)
Number    InnenDGSZ_Temp                     "InnenDGSZtemp. [%s]"                                          (gTemp)                                                  {channel="jeelink:lacrosse:2:temperature"}
Number    InnenDGSZ_Hum                      "InnenDGSZfeuchte [%s]"                                        (gHum)                                                   {channel="jeelink:lacrosse:2:humidity"}
String    InnenDGSZ_Kombi                    "Schlafzimmer [%s]"                        <bedroom>           (gKombi)

String    InnenEGFlur_TempTendenz            "Temperatur Tendenz [%s]"                  <temperature>       (gTempTendenz)
Number    InnenEGFlur_TempProxy              "InnenEGFlurtemp. Proxy [%s]"                                  (gTempProxy)
String    InnenEGFlur_HumTendenz             "Luftfeuchtigkeit Tendenz [%s]"            <humidity>          (gHumTendenz)
Number    InnenEGFlur_HumProxy               "InnenEGFlurfeuchte Proxy [%s]"                                (gHumProxy)
Number    InnenEGFlur_Temp                   "InnenEGFlurtemp. [%s]"                                        (gTemp)                                                  {channel="jeelink:lacrosse:16:temperature"}
Number    InnenEGFlur_Hum                    "InnenEGFlurfeuchte [%s]"                                      (gHum)                                                   {channel="jeelink:lacrosse:16:humidity"}
String    InnenEGFlur_Kombi                  "Flur EG [%s]"                             <corridor>          (gKombi)

String    InnenEGGaesteWC_TempTendenz        "Temperatur Tendenz [%s]"                  <temperature>       (gTempTendenz)
Number    InnenEGGaesteWC_TempProxy          "InnenEGGaesteWCtemp. Proxy [%s]"                              (gTempProxy)
String    InnenEGGaesteWC_HumTendenz         "Luftfeuchtigkeit Tendenz [%s]"            <humidity>          (gHumTendenz)
Number    InnenEGGaesteWC_HumProxy           "InnenEGGaesteWCfeuchte Proxy [%s]"                            (gHumProxy)
Number    InnenEGGaesteWC_Temp               "InnenEGGaesteWCTemp [%.1f °C]"            <temperature>       (gTemp,LaCrosse_Sensors,Durchschnitt_Temperatur_Haus)    {channel="jeelink:lacrosse:17:temperature"}
Number    InnenEGGaesteWC_Hum                "InnenEGGaesteWCFeuchte [%.1f %%]"         <humidity>          (gHum,LaCrosse_Sensors,Durchschnitt_Feuchte_Haus)        {channel="jeelink:lacrosse:17:humidity"}
String    InnenEGGaesteWC_Kombi              "GaesteWC EG [%s]"                         <toilet>            (gKombi)

String    InnenEGGaestezimmer_TempTendenz    "Temperatur Tendenz [%s]"                  <temperature>       (gTempTendenz)
Number    InnenEGGaestezimmer_TempProxy      "InnenEGGaestezimmertemp. Proxy [%s]"                          (gTempProxy)
String    InnenEGGaestezimmer_HumTendenz     "Luftfeuchtigkeit Tendenz [%s]"            <humidity>          (gHumTendenz)
Number    InnenEGGaestezimmer_HumProxy       "InnenEGGaestezimmerfeuchte Proxy [%s]"                        (gHumProxy)
Number    InnenEGGaestezimmer_Temp           "InnenEGGaestezimmerTemp [%.1f °C]"        <temperature>       (gTemp,LaCrosse_Sensors,Durchschnitt_Temperatur_Haus)    {channel="jeelink:lacrosse:28:temperature"}
Number    InnenEGGaestezimmer_Hum            "InnenEGGaestezimmerFeuchte [%.1f %%]"     <humidity>          (gHum,LaCrosse_Sensors,Durchschnitt_Feuchte_Haus)        {channel="jeelink:lacrosse:28:humidity"}
String    InnenEGGaestezimmer_Kombi          "Gaestezimmer EG [%s]"                     <bedroom_orange>    (gKombi)

String    InnenWHZ_TempTendenz               "Temperatur Tendenz [%s]"                  <temperature>       (gTempTendenz)
Number    InnenWHZ_TempProxy                 "InnenWHZtemp. Proxy [%s]"                                     (gTempProxy)
String    InnenWHZ_HumTendenz                "Luftfeuchtigkeit Tendenz [%s]"            <humidity>          (gHumTendenz)
Number    InnenWHZ_HumProxy                  "InnenWHZfeuchte Proxy [%s]"                                   (gHumProxy)
Number    InnenWHZ_Temp                      "InnenWHZtemp. [%s]"                                           (gTemp)                                                  {channel="jeelink:lacrosse:61:temperature"}
Number    InnenWHZ_Hum                       "InnenWHZfeuchte [%s]"                                         (gHum)                                                   {channel="jeelink:lacrosse:61:humidity"}
String    InnenWHZ_Kombi                     "Wohnzimmer [%s]"                          <sofa>              (gKombi)

String    InnenKellerFlur_TempTendenz        "Temperatur Tendenz [%s]"                  <temperature>       (gTempTendenz)
Number    InnenKellerFlur_TempProxy          "InnenKellerFlurtemp. Proxy [%s]"                              (gTempProxy)
String    InnenKellerFlur_HumTendenz         "Luftfeuchtigkeit Tendenz [%s]"            <humidity>          (gHumTendenz)
Number    InnenKellerFlur_HumProxy           "InnenKellerFlurfeuchte Proxy [%s]"                            (gHumProxy)
Number    InnenKellerFlur_Temp               "InnenKellerFlurtemp. [%s]"                                    (gTemp)                                                  {channel="jeelink:lacrosse:0:temperature"}
Number    InnenKellerFlur_Hum                "InnenKellerFlurfeuchte [%s]"                                  (gHum)                                                   {channel="jeelink:lacrosse:0:humidity"}
String    InnenKellerFlur_Kombi              "Flur KG [%s]"                             <corridor>          (gKombi)

String    InnenKellerTechnik_TempTendenz     "Temperatur Tendenz [%s]"                  <temperature>       (gTempTendenz)
Number    InnenKellerTechnik_TempProxy       "InnenKellerTechniktemp. Proxy [%s]"                           (gTempProxy)
String    InnenKellerTechnik_HumTendenz      "Luftfeuchtigkeit Tendenz [%s]"            <humidity>          (gHumTendenz)
Number    InnenKellerTechnik_HumProxy        "InnenKellerTechnikfeuchte Proxy [%s]"                         (gHumProxy)
Number    InnenKellerTechnik_Temp            "InnenKellerTechniktemp. [%s]"                                 (gTemp)                                                  {channel="jeelink:lacrosse:3:temperature"}
Number    InnenKellerTechnik_Hum             "InnenKellerTechnikfeuchte [%s]"                               (gHum)                                                   {channel="jeelink:lacrosse:3:humidity"}
String    InnenKellerTechnik_Kombi           "Technikraum [%s]"                         <fire>              (gKombi)

String    InnenKellerHBYTRR_TempTendenz      "Temperatur Tendenz [%s]"                  <temperature>       (gTempTendenz)
Number    InnenKellerHBYTRR_TempProxy        "InnenKellerHBYTRRtemp. Proxy [%s]"                            (gTempProxy)
String    InnenKellerHBYTRR_HumTendenz       "Luftfeuchtigkeit Tendenz [%s]"            <humidity>          (gHumTendenz)
Number    InnenKellerHBYTRR_HumProxy         "InnenKellerHBYTRRfeuchte Proxy [%s]"                          (gHumProxy)
Number    InnenKellerHBYTRR_Temp             "InnenKellerHBYTRRtemp. [%s]"                                  (gTemp)                                                  {channel="jeelink:lacrosse:42:temperature"}
Number    InnenKellerHBYTRR_Hum              "InnenKellerHBYTRRfeuchte [%s]"                                (gHum)                                                   {channel="jeelink:lacrosse:42:humidity"}
String    InnenKellerHBYTRR_Kombi            "Hobby/Trockenraum [%s]"                   <washingmachine>    (gKombi)

String    InnenKellerKeller1_TempTendenz     "Temperatur Tendenz [%s]"                  <temperature>       (gTempTendenz)
Number    InnenKellerKeller1_TempProxy       "InnenKellerKeller1temp. Proxy [%s]"                           (gTempProxy)
String    InnenKellerKeller1_HumTendenz      "Luftfeuchtigkeit Tendenz [%s]"            <humidity>          (gHumTendenz)
Number    InnenKellerKeller1_HumProxy        "InnenKellerKeller1feuchte Proxy [%s]"                         (gHumProxy)
Number    InnenKellerKeller1_Temp            "InnenKellerKeller1temp. [%s]"                                 (gTemp)                                                  {channel="jeelink:lacrosse:52:temperature"}
Number    InnenKellerKeller1_Hum             "InnenKellerKeller1feuchte [%s]"                               (gHum)                                                   {channel="jeelink:lacrosse:52:humidity"}
String    InnenKellerKeller1_Kombi           "Keller 1 [%s]"                            <cellar>            (gKombi)

String    InnenKellerKeller2_TempTendenz     "Temperatur Tendenz [%s]"                  <temperature>       (gTempTendenz)
Number    InnenKellerKeller2_TempProxy       "InnenKellerKeller2temp. Proxy [%s]"                           (gTempProxy)
String    InnenKellerKeller2_HumTendenz      "Luftfeuchtigkeit Tendenz [%s]"            <humidity>          (gHumTendenz)
Number    InnenKellerKeller2_HumProxy        "InnenKellerKeller2feuchte Proxy [%s]"                         (gHumProxy)
Number    InnenKellerKeller2_Temp            "InnenKellerKeller2temp. [%s]"                                 (gTemp)                                                  {channel="jeelink:lacrosse:58:temperature"}
Number    InnenKellerKeller2_Hum             "InnenKellerKeller2feuchte [%s]"                               (gHum)                                                   {channel="jeelink:lacrosse:58:humidity"}
String    InnenKellerKeller2_Kombi           "Keller 2 [%s]"                            <cellar>            (gKombi)
Nun scheint es so das für die Feuchtewerte das steigend/fallend nicht mehr funktioniert ?!????

Code: Alles auswählen

2020-09-20 17:31:27.665 [vent.ItemStateChangedEvent] - InnenDGKind1_Hum changed from 46 to 45
==> /var/log/openhab2/openhab.log <==
2020-09-20 17:31:27.705 [INFO ] [e.smarthome.model.script.kombiupdate] - var String strSensor: InnenDGKind1
==> /var/log/openhab2/openhab.log <==
2020-09-20 17:31:27.742 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemTempTendenz: InnenDGKind1_TempTendenz
2020-09-20 17:31:27.777 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemTempProxy: InnenDGKind1_TempProxy
2020-09-20 17:31:27.795 [INFO ] [thome.model.script.Feuchtesteuerung:] - Steuerung deaktiviert!
2020-09-20 17:31:27.813 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemHumTendenz: InnenDGKind1_HumTendenz
2020-09-20 17:31:27.832 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemHumProxy: InnenDGKind1_HumProxy
2020-09-20 17:31:27.849 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemTemp: InnenDGKind1_Temp
2020-09-20 17:31:27.867 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemHum: InnenDGKind1_Hum
2020-09-20 17:31:27.888 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemKombi: InnenDGKind1_Kombi
2020-09-20 17:31:27.911 [INFO ] [e.smarthome.model.script.kombiupdate] - ItemShutter: Shellyswitch25_00B713_roller
2020-09-20 17:31:27.917 [INFO ] [e.smarthome.model.script.kombiupdate] - Number Proxy
2020-09-20 17:31:27.970 [INFO ] [e.smarthome.model.script.kombiupdate] - Number
2020-09-20 17:31:27.977 [INFO ] [e.smarthome.model.script.kombiupdate] - Sensor InnenDGKind1 Temperatur stagnierend
2020-09-20 17:31:27.995 [INFO ] [e.smarthome.model.script.kombiupdate] - Sensor InnenDGKind1 Feuchte steigend
==> /var/log/openhab2/events.log <==
2020-09-20 17:31:28.010 [vent.ItemStateChangedEvent] - InnenDGKind1_HumProxy changed from 46.0 to 45.0
2020-09-20 17:31:28.040 [vent.ItemStateChangedEvent] - InnenDGKind1_Kombi changed from Rollladen: 70% / ⬅️➡️ 22,2 °C / ⬆️ 46 % to Rollladen: 70% / ⬅️➡️ 22,2 °C / ⬆️ 45 %
Der Wert "InnenDGKind1_Hum changed from 46 to 45" hier ja hier eindeutig gefallen.
Aber es gibt ein update auf "steigend" ???

Gruß Peter
- OpenHab 2.4
#PWRUP

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

Re: Temperatur Tendenz ermitteln

Beitrag von PeterA »

Habe das im Log noch mal genau beobachtet:

Code: Alles auswählen

2020-09-20 20:42:36.516 [vent.ItemStateChangedEvent] - InnenDGKind1_Hum changed from 47 to 46
==> /var/log/openhab2/openhab.log <==
2020-09-20 20:42:36.693 [INFO ] [lipse.smarthome.model.script.temphum] - Sensor InnenDGKind1 Temperatur stagnierend
2020-09-20 20:42:36.711 [INFO ] [lipse.smarthome.model.script.temphum] - Sensor InnenDGKind1 Feuchte steigend
==> /var/log/openhab2/events.log <==
2020-09-20 20:42:36.721 [vent.ItemStateChangedEvent] - InnenDGKind1_HumProxy changed from 47.0 to 46.0
2020-09-20 20:42:36.747 [vent.ItemStateChangedEvent] - InnenDGKind1_Kombi changed from Rollladen: 100% / ⬅️➡️ 22,3 °C / ⬆️ 47 % to Rollladen: 100% / ⬅️➡️ 22,3 °C / ⬆️ 46 %
Eindeutig die Feuchtigkeit ist gefallen. Aber die Rule (Version bei welcher VSC noch meckert und ohne das ganze Logging) triggert auf Feuchte steigend. Ist mir das vorher nicht aufgefallen ? Ebenso wird nur bei der Temperatur ab und zu auch mal "stagnierend" getriggert. Bei der Feuchte passiert das nie.
???

Code: Alles auswählen

import java.util.HashMap

val HashMap <String,String> hmRoller = newHashMap(  "InnenDG"      -> "Shellyswitch25_745118_roller",                      // von Sensor nach Shutter
                                                    "InnenDGKind1" -> "Shellyswitch25_00B713_roller",
                                                    "InnenDGKind2" -> "Shellyswitch25_E58F7A_roller",
                                                    "InnenWHZ"     -> "Shellyswitch25_740A26_roller"
)
val HashMap <String,String> hmSensor = newHashMap(  "Shellyswitch25_745118_roller" -> "InnenDG",                          // von Shutter nach Sensor
                                                    "Shellyswitch25_00B713_roller" -> "InnenDGKind1",
                                                    "Shellyswitch25_E58F7A_roller" -> "InnenDGKind2",
                                                    "Shellyswitch25_740A26_roller" -> "InnenWHZ"
)

rule "Update Kombi Item"
when
    Member of gTemp changed or
    Member of gHum changed or
    Member of gruppeRolladen_Sued changed or
    Member of gruppeRolladen_West changed
then
    var String strSensor = triggeringItem.name.split("_").get(0)       // Sensor bestimmen. ACHTUNG! nun als var!!!
    if(triggeringItem.name.contains("Shellyswitch25")) {                                                                  // Falls ein Rollershutter die Rule getriggert hat
        if(hmSensor.get(triggeringItem.name) !== null)                                                                    // Falls in der Hashmap enthalten
            strSensor = hmSensor.get(triggeringItem.name)                                                                 // Ermittle Sensornamen
        else                                                                                                              // falls nicht in der Hashmap enthalten
            return;                                                                                                       // Rule abbrechen
    }
                                                                                                                          // zugehörige Items bestimmen
    val ItemTempTendenz =  gTempTendenz.members.findFirst[i|i.name.split("_").get(0) == strSensor] as StringItem          // Item für Temperatur Tendenz bestimmen
    val ItemTempProxy   =    gTempProxy.members.findFirst[i|i.name.split("_").get(0) == strSensor] as NumberItem          // Proxy Item für Temperatur bestimmen
    val ItemHumTendenz  =   gHumTendenz.members.findFirst[i|i.name.split("_").get(0) == strSensor] as StringItem          // Item für Feuchte Tendenz bestimmen
    val ItemHumProxy    =     gHumProxy.members.findFirst[i|i.name.split("_").get(0) == strSensor] as NumberItem          // Proxy Item für Feuchte bestimmen
    val ItemTemp        =         gTemp.members.findFirst[i|i.name.split("_").get(0) == strSensor] as NumberItem          // Temperatur Item bestimmen
    val ItemHum         =          gHum.members.findFirst[i|i.name.split("_").get(0) == strSensor] as NumberItem          // Feuchte Item bestimmen
    val ItemKombi       =        gKombi.members.findFirst[i|i.name.split("_").get(0) == strSensor] as StringItem          // Kombi Item bestimmen
    val ItemShutter     = grAllshutters.allMembers.findFirst[i|i.name == hmRoller.get(strSensor)]  as RollershutterItem   // Rolladen Pos Item bestimmen
                                                                                                                          // Werte bestimmen
    val Number nTempProxy = if(ItemTempProxy.state instanceof Number) (ItemTempProxy.state as Number) else 0              // Temperatur Proxy auslesen
    val Number nHumProxy  = if(ItemHumTendenz.state instanceof Number) (ItemHumTendenz.state as Number) else 0            // Feuchte  Proxy auslesen
    val Number nTemp = if(ItemTemp.state instanceof Number) (ItemTemp.state as Number).floatValue else nTempProxy         // Temperatur auslesen
    val Number nHum  = if(ItemHum.state instanceof Number) (ItemHum.state as Number).floatValue else nHumProxy            // Feuchte auslesen
                                                                                                                          // Tendenz Temperatur
    var String strTempTendence = "⬅️➡️"                                                                                    // Default String für Tendenz Anzeige
    var String strTempMessage = "stagnierend"                                                                             // Default String für Tendenz Logmeldung
    if(nTemp > nTempProxy) {                                                                                              // falls aktuelle Temperatur höher als alte Temperatur
        strTempTendence = "⬆️"                                                                                            // String für Tendenz Anzeige steigend
        strTempMessage = "steigend"                                                                                       // String für Logmeldung steigend
    }
    if(nTemp < nTempProxy) {                                                                                              // falls aktuelle Temperatur geringer als alte Temperatur
        strTempTendence = "⬇️"                                                                                            // String für Tendenz Anzeige sinkend
        strTempMessage = "fallend"                                                                                        // String für Logmeldung sinkend
    }
    logInfo("temphum","Sensor {} Temperatur {}",strSensor,strTempMessage)                                                 // Logmeldung ausgeben
    ItemTempProxy.postUpdate(nTemp)                                                                                       // Neue Temperatur in Proxy Item übernehmen
    ItemTempTendenz.postUpdate(strTempTendence)                                                                           // Tendenz Item setzen
                                                                                                                          // Tendenz Feuchte
    var String strHumTendence = "⬅️➡️"                                                                                     // Default String für Tendenz Anzeige
    var String strHumMessage = "stagnierend"                                                                              // Default String für Tendenz Logmeldung
    if(nHum > nHumProxy) {                                                                                                // falls aktuelle Feuchte höher als alte Feuchte
        strHumTendence = "⬆️"                                                                                             // String für Tendenz Anzeige steigend
        strHumMessage = "steigend"                                                                                        // String für Logmeldung steigend
    }
    if(nHum < nHumProxy) {                                                                                                // falls aktuelle Feuchte geringer als alte Feuchte
        strHumTendence = "⬇️"                                                                                             // String für Tendenz Anzeige sinkend
        strHumMessage = "fallend"                                                                                         // String für Logmeldung sinkend
    }
    logInfo("temphum","Sensor {} Feuchte {}",strSensor,strHumMessage)                                                     // Logmeldung ausgeben
    ItemHumProxy.postUpdate(nHum)                                                                                         // Neue Feuchte in Proxy Item übernehmen
    ItemHumTendenz.postUpdate(strHumTendence)                                                                             // Tendenz Item setzen
                                                                                                                          // Kombiitem setzen
    //var String strKombi = strTempTendence + " " + nTemp.toString + " °C / " + strHumTendence + " " + nHum.toString + " %" // Kombinierter String ohne Shutter
    var String strKombi = strTempTendence + " " + String::format("%.1f °C / ",nTemp) + strHumTendence + " " + String::format("%.0f %%",nHum) // Kombinierter String ohne Shutter
    if(ItemShutter !== null)                                                                                              // Falls es ein passendes Shutteritem gibt
        strKombi = "Rollladen: " + ItemShutter.state.toString + "% / " + strKombi                                         // füge den Shutterstatus vorne an
    ItemKombi.postUpdate(strKombi)                                                                                        // Setze das Kombiitem
end
- OpenHab 2.4
#PWRUP

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

Re: Temperatur Tendenz ermitteln

Beitrag von PeterA »

Hab heute nochmal beobachtet.
Funktioniert alles bis auf das Update auf fallende Feuchtigkeit ???
- OpenHab 2.4
#PWRUP

Antworten