Holding a value in a variable doesn't work - Could not invoke method: ... on instance: null

Hi,

I created a rule and tested it on my windows computer and it worked. On the RPi3 with OH 2.0 and 2.1 it doesn’t for some reason. Maybe you have a hint for me.
So I have some items:

Switch	vTempFixModeEG					"Feste Temperatur Modus EG"		<switch>			(grwe, gVariablen, gStartupOff)
Number	vTempFixTemperatureEG			"Feste Temperatur EG"			<heating>			(grwe, gVariablen, gStartupOff)
Switch	vTempFixModeOG					"Feste Temperatur Modus OG"		<switch>			(grwe, gVariablen, gStartupOff)
Number	vTempFixTemperatureOG			"Feste Temperatur OG"			<heating>			(grwe, gVariablen, gStartupOff)
Switch	vTempAway						"Away / Urlaub"					<vacation>			(grwe, gVariablen, gStartupOff)
Switch	vKamin							"Kamin"							<switch>			(gEG_Wohnzimmer, gStartupOff)

Now when the vKamin gets ON I want to set vTempFixModeEG and vTempFixModeOG to ON and to set vTempFixTemperatureEG and vTempFixTemperatureOG to 6 (degrees, which can be any decimal). So I want to store the current values, and whenver vKamin gets OFF again the values should get pushed back to the old ones.

So my rule looks like:

var KamincurVarTempFixModeEG
var KamincurVarTempFixTemperatureEG
var KamincurVarTempFixModeOG
var KamincurVarTempFixTemperatureOG
var KamincurVarAwayState



rule "Heizung Kamin an"
when
	Item vKamin changed to ON
then
	logInfo("RULE", "--> Kamin-Modus aktiviert")
	KamincurVarTempFixModeEG = vTempFixModeEG
	KamincurVarTempFixModeOG = vTempFixModeOG
	KamincurVarTempFixTemperatureEG = vTempFixTemperatureEG.state
	KamincurVarTempFixTemperatureOG = vTempFixTemperatureOG.state
	KamincurVarAwayState = vTempAway

	sendCommand(vTempFixModeEG, ON)
	sendCommand(vTempFixModeOG, ON)
	sendCommand(vTempFixTemperatureEG, 6)
	sendCommand(vTempFixTemperatureOG, 6)
	
end



rule "Heizung Kamin aus - Werte zurueck"
when
	Item vKamin changed from ON to OFF
then
		logInfo("RULE", "--> Kamin-Modus ausgeschaltet, Werte zurück")
		sendCommand(if(KamincurVarTempFixModeEG != ON && KamincurVarTempFixModeEG != NULL) vTempFixModeEG, OFF)
		sendCommand(if(KamincurVarTempFixModeOG != ON && KamincurVarTempFixModeOG != NULL) vTempFixModeOG, OFF)
		sendCommand(if(KamincurVarAwayState == ON && KamincurVarAwayState != NULL) vTempAway, ON)
		sendCommand(if(KamincurVarTempFixTemperatureEG != NULL) vTempFixTemperatureEG, KamincurVarTempFixTemperatureEG)
		sendCommand(if(KamincurVarTempFixTemperatureOG != NULL) vTempFixTemperatureOG, KamincurVarTempFixTemperatureOG)
end

Whenever I turn vKamin ON the

KamincurVarTempFixTemperatureEG = vTempFixTemperatureEG.state

and

KamincurVarTempFixTemperatureOG = vTempFixTemperatureOG.state

seem not to work. In the log I see:

2017-07-04 16:40:25.153 [ERROR] [.script.engine.ScriptExecutionThread] - Rule 'Fix Temperatur': Could not invoke method: org.eclipse.smarthome.model.script.actions.BusEvent.sendCommand(org.eclipse.smarthome.core.items.Item,java.lang.String) on instance: null

And the same in the log when the OFF rule fires and tries to set them back. These commands throw errors:

		sendCommand(if(KamincurVarTempFixTemperatureEG != NULL) vTempFixTemperatureEG, KamincurVarTempFixTemperatureEG)
		sendCommand(if(KamincurVarTempFixTemperatureOG != NULL) vTempFixTemperatureOG, KamincurVarTempFixTemperatureOG)
2017-07-04 16:41:05.175 [ERROR] [.script.engine.ScriptExecutionThread] - Rule 'Heizung Kamin aus - Werte zurueck': An error occurred during the script execution: Could not invoke method: org.eclipse.smarthome.model.script.actions.BusEvent.sendCommand(org.eclipse.smarthome.core.items.Item,java.lang.String) on instance: null

Even the latest snapshot version of the Eclipse designer says there’s someting wrong:

I tried to write the KamincurVarTempFixTemperatureEG and also the vTempFixTemperatureEG.state to the log, but get the same errors… And yes, they are not NULL, I set the temperature in the sitemap and the

sendCommand(vTempFixTemperatureEG, 6)

works.

Does anybody have an idea what I’m doing wrong?

Thanks in advance
Viktor

If i read the log right, the problem is with the sendCommand. My approach on this is to eleminate first all send Commands (Just use comments) and the enable on sendCommand and se if this is the bug.

another try its maybe not to use sendCommand(Item, State), use item.sendCommand(state)

Thomas

Hi Thomas,
I just tried and rewrote all the sendCommands in the second rule as you suggested, without success.

But I think the problem here is in the first step, where the system can’t pull the state for some reason:

	KamincurVarTempFixTemperatureEG = vTempFixTemperatureEG.state
	KamincurVarTempFixTemperatureOG = vTempFixTemperatureOG.state

Cheers

But you log said that the sendcommand is an Problem. Ok next try. Define Variables proper

var Number amincurVarTempFixTemperatureEG

and assign Value with

KamincurVarTempFixTemperatureEG = vTempFixTemperatureEG.state as DecimalType

Thomas

1 Like

Is the eroor there if all sendCommands are commented out?

Thomas,

That was a quick solution!

Now my rule looks like this and works perfectly:

var KamincurVarTempFixModeEG
var Number KamincurVarTempFixTemperatureEG
var KamincurVarTempFixModeOG
var Number KamincurVarTempFixTemperatureOG
var KamincurVarAwayState



rule "Heizung Kamin an"
when
	Item vKamin changed to ON
then
	logInfo("RULE", "--> Kamin-Modus aktiviert")
	KamincurVarTempFixModeEG = vTempFixModeEG
	KamincurVarTempFixModeOG = vTempFixModeOG
	KamincurVarTempFixTemperatureEG = vTempFixTemperatureEG.state as DecimalType
	KamincurVarTempFixTemperatureOG = vTempFixTemperatureOG.state as DecimalType
	KamincurVarAwayState = vTempAway

	sendCommand(vTempFixModeEG, ON)
	sendCommand(vTempFixModeOG, ON)
	sendCommand(vTempFixTemperatureEG, 6)
	sendCommand(vTempFixTemperatureOG, 6)

end



rule "Heizung Kamin aus - Werte zurueck"
when
	Item vKamin changed from ON to OFF
then
		logInfo("RULE", "--> Kamin-Modus ausgeschaltet, Werte zurück")

//		sendCommand(if(KamincurVarTempFixModeEG != ON && KamincurVarTempFixModeEG != NULL) vTempFixModeEG, OFF)
		if(KamincurVarTempFixModeEG != ON && KamincurVarTempFixModeEG != NULL){
			vTempFixModeEG.sendCommand(OFF)
		}
//		sendCommand(if(KamincurVarTempFixModeOG != ON && KamincurVarTempFixModeOG != NULL) vTempFixModeOG, OFF)
		if(KamincurVarTempFixModeOG != ON && KamincurVarTempFixModeOG != NULL){
			vTempFixModeOG.sendCommand(OFF)
		}

//		sendCommand(if(KamincurVarAwayState == ON && KamincurVarAwayState != NULL) vTempAway, ON)
		if(KamincurVarAwayState == ON && KamincurVarAwayState != NULL){
			vTempAway.sendCommand(ON)
		}

//		sendCommand(if(KamincurVarTempFixTemperatureEG != NULL) vTempFixTemperatureEG, KamincurVarTempFixTemperatureEG)
		if(KamincurVarTempFixTemperatureEG != NULL){
			vTempFixTemperatureEG.sendCommand(KamincurVarTempFixTemperatureEG)
		}

//		sendCommand(if(KamincurVarTempFixTemperatureOG != NULL) vTempFixTemperatureOG, KamincurVarTempFixTemperatureOG)
		if(KamincurVarTempFixTemperatureOG != NULL){
			vTempFixTemperatureOG.sendCommand(KamincurVarTempFixTemperatureOG)
		}
end

There are still errors shown in the log when the vKamin gets ON (so the first of the rules), but everything works anyway:

2017-07-04 17:40:10.141 [INFO ] [.eclipse.smarthome.model.script.RULE] - --> Kamin-Modus aktiviert
2017-07-04 17:40:10.233 [ERROR] [.script.engine.ScriptExecutionThread] - Rule 'Fix Temperatur': Could not invoke method: org.eclipse.smarthome.model.script.actions.BusEvent.sendCommand(org.eclipse.smarthome.core.items.Item,java.lang.String) on instance: null
2017-07-04 17:40:10.229 [ERROR] [.script.engine.ScriptExecutionThread] - Rule 'Fix Temperatur': Could not invoke method: org.eclipse.smarthome.model.script.actions.BusEvent.sendCommand(org.eclipse.smarthome.core.items.Item,java.lang.String) on instance: null
2017-07-04 17:40:10.224 [ERROR] [.script.engine.ScriptExecutionThread] - Rule 'Fix Temperatur': Could not invoke method: org.eclipse.smarthome.model.script.actions.BusEvent.sendCommand(org.eclipse.smarthome.core.items.Item,java.lang.String) on instance: null
2017-07-04 17:40:10.261 [ERROR] [.script.engine.ScriptExecutionThread] - Rule 'Fix Temperatur': Could not invoke method: org.eclipse.smarthome.model.script.actions.BusEvent.sendCommand(org.eclipse.smarthome.core.items.Item,java.lang.String) on instance: null
2017-07-04 17:40:27.106 [INFO ] [.eclipse.smarthome.model.script.RULE] - --> Kamin-Modus ausgeschaltet, Werte zurück

Cheers

OK I see, those errors are from another rule!
:slight_smile:

I’m gonna fix this…
Many thanks