[SOLVED] Comparing 2 item states within a rule leads to error

Hi guys,

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

Thanks in advance an BR,
Christian

What do you have on line 37 of your rule file?

Can you please paste full rule, or at least a stripped down version that reproduces your issue?

Hi @5iver, Hi @diyha!

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?

Thanks & BR,
Christian

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		

Nope. As the variable is derived from two Items, it might do whatever it is you want by triggering a rule from change of either of those.

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

As your value is derived from two Items, you could improve the rule to trigger if either of those Items changes

rule "Höhere Außentemperatur wählen"
when
    Item KM200_Sensor_Aussentemp changed or
    Item WEATHER_OWM_Home_Temperatur changed
then
    ...

TY very much, @rossko57 - added your snippet to my rule!