Schwierig. irgendwo fehlt ein Prüfung auf null... oder sie geht schief...
Temperatur Tendenz ermitteln
- udo1toni
- Beiträge: 15265
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Temperatur Tendenz ermitteln
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
Jetzt kann ich nicht mehr folgen.
Also im when Teil steht die grAllShutters Gruppe welche die Untergruppen enthält.
Code: Alles auswählen
Member of grAllshutters changed
erst wenn sich ein Temp oder Hum Wert im zugehörigen Kombiitem ändert.
Müsste das über einen weiteren IF Block in dem auf die geänderte Position verglichen wird erfolgen ? (Kopf rauch)...

- OpenHab 2.4
#PWRUP
#PWRUP
- udo1toni
- Beiträge: 15265
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Temperatur Tendenz ermitteln
Nein. Im when Teil der Rule musst Du die Gruppen aufführen, deren unmittelbare Member sich ändern, hattest Du doch selbst in diesem Posting geschrieben?
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 ah ja.
Aber dann grAllshutters.allMembers filtern ?
Aber dann grAllshutters.allMembers filtern ?
- OpenHab 2.4
#PWRUP
#PWRUP
- PeterA
- Beiträge: 1106
- Registriert: 8. Feb 2019 12:12
Re: Temperatur Tendenz ermitteln
Oh Yeah! Udo that did the Trick!
Funktioniert.
Gruß Peter
Funktioniert.
Gruß Peter
- OpenHab 2.4
#PWRUP
#PWRUP
- PeterA
- Beiträge: 1106
- Registriert: 8. Feb 2019 12:12
- udo1toni
- Beiträge: 15265
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Temperatur Tendenz ermitteln
Ja, sicher. Du müsstest halt in die Rule eine Menge log-Befehle einbauen, durch die Du dann erkennen kannst, an welcher Stelle der Rule der Fehler auftritt.
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
Alles klar.
Kannst Du mit einen Tipp geben wo solche log-Befehle am besten eingebaut werden ?
Nach jeder Zeile ? Oder nach jedem "if" Block ? Nach dem "when" Teil ? Oder auch den "val" Zeilen ?
Kannst Du mit einen Tipp geben wo solche log-Befehle am besten eingebaut werden ?
Nach jeder Zeile ? Oder nach jedem "if" Block ? Nach dem "when" Teil ? Oder auch den "val" Zeilen ?
- OpenHab 2.4
#PWRUP
#PWRUP
- udo1toni
- Beiträge: 15265
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Temperatur Tendenz ermitteln
Im Zweifel vor jeder Variablenzuweisung, weil da vermutlich etwas schief geht...
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
So sieht die Rule nun mit den log-Befehlen aus:
Und hier nun der Auszug aus dem Log wenn ein ERROR kommt:
Und hier gleich nochmal:
Und nochmal:
Oder hängt es noch damit zusammen das VSC bei diesem Codeblock:
für "strSensor" jeweils diese Fehlermeldung ausgibt:
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
- OpenHab 2.4
#PWRUP
#PWRUP