Jetzt meckert VSC an der Stelle "New Hashmap":
Code: Alles auswählen
import java.util.HashMap
val HashMap <String,String> hmRoller = New Hashmap[ "InnenDG" -> "Shellyswitch25_745118_roller", // und so weiter,
"InnenDGKind1" -> "Shellyswitch25_00B713_roller", // für jeden Shutter ein Wertepaar
"InnenDGKind2" -> "Shellyswitch25_E58F7A_roller",
"InnenWHZ" -> "Shellyswitch25_740A26_roller"
]
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
Code: Alles auswählen
{
"resource": "/Volumes/openHAB-conf/rules/SensorsInfoKombiGroups.rules",
"owner": "_generated_diagnostic_collection_name_#0",
"code": "org.eclipse.xtext.diagnostics.Diagnostic.Linking",
"severity": 8,
"message": "The method or field New is undefined",
"startLineNumber": 3,
"startColumn": 40,
"endLineNumber": 3,
"endColumn": 43
}
Code: Alles auswählen
{
"resource": "/Volumes/openHAB-conf/rules/SensorsInfoKombiGroups.rules",
"owner": "_generated_diagnostic_collection_name_#0",
"code": "org.eclipse.xtext.diagnostics.Diagnostic.Syntax",
"severity": 8,
"message": "missing EOF at 'Hashmap'",
"startLineNumber": 3,
"startColumn": 44,
"endLineNumber": 3,
"endColumn": 51
}