Seite 11 von 14
Re: Temperatur Tendenz ermitteln
Verfasst: 18. Sep 2020 12:38
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.
Re: Temperatur Tendenz ermitteln
Verfasst: 18. Sep 2020 12:59
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
Re: Temperatur Tendenz ermitteln
Verfasst: 19. Sep 2020 13:37
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?
Re: Temperatur Tendenz ermitteln
Verfasst: 19. Sep 2020 16:13
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
Re: Temperatur Tendenz ermitteln
Verfasst: 20. Sep 2020 16:05
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.
Re: Temperatur Tendenz ermitteln
Verfasst: 20. Sep 2020 16:39
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.
Re: Temperatur Tendenz ermitteln
Verfasst: 20. Sep 2020 17:14
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...

Re: Temperatur Tendenz ermitteln
Verfasst: 20. Sep 2020 17:40
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
Re: Temperatur Tendenz ermitteln
Verfasst: 20. Sep 2020 20:50
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
Re: Temperatur Tendenz ermitteln
Verfasst: 21. Sep 2020 08:53
von PeterA
Hab heute nochmal beobachtet.
Funktioniert alles bis auf das Update auf fallende Feuchtigkeit ???