Re: Temperatur Tendenz ermitteln
Verfasst: 13. Sep 2020 19:46
Jetzt kann ich nicht mehr folgen.
Code: Alles auswählen
Member of grAllshutters changed
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!!!
logInfo("var String strSensor","schritt durchlaufen")
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("var String strSensor","block abgebrochen")
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
logInfo("val ItemTempTendenz","schritt durchlaufen")
val ItemTempProxy = gTempProxy.members.findFirst[i|i.name.split("_").get(0) == strSensor] as NumberItem // Proxy Item für Temperatur bestimmen
logInfo("val ItemTempProxy","schritt durchlaufen")
val ItemHumTendenz = gHumTendenz.members.findFirst[i|i.name.split("_").get(0) == strSensor] as StringItem // Item für Feuchte Tendenz bestimmen
logInfo("val ItemHumTendenz","schritt durchlaufen")
val ItemHumProxy = gHumProxy.members.findFirst[i|i.name.split("_").get(0) == strSensor] as NumberItem // Proxy Item für Feuchte bestimmen
logInfo("val ItemHumProxy","schritt durchlaufen")
val ItemTemp = gTemp.members.findFirst[i|i.name.split("_").get(0) == strSensor] as NumberItem // Temperatur Item bestimmen
logInfo("val ItemTemp","schritt durchlaufen")
val ItemHum = gHum.members.findFirst[i|i.name.split("_").get(0) == strSensor] as NumberItem // Feuchte Item bestimmen
logInfo("val ItemHum","schritt durchlaufen")
val ItemKombi = gKombi.members.findFirst[i|i.name.split("_").get(0) == strSensor] as StringItem // Kombi Item bestimmen
logInfo("val ItemKombi","schritt durchlaufen")
val ItemShutter = grAllshutters.allMembers.findFirst[i|i.name == hmRoller.get(strSensor)] as RollershutterItem // Rolladen Pos Item bestimmen
logInfo("val ItemShutter","schritt durchlaufen")
logInfo("var Groups","block durchlaufen")
// 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("val Number Proxy","block durchlaufen")
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("val Number","block durchlaufen")
// 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
Code: Alles auswählen
2020-09-18 08:39:15.142 [vent.ItemStateChangedEvent] - Aussen_Temp changed from 15.6 to 15.7
2020-09-18 08:39:15.182 [vent.ItemStateChangedEvent] - Aussen_Hum changed from 62 to 61
==> /var/log/openhab2/openhab.log <==
2020-09-18 08:39:15.169 [INFO ] [me.model.script.var String strSensor] - schritt durchlaufen
2020-09-18 08:39:15.201 [INFO ] [me.model.script.var String strSensor] - schritt durchlaufen
==> /var/log/openhab2/openhab.log <==
2020-09-18 08:39:15.261 [INFO ] [ome.model.script.val ItemTempTendenz] - schritt durchlaufen
2020-09-18 08:39:15.271 [INFO ] [ome.model.script.val ItemTempTendenz] - schritt durchlaufen
==> /var/log/openhab2/openhab.log <==
2020-09-18 08:39:15.298 [INFO ] [thome.model.script.val ItemTempProxy] - schritt durchlaufen
2020-09-18 08:39:15.299 [INFO ] [thome.model.script.val ItemTempProxy] - schritt durchlaufen
2020-09-18 08:39:15.315 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Update Kombi Item': null
2020-09-18 08:39:15.316 [INFO ] [home.model.script.val ItemHumTendenz] - schritt durchlaufen
2020-09-18 08:39:15.328 [INFO ] [rthome.model.script.val ItemHumProxy] - schritt durchlaufen
2020-09-18 08:39:15.341 [INFO ] [.smarthome.model.script.val ItemTemp] - schritt durchlaufen
2020-09-18 08:39:15.355 [INFO ] [e.smarthome.model.script.val ItemHum] - schritt durchlaufen
2020-09-18 08:39:15.365 [INFO ] [smarthome.model.script.val ItemKombi] - schritt durchlaufen
2020-09-18 08:39:15.393 [INFO ] [arthome.model.script.val ItemShutter] - schritt durchlaufen
2020-09-18 08:39:15.397 [INFO ] [se.smarthome.model.script.var Groups] - block durchlaufen
2020-09-18 08:39:15.406 [INFO ] [rthome.model.script.val Number Proxy] - block durchlaufen
2020-09-18 08:39:15.412 [INFO ] [se.smarthome.model.script.val Number] - block durchlaufen
2020-09-18 08:39:15.419 [INFO ] [lipse.smarthome.model.script.temphum] - Sensor Aussen Temperatur steigend
==> /var/log/openhab2/events.log <==
2020-09-18 08:39:15.430 [vent.ItemStateChangedEvent] - Aussen_TempProxy changed from 15.6 to 15.7
==> /var/log/openhab2/openhab.log <==
2020-09-18 08:39:15.437 [INFO ] [lipse.smarthome.model.script.temphum] - Sensor Aussen Feuchte steigend
==> /var/log/openhab2/events.log <==
2020-09-18 08:39:15.459 [vent.ItemStateChangedEvent] - Aussen_HumProxy changed from 62.0 to 61.0
2020-09-18 08:39:15.477 [vent.ItemStateChangedEvent] - Aussen_Kombi changed from ⬆️ 15,6 °C / ⬆️ 62 % to ⬆️ 15,7 °C / ⬆️ 61 %
Code: Alles auswählen
2020-09-18 09:00:07.707 [vent.ItemStateChangedEvent] - InnenWHZTemp changed from 21.4 °C to 21.5 °C
2020-09-18 09:00:07.718 [vent.ItemStateChangedEvent] - InnenWHZ_Temp changed from 21.4 to 21.5
==> /var/log/openhab2/openhab.log <==
2020-09-18 09:00:07.744 [INFO ] [me.model.script.var String strSensor] - schritt durchlaufen
==> /var/log/openhab2/events.log <==
2020-09-18 09:00:07.771 [vent.ItemStateChangedEvent] - InnenWHZFeuchte changed from 46 % to 47 %
2020-09-18 09:00:07.781 [vent.ItemStateChangedEvent] - InnenWHZ_Hum changed from 46 to 47
==> /var/log/openhab2/openhab.log <==
2020-09-18 09:00:07.788 [INFO ] [me.model.script.var String strSensor] - schritt durchlaufen
2020-09-18 09:00:07.870 [INFO ] [ome.model.script.val ItemTempTendenz] - schritt durchlaufen
2020-09-18 09:00:07.888 [INFO ] [ome.model.script.val ItemTempTendenz] - schritt durchlaufen
2020-09-18 09:00:07.920 [INFO ] [thome.model.script.val ItemTempProxy] - schritt durchlaufen
2020-09-18 09:00:07.948 [INFO ] [thome.model.script.val ItemTempProxy] - schritt durchlaufen
2020-09-18 09:00:07.976 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Update Kombi Item': null
2020-09-18 09:00:07.976 [INFO ] [home.model.script.val ItemHumTendenz] - schritt durchlaufen
2020-09-18 09:00:08.049 [INFO ] [rthome.model.script.val ItemHumProxy] - schritt durchlaufen
2020-09-18 09:00:08.189 [INFO ] [.smarthome.model.script.val ItemTemp] - schritt durchlaufen
2020-09-18 09:00:08.238 [INFO ] [e.smarthome.model.script.val ItemHum] - schritt durchlaufen
2020-09-18 09:00:08.304 [INFO ] [smarthome.model.script.val ItemKombi] - schritt durchlaufen
2020-09-18 09:00:08.328 [INFO ] [arthome.model.script.val ItemShutter] - schritt durchlaufen
2020-09-18 09:00:08.333 [INFO ] [se.smarthome.model.script.var Groups] - block durchlaufen
2020-09-18 09:00:08.341 [INFO ] [rthome.model.script.val Number Proxy] - block durchlaufen
2020-09-18 09:00:08.350 [INFO ] [se.smarthome.model.script.val Number] - block durchlaufen
2020-09-18 09:00:08.360 [INFO ] [lipse.smarthome.model.script.temphum] - Sensor InnenWHZ Temperatur steigend
==> /var/log/openhab2/events.log <==
2020-09-18 09:00:08.372 [vent.ItemStateChangedEvent] - InnenWHZ_TempProxy changed from 21.4 to 21.5
2020-09-18 09:00:08.377 [vent.ItemStateChangedEvent] - InnenWHZ_TempTendenz changed from ⬅️➡️ to ⬆️
==> /var/log/openhab2/openhab.log <==
2020-09-18 09:00:08.379 [INFO ] [lipse.smarthome.model.script.temphum] - Sensor InnenWHZ Feuchte steigend
==> /var/log/openhab2/events.log <==
2020-09-18 09:00:08.393 [vent.ItemStateChangedEvent] - InnenWHZ_HumProxy changed from 46.0 to 47.0
2020-09-18 09:00:08.412 [vent.ItemStateChangedEvent] - InnenWHZ_Kombi changed from Rollladen: 0% / ⬅️➡️ 21,4 °C / ⬆️ 46 % to Rollladen: 0% / ⬆️ 21,5 °C / ⬆️ 47 %
Code: Alles auswählen
2020-09-18 10:25:17.432 [vent.ItemStateChangedEvent] - Aussen_Temp changed from 16.0 to 16.1
2020-09-18 10:25:17.446 [vent.ItemStateChangedEvent] - Aussen_Hum changed from 59 to 58
==> /var/log/openhab2/openhab.log <==
2020-09-18 10:25:17.488 [INFO ] [me.model.script.var String strSensor] - schritt durchlaufen
==> /var/log/openhab2/openhab.log <==
2020-09-18 10:25:17.523 [INFO ] [me.model.script.var String strSensor] - schritt durchlaufen
==> /var/log/openhab2/openhab.log <==
2020-09-18 10:25:17.563 [INFO ] [ome.model.script.val ItemTempTendenz] - schritt durchlaufen
==> /var/log/openhab2/openhab.log <==
2020-09-18 10:25:17.573 [INFO ] [ome.model.script.val ItemTempTendenz] - schritt durchlaufen
2020-09-18 10:25:17.574 [INFO ] [thome.model.script.val ItemTempProxy] - schritt durchlaufen
2020-09-18 10:25:17.592 [INFO ] [thome.model.script.val ItemTempProxy] - schritt durchlaufen
2020-09-18 10:25:17.593 [INFO ] [home.model.script.val ItemHumTendenz] - schritt durchlaufen
2020-09-18 10:25:17.658 [INFO ] [rthome.model.script.val ItemHumProxy] - schritt durchlaufen
2020-09-18 10:25:17.660 [INFO ] [home.model.script.val ItemHumTendenz] - schritt durchlaufen
2020-09-18 10:25:17.671 [INFO ] [.smarthome.model.script.val ItemTemp] - schritt durchlaufen
2020-09-18 10:25:17.674 [INFO ] [rthome.model.script.val ItemHumProxy] - schritt durchlaufen
2020-09-18 10:25:17.684 [INFO ] [.smarthome.model.script.val ItemTemp] - schritt durchlaufen
2020-09-18 10:25:17.684 [INFO ] [e.smarthome.model.script.val ItemHum] - schritt durchlaufen
2020-09-18 10:25:17.693 [INFO ] [e.smarthome.model.script.val ItemHum] - schritt durchlaufen
2020-09-18 10:25:17.696 [INFO ] [smarthome.model.script.val ItemKombi] - schritt durchlaufen
2020-09-18 10:25:17.704 [INFO ] [smarthome.model.script.val ItemKombi] - schritt durchlaufen
2020-09-18 10:25:17.719 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Update Kombi Item': null
2020-09-18 10:25:17.727 [INFO ] [arthome.model.script.val ItemShutter] - schritt durchlaufen
2020-09-18 10:25:17.730 [INFO ] [se.smarthome.model.script.var Groups] - block durchlaufen
2020-09-18 10:25:17.736 [INFO ] [rthome.model.script.val Number Proxy] - block durchlaufen
2020-09-18 10:25:17.742 [INFO ] [se.smarthome.model.script.val Number] - block durchlaufen
2020-09-18 10:25:17.748 [INFO ] [lipse.smarthome.model.script.temphum] - Sensor Aussen Temperatur steigend
==> /var/log/openhab2/events.log <==
2020-09-18 10:25:17.757 [vent.ItemStateChangedEvent] - Aussen_TempProxy changed from 16.0 to 16.1
==> /var/log/openhab2/openhab.log <==
2020-09-18 10:25:17.766 [INFO ] [lipse.smarthome.model.script.temphum] - Sensor Aussen Feuchte steigend
==> /var/log/openhab2/events.log <==
2020-09-18 10:25:17.776 [vent.ItemStateChangedEvent] - Aussen_HumProxy changed from 59.0 to 58.0
2020-09-18 10:25:17.803 [vent.ItemStateChangedEvent] - Aussen_Kombi changed from ⬆️ 16,0 °C / ⬆️ 59 % to ⬆️ 16,1 °C / ⬆️ 58 %
Code: Alles auswählen
val ItemTempTendenz = gTempTendenz.members.findFirst[i|i.name.split("_").get(0) == strSensor] as StringItem // Item für Temperatur Tendenz bestimmen
logInfo("val ItemTempTendenz","schritt durchlaufen")
val ItemTempProxy = gTempProxy.members.findFirst[i|i.name.split("_").get(0) == strSensor] as NumberItem // Proxy Item für Temperatur bestimmen
logInfo("val ItemTempProxy","schritt durchlaufen")
val ItemHumTendenz = gHumTendenz.members.findFirst[i|i.name.split("_").get(0) == strSensor] as StringItem // Item für Feuchte Tendenz bestimmen
logInfo("val ItemHumTendenz","schritt durchlaufen")
val ItemHumProxy = gHumProxy.members.findFirst[i|i.name.split("_").get(0) == strSensor] as NumberItem // Proxy Item für Feuchte bestimmen
logInfo("val ItemHumProxy","schritt durchlaufen")
val ItemTemp = gTemp.members.findFirst[i|i.name.split("_").get(0) == strSensor] as NumberItem // Temperatur Item bestimmen
logInfo("val ItemTemp","schritt durchlaufen")
val ItemHum = gHum.members.findFirst[i|i.name.split("_").get(0) == strSensor] as NumberItem // Feuchte Item bestimmen
logInfo("val ItemHum","schritt durchlaufen")
val ItemKombi = gKombi.members.findFirst[i|i.name.split("_").get(0) == strSensor] as StringItem // Kombi Item bestimmen
logInfo("val ItemKombi","schritt durchlaufen")
val ItemShutter = grAllshutters.allMembers.findFirst[i|i.name == hmRoller.get(strSensor)] as RollershutterItem // Rolladen Pos Item bestimmen
Code: Alles auswählen
Cannot refer to the non-final variable strSensor inside a lambda expression