Re: Temperatur Tendenz ermitteln
Verfasst: 5. Sep 2020 14:49
Ok, aber wie setzt die Rule dann das postUpdate zum jeweiligen Item? Also zb. InnenKombi, AussenKombi usw?
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)
]
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)
]
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)
Code: Alles auswählen
ItemHumTendenz.postUpdate(strHumTendence)