Temperatur Tendenz ermitteln
- PeterA
- Beiträge: 1106
- Registriert: 8. Feb 2019 12:12
Re: Temperatur Tendenz ermitteln
Ok, aber wie setzt die Rule dann das postUpdate zum jeweiligen Item? Also zb. InnenKombi, AussenKombi usw?
- OpenHab 2.4
#PWRUP
#PWRUP
- udo1toni
- Beiträge: 15265
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Temperatur Tendenz ermitteln
Du musst die Kombi-Items ebenfalls in einer extra Gruppe zusammenfassen, auch für diese Item gilt, dass der Name aus den anderen Namen abgeleitet werden können muss. So wie in meinem Beispiel...
Gesendet von meinem SM-G973F mit Tapatalk
Gesendet von meinem SM-G973F 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
Und was ist der Unterschied bei dem Gruppenfilter for each i und each m ?
- OpenHab 2.4
#PWRUP
#PWRUP
- peter-pan
- Beiträge: 2768
- Registriert: 28. Nov 2018 12:03
- Wohnort: Schwäbisch Gmünd
Re: Temperatur Tendenz ermitteln
i und m sind nur Platzhalter in der GroupItem Methode für die jeweiligen tatsächlichen items.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian
- udo1toni
- Beiträge: 15265
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Temperatur Tendenz ermitteln
Genau.
Die Methode .forEach[] durchläuft die zugrundeliegende Liste. Damit man "etwas zum Anfassen" hat, braucht es eine Variable, die je Durchlauf jeweils ein Listenelement repräsentiert. Bei gGroupItem.members.forEach[] geht es um die Items, die zum Gruppenitem gGroupItem gehören. Man braucht also eine Variable, die jeweils das ausgewählte Item repräsentiert. Du kannst hier einen beliebigen Namen verwenden (Schlüsselworte sind natürlich verboten, ebenfalls real existierende Itemnamen, Variablen oder Konstanten). Der Name muss den normalen Konventionen entsprechen, d.h. er muss mit einem Buchstaben beginnen und darf ausschließlich Buchstaben des englischen Alphabets (groß/klein), Ziffern (0-9) und den Unterstrich (_) enthalten. Du könntest also auchschreiben. Aber irgendwie ist das sehr sperrig und nicht besonders effizient 
Es gibt übrigens wahlweise noch einen zweiten Platzhalter:
z ist ein Schleifenzähler. Kann ja auch nützlich sein. z ist vom Typ Integer und kann ebenfalls beliebig gewählt werden, mit den gleichen Einschränkungen wie für den Platzhalter 
Die Methode .forEach[] durchläuft die zugrundeliegende Liste. Damit man "etwas zum Anfassen" hat, braucht es eine Variable, die je Durchlauf jeweils ein Listenelement repräsentiert. Bei gGroupItem.members.forEach[] geht es um die Items, die zum Gruppenitem gGroupItem gehören. Man braucht also eine Variable, die jeweils das ausgewählte Item repräsentiert. Du kannst hier einen beliebigen Namen verwenden (Schlüsselworte sind natürlich verboten, ebenfalls real existierende Itemnamen, Variablen oder Konstanten). Der Name muss den normalen Konventionen entsprechen, d.h. er muss mit einem Buchstaben beginnen und darf ausschließlich Buchstaben des englischen Alphabets (groß/klein), Ziffern (0-9) und den Unterstrich (_) enthalten. Du könntest also auch
Code: Alles auswählen
gGroupItem.members.forEach[Platzhalter_fuer_jedes_Item|
if(Platzhalter_fuer_jedes_Item.name.contains("MyItem"))
logInfo("test","Name des Items ist {}",Platzhalter_fuer_jedes_Item.name)
]

Es gibt übrigens wahlweise noch einen zweiten Platzhalter:
Code: Alles auswählen
gGroupItem.members.forEach[i,z|
if(i.name.contains("MyItem"))
logInfo("test","Name des Items ist {}, dies ist das {}. Item der Gruppe.",i.name,z)
]

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,
Sorry dass ich nochmals um Erläuterung bitten muss.
Könntest Du in deiner Rule ggf mit inline Kommentaren erläutern was die Rule wo macht?
Und oben hab ich ja meine aktuellen Items gepostet. Gehts das damit überhaupt?
Oder müssen diese Umbenannt werden?
Ggf würde ich dann auf den jeweiligen Trigger Channel ein weiteres Item linken.
Gruß Peter
Sorry dass ich nochmals um Erläuterung bitten muss.
Könntest Du in deiner Rule ggf mit inline Kommentaren erläutern was die Rule wo macht?
Und oben hab ich ja meine aktuellen Items gepostet. Gehts das damit überhaupt?
Oder müssen diese Umbenannt werden?
Ggf würde ich dann auf den jeweiligen Trigger Channel ein weiteres Item linken.
Gruß Peter
- OpenHab 2.4
#PWRUP
#PWRUP
- udo1toni
- Beiträge: 15265
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Temperatur Tendenz ermitteln
Du musst Du Items so umbenennen, dass sie den Regeln entsprechen 
Ich hab noch einen Dreher festgestellt (steigend und fallend verdreht)
Die Items müssen dem folgenden Schema entsprechen:
Die oberen sieben Items sind die Gruppen Items, die exakt so angelegt werden müssen (der Name...)
Die unteren sieben Items entsprechen einem Sensor-Duo mitsamt allen notwendigen zusätzlichen Items. Dabei sind zwei Items mit dem Sensor verbunden (über das in {} angegebene Addon). Diese sieben Items müssen also pro Dual-Sensor angelegt werden. Der erste Teilstring (vor dem _) muss jeweils pro Dual-Sensor identisch sein und zwischen den einzelnen Dual-Sensoren muss sich dieser Teilstring unterscheiden, z.B. Aussen, Wohnzimmer, Kueche, Schlafzimmer, Kind1, Kind2, Hobbyraum, Abstellraum... Dieser erste Teilstring wird von der Rule verwendet, um in der jeweiligen Gruppe das zugehörige Item zu identifizieren.

Ich hab noch einen Dreher festgestellt (steigend und fallend verdreht)
Code: Alles auswählen
rule "Update Kombi Item"
when
Member of gTemp changed or
Member of gFeuchte changed
then
val String strSensor = triggeringItem.name.split("_").get(0) // Sensor bestimmen
// zugehörige Items bestimmen
val ItemTempTendenz = gTempTendenz.members.findFirst[i|i.name.split("_").get(0) == strSensor] as StringItem // 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
// 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.
ItemKombi.postUpdate(strTempTendence + " " + nTemp.toString + " °C / " + strHumTendence + " " + nHum.toString + " %")
end
Code: Alles auswählen
Group gTempTendenz
Group gTempProxy
Group gHumTendenz
Group gHumProxy
Group gTemp
Group gHum
Group gKombi
String Aussen_TempTendenz "Außentemp. Tendenz [%s]" (gTempTendenz)
Number Aussen_TempProxy "Außentemp. Proxy [%s]" (gTempProxy)
String Aussen_HumTendenz "Außenfeuchte Tendenz [%s]" (gHumTendenz)
Number Aussen_HumProxy "Außenfeuchte Proxy [%s]" (gHumProxy)
Number Aussen_Temp "Außentemp. [%s]" (gTemp) { ... }
Number Aussen_Hum "Außenfeuchte [%s]" (gHum) { ... }
String Aussen_Kombi "Außen [%s]" (gKombi)
Die unteren sieben Items entsprechen einem Sensor-Duo mitsamt allen notwendigen zusätzlichen Items. Dabei sind zwei Items mit dem Sensor verbunden (über das in {} angegebene Addon). Diese sieben Items müssen also pro Dual-Sensor angelegt werden. Der erste Teilstring (vor dem _) muss jeweils pro Dual-Sensor identisch sein und zwischen den einzelnen Dual-Sensoren muss sich dieser Teilstring unterscheiden, z.B. Aussen, Wohnzimmer, Kueche, Schlafzimmer, Kind1, Kind2, Hobbyraum, Abstellraum... Dieser erste Teilstring wird von der Rule verwendet, um in der jeweiligen Gruppe das zugehörige Item zu identifizieren.
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,
vielen Dank ich denke ich habe es verstanden.
Könnte ich aus dieser Rule noch weitere Items mittels postUpdate ein "steigend" und "fallend" verpassen ?
Ich vermute das passiert ja hier:
Denn ich habe in der Sitemap noch mal einzelne Tendenz Items.
In der Überschrift ist die String Kombi.
Und unten drunter dann die einzelnen Items.

Ich nehme an diese müssten dann auch wieder in eine Gruppe um dann entsprechend gefiltert und beschrieben werden zu können
vielen Dank ich denke ich habe es verstanden.
Könnte ich aus dieser Rule noch weitere Items mittels postUpdate ein "steigend" und "fallend" verpassen ?
Ich vermute das passiert ja hier:
Code: Alles auswählen
ItemHumTendenz.postUpdate(strHumTendence)
In der Überschrift ist die String Kombi.
Und unten drunter dann die einzelnen Items.

Ich nehme an diese müssten dann auch wieder in eine Gruppe um dann entsprechend gefiltert und beschrieben werden zu können
- OpenHab 2.4
#PWRUP
#PWRUP
- udo1toni
- Beiträge: 15265
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Temperatur Tendenz ermitteln
Was meinst Du mit "einzelne Items"? Die Rule braucht zwingend Dual-Sensoren, von denen der eine für die Temperatur und der andere für die Luftfeuchte da ist.
Wobei es nicht darum geht, dass die zwei Werte aus derselben Hardware kommen, aber die 7 Items müssen zueinander namentlich verbunden sein (wie oben beschrieben).
Wobei es nicht darum geht, dass die zwei Werte aus derselben Hardware kommen, aber die 7 Items müssen zueinander namentlich verbunden sein (wie oben beschrieben).
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
Ich meinte die beiden String Items im Screenshot "Temperatur Tendenz" und "Luftfeuchtigkeit Tendenz"
Ob ich aus der Rule heraus diesen "einzel" Items auch via postUpdate die Tendenz mit geben kann.
Ob ich aus der Rule heraus diesen "einzel" Items auch via postUpdate die Tendenz mit geben kann.
- OpenHab 2.4
#PWRUP
#PWRUP