I’ve just got a quick question for a rule. I’d like to compare two temperatures to select the higher one. One temperature comes from a sensor that’s read by a binding, the other one is from the weather binding.
when Item KM200_Sensor_Aussentemp changed then
var Number VAR_KM200_Sensor_Aussentemp = KM200_Sensor_Aussentemp.state as DecimalType
var Number VAR_WEATHER_OWM_Home_Temperatur = WEATHER_OWM_Home_Temperatur.state as DecimalType
the above stated code leads to an error - can you please tell me what I’m doing wrong?;
'state' is not a member of 'org.eclipse.smarthome.core.library.types.DecimalType'; line 37, column 94, length 20
Many thanks for your fast replies, gentlemen. Meanwhile I figured it out; I’m writing the “output” of the logical substeps into a logfile and this was the line of code that caused an error, because I used VARIABLE.state here (copy+paste is not always your friend).
And as .state is only for Items that was causing the error.
rule "Höhere Außentemperatur wählen"
when Item KM200_Sensor_Aussentemp changed then
var Number VAR_KM200_Sensor_Aussentemp = KM200_Sensor_Aussentemp.state as DecimalType
var Number VAR_WEATHER_OWM_Home_Temperatur = WEATHER_OWM_Home_Temperatur.state as DecimalType
if (VAR_KM200_Sensor_Aussentemp > VAR_WEATHER_OWM_Home_Temperatur)
{
VAR_temperatur = VAR_KM200_Sensor_Aussentemp
}
else if (VAR_WEATHER_OWM_Home_Temperatur > VAR_KM200_Sensor_Aussentemp)
{
VAR_temperatur = VAR_WEATHER_OWM_Home_Temperatur
}
end
Is there a possibility to write a rule-trigger that fires when VAR_temperatur is changed or do I have to do a postUpdate on an “virtual” item?
Maybe you need to convert the state into Number as:
var Number VAR_KM200_Sensor_Aussentemp = KM200_Sensor_Aussentemp.state as Number
var Number VAR_WEATHER_OWM_Home_Temperatur = WEATHER_OWM_Home_Temperatur.state as Number
Hi guys! Thank you very much for your help. I marked that topic as solved!
Here we go, plain and simple:
rule "Höhere Außentemperatur wählen"
when Item KM200_Sensor_Aussentemp changed then
var Number VAR_KM200_Sensor_Aussentemp = KM200_Sensor_Aussentemp.state as DecimalType
var Number VAR_WEATHER_OWM_Home_Temperatur = WEATHER_OWM_Home_Temperatur.state as DecimalType
if (VAR_KM200_Sensor_Aussentemp > VAR_WEATHER_OWM_Home_Temperatur)
{
VAR_temperatur = VAR_KM200_Sensor_Aussentemp
}
else if (VAR_WEATHER_OWM_Home_Temperatur > VAR_KM200_Sensor_Aussentemp)
{
VAR_temperatur = VAR_WEATHER_OWM_Home_Temperatur
}
//sendTelegram("CSIhub", "[WEATHER/DEBUG]\r\n> Sensor-Temp geändert.\r\nVAR_temperatur = " + VAR_temperatur.toString)
end