Temperatur Tendenz ermitteln
- udo1toni
- Beiträge: 15265
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Temperatur Tendenz ermitteln
Ach so. Aber die werden doch gesetzt?
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
- PeterA
- Beiträge: 1106
- Registriert: 8. Feb 2019 12:12
Re: Temperatur Tendenz ermitteln
Hiermit ?
Code: Alles auswählen
val ItemTempTendenz = gTempTendenz.members.findFirst[i|i.name.split("_").get(0) == strSensor] as StringItem // Item für Temperatur Tendenz bestimmen
- OpenHab 2.4
#PWRUP
#PWRUP
- udo1toni
- Beiträge: 15265
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Temperatur Tendenz ermitteln
Genau, diese Konstante wird verwendet, um das konkrete Item zu beschreiben.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
- PeterA
- Beiträge: 1106
- Registriert: 8. Feb 2019 12:12
Re: Temperatur Tendenz ermitteln
Oh yes!
Und hiermit wird dann das Kombi Item bestimmt ?
Und hiermit wird dann das Kombi Item bestimmt ?
Code: Alles auswählen
val ItemKombi = gKombi.members.findFirst[i|i.name.split("_").get(0) == strSensor] as StringItem // Kombi Item bestimmen
- OpenHab 2.4
#PWRUP
#PWRUP
- udo1toni
- Beiträge: 15265
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Temperatur Tendenz ermitteln
Ja,so steht's ja da 

openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
- PeterA
- Beiträge: 1106
- Registriert: 8. Feb 2019 12:12
Re: Temperatur Tendenz ermitteln
Stimmt
sogar mit Kommentar hatte ich übersehen.
Grundsätzlich kann ja jeder Temp und Feuchte Wert in der Rule verarbeitet werden. Solange ich diesem Item Schema Folge.
Richtig ?
Denn ich bilde mir aus meiner Persistenz noch einen Durchsschnitt der Haus Temperatur und Feuchte.

Grundsätzlich kann ja jeder Temp und Feuchte Wert in der Rule verarbeitet werden. Solange ich diesem Item Schema Folge.
Richtig ?
Denn ich bilde mir aus meiner Persistenz noch einen Durchsschnitt der Haus Temperatur und Feuchte.
- OpenHab 2.4
#PWRUP
#PWRUP
- udo1toni
- Beiträge: 15265
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Temperatur Tendenz ermitteln
Ja, solange sie dem Schema folgt, kannst Du die auch einfach in die Gruppe packen und die Rule greift auch für die Durchschnittswerte.
Gesendet von iPad mit Tapatalk
Gesendet von iPad mit Tapatalk
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
- PeterA
- Beiträge: 1106
- Registriert: 8. Feb 2019 12:12
Re: Temperatur Tendenz ermitteln
Ok super. Durchschnitts Werte gehen also auch. Prima!
Nun ist mir noch etwas eingefallen:
Wie im Screenshot zu sehen habe ich auch fünf Komiitems welche auch die aktuelle Position des jeweiligen Rollladens im Raum beinhalten.
Das Rollladen Items sind so definiert:
die Gruppe "gruppeRolladen_Sued" befindet sich in der Gruppe "grAllshutters"
Wenn ich den Gruppenfilter richtig verstanden habe würde er hier nicht richtig filtern da immer der erste Name vor dem ersten Unterstrich gefiltert wird ?
Leider kann ich die Items der Rolllershutter nicht ändern. Aber den Gruppenfilter wohl ?
Könnte das etwa so aussehen ?
Wie ich aber nun nur bei den fünf Kombiitems das postUdate definiere übersteigt derzeit noch mein Wissen.
Gruß Peter

Nun ist mir noch etwas eingefallen:
Wie im Screenshot zu sehen habe ich auch fünf Komiitems welche auch die aktuelle Position des jeweiligen Rollladens im Raum beinhalten.
Das Rollladen Items sind so definiert:
Code: Alles auswählen
Rollershutter Shellyswitch25_00B713_roller "Rollladen DG Kind 1" (gruppeRolladen_Sued) {channel="mqtt:topic:3448a27a:de07756d:Shellyswitch25_00B713_roller"}
Wenn ich den Gruppenfilter richtig verstanden habe würde er hier nicht richtig filtern da immer der erste Name vor dem ersten Unterstrich gefiltert wird ?
Leider kann ich die Items der Rolllershutter nicht ändern. Aber den Gruppenfilter wohl ?
Könnte das etwa so aussehen ?
Code: Alles auswählen
rule "Update Kombi Item"
when
Member of gTemp changed or
Member of gFeuchte changed or
Member of grAllshutters changed
then
val String strSensor = triggeringItem.name.split("_").get(0) // Sensor bestimmen
val String strShutter= triggeringItem.name.split("_").get(1) // Rollladen bestimmen
// 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.members.findFirst[i|i.name.split("_").get(1) == strShutter] as NumberItem // 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
val Number nPos = if(ItemShutter.state instanceof Number) (ItemShutter.state as Number) else 0 // Rolladen Position 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.
ItemKombi.postUpdate(strTempTendence + " " + nTemp.toString + " °C / " + strHumTendence + " " + nHum.toString + " %")
end
Gruß Peter

- OpenHab 2.4
#PWRUP
#PWRUP
- udo1toni
- Beiträge: 15265
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Temperatur Tendenz ermitteln
Wennder Itemname nicht angepast werden kann, wie soll dann der Zusammenhang zwischen Shutter und Temperatur/Luftfeuchte gebildet werden?
Grundsätzlich lässt sich der Kombi-String auch abhängig von weiteren Bedingungen bilden, aber die Abhängigkeit vom Namen ist nicht so einfach zu lösen.
Eine schmutzige Variante wäre, den Zusammenhang über eine Hashmap herzustellen, das bedeutet aber, dass Du die Itemnamen an zwei Stellen pflegen musst.
Ohne Gewähr
Die Idee: In der Hashmap sind Wertepaare hinterlegt, der jeweils 1. Wert ist der Teilstring des Sensors, der jeweils 2. String ist der komplette Name des Shutteritems. Nun kann das passende Item aus der Grupper herausgefiltert werden.
Zum Schluss der Rule wird der fixe Teil des zu setzenden Strings nun in einer Variablen gespeichert. Nur falls das oben berechnete Shutter Item auch existiert (!== null), wird noch vorne der Shutterstatus ergänzt.
Grundsätzlich lässt sich der Kombi-String auch abhängig von weiteren Bedingungen bilden, aber die Abhängigkeit vom Namen ist nicht so einfach zu lösen.
Eine schmutzige Variante wäre, den Zusammenhang über eine Hashmap herzustellen, das bedeutet aber, dass Du die Itemnamen an zwei Stellen pflegen musst.
Code: Alles auswählen
import java.util.HashMap
val HashMap <String,String> hmRoller = New Hashmap[ "kind1" -> "Shellyswitch25_00B713_roller", // und so weiter,
"" -> "", // für jeden Shutter ein Wertepaar
"" -> "",
"" -> "",
"" -> ""
]
rule "Update Kombi Item"
when
Member of gTemp changed or
Member of gFeuchte changed or
Member of grAllshutters changed
then
val String strSensor = triggeringItem.name.split("_").get(0) // Sensor bestimmen
val String strShutter= triggeringItem.name.split("_").get(1) // Rollladen bestimmen
// 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.members.findFirst[i|i.name == hmRoller.get(strShutter)] as NumberItem // 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
val Number nPos = if(ItemShutter.state instanceof Number) (ItemShutter.state as Number) else 0 // Rolladen Position 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
if(ItemShutter !== null) // Falls es ein passendes Shutteritem gibt
strKombi = ItemShutter.state.toString + "% /" + strKombi // füge den Shutterstatus vorne an
ItemKombi.postUpdate(strKombi) // Setze das Kombiitem
end

Die Idee: In der Hashmap sind Wertepaare hinterlegt, der jeweils 1. Wert ist der Teilstring des Sensors, der jeweils 2. String ist der komplette Name des Shutteritems. Nun kann das passende Item aus der Grupper herausgefiltert werden.
Zum Schluss der Rule wird der fixe Teil des zu setzenden Strings nun in einer Variablen gespeichert. Nur falls das oben berechnete Shutter Item auch existiert (!== null), wird noch vorne der Shutterstatus ergänzt.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
- PeterA
- Beiträge: 1106
- Registriert: 8. Feb 2019 12:12
Re: Temperatur Tendenz ermitteln
Hi Udo,
HashMap.... wieder etwas gelernt
Noch eine Frage zum Gruppenfilter:
Filtert dieser nur eine Gruppe oder auch Untergruppen?
Denn hier gibt es eine Gruppe "grAllShutters" welche zwei weitere Gruppen enthält.
Und in diesen "Unter" Gruppen befinden sich dann die Rollladen Items.
"gruppeRolladen_Sued" und "gruppeRolladen_West"
Gruß Peter
HashMap.... wieder etwas gelernt

Noch eine Frage zum Gruppenfilter:
Filtert dieser nur eine Gruppe oder auch Untergruppen?
Denn hier gibt es eine Gruppe "grAllShutters" welche zwei weitere Gruppen enthält.
Und in diesen "Unter" Gruppen befinden sich dann die Rollladen Items.
"gruppeRolladen_Sued" und "gruppeRolladen_West"
Gruß Peter
- OpenHab 2.4
#PWRUP
#PWRUP