Smart Virtual Thermostat (beta version)

Thanks! I don’t have the valves yet (didn’t had time to buy it and install it), but when I do I will come back and maybe I will have more questions on the actual implementation :slight_smile: I don’t know fully what can be achieved with this thermostat, but as you said, it is somehow possible to turn it off, rather than manipulating the target temperature and for example setting it down to the lowest possible value…

I tried the new version last night, and after trying to resolve a few errors (mostly due to items not having history, and therefore ending up with null’s), my one room that I tested it with never got to target temperature, then started to have a negative ConstC, and 0 power applied, and the actual temperature dropped off. My wife was then complaining, so I had to disable it and return to my previous configuration.

In order to even get it going in the first place, I had to create a new Rule which, upon activating a Switch, reset all the values to the “defaults”.

Here’s my current rules:

val heatingTimers = <String, Timer>newHashMap

val checkFirstS=[SwitchItem item,OnOffType command,int minutes|
		if (now.minusMinutes(minutes).isAfter(new DateTime(item.previousState(false,"jdbc").timestamp.time))) {  //changed since to avoid flapping in minutes amount of time	
			if (item.state != command) item.sendCommand(command)
		}else{
			val timeritem = item
			val timercommand = command
			createTimer(now.plusMinutes(minutes), [|
				if (timeritem.state != command) timeritem.sendCommand(timercommand)
			])
		}
	]


rule "Smart heating v0.2.4"
/* version 0.2.2:	bugfixes
					infinity calculation catch -> probaly because last temperature == current temperature, fixed with previousstate(true)
	version 0.2.3:	Calculation of ConstC not correct, catch of negative numbers and when there is no heating -> no learning next time
					Solution inifity calculation won't work, previousState(true) can give a wrong measurement -> changed to historicState(last calculation)
	version 0.2.4:	ConstC gives high values, original pytoh script won't calculate if power=0 or 100 -> implemented				
					Missing update Setpoint_Current (needed for persistence)
*/			

when
	Member of Heating_Setpoint_Normal received update
	or
	Member of Heating_Setpoint_Eco received update
	or
	Member of Heating_Mode2 received update
	or
	Member of Heating_CalcTime received update
	or
	System started

then
	val DELTA=0.2
	val DATABASE="jdbc" //"influxdb"
	val room = 
		if (triggeringItem === null){ //system started trigger
			logInfo("svt2","System started, resetting timers and checking for NULL")
			Heating_BoilerValves.allMembers.forEach[if (state == NULL) postUpdate(OFF)]
			Heating_CalcTime.allMembers.forEach[if (state == NULL) postUpdate(30)]
			Heating_ConstC.allMembers.forEach[if (state == NULL) postUpdate(60)]
			Heating_LastCalc.allMembers.forEach[if (state == NULL) postUpdate(new DateTimeType(now.toString))]
			Heating_Learn.allMembers.forEach[if (state == NULL) postUpdate(ON)]
			Heating_Mode2.allMembers.forEach[if (state == NULL) postUpdate(0)]
			Heating_Setpoint_Current.allMembers.forEach[if (state == NULL) postUpdate(20)]
			Heating_Setpoint_Eco.allMembers.forEach[if (state == NULL) postUpdate(17)]
			Heating_Setpoint_Normal.allMembers.forEach[if (state == NULL) postUpdate(20)]
			createTimer(now.plusSeconds(10),[|	//let OH give a chance to update NULLs
				logInfo("svt2","retrigger")
				Heating_Mode2.allMembers.forEach[i|
					i.sendCommand(i.state)
					logInfo("svt2","retrigger {}",i.name)
					] 
			])
			Heating_Power.allMembers.forEach[if (state == NULL) postUpdate(50)]
			return;
		}else{
			triggeringItem.name.split("_").get(0)
		}
	val roomDevice = room+"_"+triggeringItem.name.split("_").get(1)
	logInfo("svt2","Room {}, RoomDevice {}",room, roomDevice)
	if (Heating_Mode2.allMembers.findFirst[name.contains(roomDevice)].state.toString == "0"){
		logInfo("svt2","Heating mode for {} is off",roomDevice)
		heatingTimers.get(roomDevice+"_NextCalc")?.cancel
		heatingTimers.put(roomDevice+"_NextCalc", null)
		heatingTimers.get(roomDevice+"_EndHeat")?.cancel
		heatingTimers.put(roomDevice+"_EndHeat", null)
		checkFirstS.apply(Heating_BoilerValves.allMembers.findFirst[name.contains(roomDevice)],OFF,1)
		return;
	}
	val roomNextCalcTimer = heatingTimers.get(roomDevice+"_NextCalc")
	logInfo("svt2","nextCalcTimer for {} is {}",roomDevice,roomNextCalcTimer?.toString)
	val calc_time=(Heating_CalcTime.allMembers.findFirst[name.contains(roomDevice)].state as Number).intValue
	//val calc_time=1 //debug
	if (roomNextCalcTimer === null || roomNextCalcTimer.hasTerminated){
		logInfo("svt2","start new calc for {} in {} minutes",roomDevice,calc_time)
		heatingTimers.put(roomDevice+"_NextCalc", createTimer(now, [|  //start now instead of calc_time
			val roomTemp = Temperatures.allMembers.filter[name.contains(room)].map[(state as Number).doubleValue].reduce[s, v |s+v]/Temperatures.allMembers.filter[name.contains(room)].size
			val roomMode = Heating_Mode2.allMembers.findFirst[name.contains(roomDevice)].state.toString
			val lastCalcItem = Heating_LastCalc.allMembers.findFirst[name.contains(roomDevice)]
			val roomSetpoint = 
				switch roomMode {
					case "1": {
						(Heating_Setpoint_Normal.allMembers.findFirst[name.contains(roomDevice)].state as Number).doubleValue
					}
					case "11": {
						(Heating_Setpoint_Eco.allMembers.findFirst[name.contains(roomDevice)].state as Number).doubleValue
					}
					case "15" :{
						0  //force mode, but this won't recalculate the ConstC
					}
				}
			logInfo("svt2","Roomdevice {}, Setpoint {}, Temp {}, Mode {}, Learning {}",roomDevice,roomSetpoint,roomTemp,roomMode,Heating_Learn.allMembers.findFirst[name.contains(roomDevice)].state.toString)
			val roomLearnItem = Heating_Learn.allMembers.findFirst[name.contains(roomDevice)]
			var roomLearn = roomLearnItem.state
			val setpointItem = Heating_Setpoint_Current.allMembers.findFirst[name.contains(roomDevice)]
			val powerItem = Heating_Power.allMembers.findFirst[name.contains(roomDevice)]
			var lastSetpoint = roomSetpoint // set lastsetpoint to roomsetpoint, just to besure if lastsetpoint===null
			val lastSetpointState = setpointItem.historicState(new DateTime(lastCalcItem.state.toString),DATABASE)?.state
			if (lastSetpointState !== null){
				lastSetpoint = (lastSetpointState as Number).doubleValue
			}
			val lastPower = (powerItem.historicState(new DateTime(lastCalcItem.state.toString),DATABASE)?.state as Number)
			if (lastPower == null) { 
				logInfo("svt2", "Roomdevice {}, lastPower = null, setting to 50", roomDevice)
				lastPower = 50 
			}
			if ((lastPower == 100 && roomTemp < lastSetpoint) || lastPower == 0){  //last time power = 100 and setpoint not reached -> no learning.
				roomLearn = OFF
			}
			logInfo("svt2","Roomdevice {}, roomtemp {}, roomsetpoint {}, lastpower {}, lastsetpoint {}",roomDevice, roomTemp, roomSetpoint, lastPower, lastSetpoint )
			val power = 
				if (roomTemp <= (roomSetpoint+DELTA)){
					val constCItem = Heating_ConstC.allMembers.findFirst[name.contains(roomDevice)]
					logInfo("svt2", "Roomdevice {}, constCItem = {}", roomDevice, constCItem.name)
					val cc = (constCItem.averageSince(now.minusDays(3),DATABASE) as Number).doubleValue
					logInfo("svt2", "Roomdevice {}, cc = {}", roomDevice, cc)
					val constC =
						if (roomLearn == ON){
							val lastTemp = Temperatures.allMembers.filter[name.contains(room)].map[(historicState(new DateTime(lastCalcItem.state.toString),DATABASE).state as Number).doubleValue].reduce[s, v |s+v]/Temperatures.allMembers.filter[name.contains(room)].size  //get average of room temperatures (group) at the last calc time
							val deltaSeconds = ((now.millis-(new DateTime(lastCalcItem.state.toString)).millis)/1000).doubleValue
							logInfo("svt2","Last temperature {}, Last setpoint {}, delta {}, room temp {}, calc time {}, ConstCAvg {}",lastTemp.toString,lastSetpoint.toString,deltaSeconds,roomTemp,calc_time,(constCItem.averageSince(now.minusDays(7),DATABASE) as Number))
							val ccCalc= ((lastSetpoint - lastTemp)/(roomTemp-lastTemp)*deltaSeconds/(calc_time*60))
							logInfo("svt2", "Roomdevice {}, ccCalc {}", roomDevice, ccCalc)
							if (ccCalc.toString.contains("Infinity") ){ //catch if somehow calculation is infinity 
								logInfo("svt2","Infinity calc: {}, roomDevice: {}",ccCalc.toString,roomDevice)
								constCItem.postUpdate(cc)
								cc
							}else{
								constCItem.postUpdate(cc*ccCalc)
								cc * ccCalc
							}
						}else{
							cc
						}
					logInfo("svt2","ConstC is {}",constC)
					var pw = (roomSetpoint-roomTemp)*constC
					if (pw>100) pw=100 //max
					if (pw<0) pw=0 //min
					pw
				}else{
					if (roomSetpoint == 0){ //force mode
						100
					}else{
						0
					}
				}
			roomLearnItem.postUpdate(ON)  // in case turned off by mode/setpoint change or power=0
			logInfo("svt2","Power is {}",power)
			val heatduration=(power*calc_time/100).intValue
			val valveItem = Heating_BoilerValves.allMembers.findFirst[name.contains(roomDevice)]
			logInfo("svt2","Heatduration is {} minutes for {}",heatduration.toString,roomDevice)
			val roomEndHeatTimer = heatingTimers.get(roomDevice+"_EndHeat")
			logInfo("svt2","endHeatTimer for {} is {}",roomDevice,roomNextCalcTimer?.toString)
			if (power==0){
				logInfo("svt2","No heat request")
				roomLearnItem.postUpdate(OFF) // no power, no calculation of ConstC next time
				checkFirstS.apply(valveItem,OFF,1)
				roomEndHeatTimer?.cancel
				heatingTimers.put(roomDevice+"_EndHeat",null)
			}else{
				checkFirstS.apply(valveItem,ON,1)
				logInfo("svt2","Valve ON")
				Heating_Setpoint_Current.allMembers.findFirst[name.contains(roomDevice)].postUpdate(roomSetpoint)
				if (roomEndHeatTimer === null || roomEndHeatTimer.hasTerminated){
					heatingTimers.put(roomDevice+"_EndHeat", createTimer(now.plusMinutes(heatduration),[|
						logInfo("svt2","End heat")
						if (power<100) {
							checkFirstS.apply(valveItem,OFF,1)
							logInfo("svt2","Valve OFF {}",roomDevice)
						}
					]))
				}else{
					logInfo("svt2","Timer end heat active, reschedule for {} minute(s)",heatduration)
					roomEndHeatTimer.reschedule(now.plusMinutes(heatduration))
				}
			}
		lastCalcItem.postUpdate(new DateTimeType(now.toString))
		powerItem.postUpdate(power)
		setpointItem.postUpdate(roomSetpoint)
		heatingTimers.get(roomDevice+"_NextCalc").reschedule(now.plusMinutes(calc_time))
		logInfo("svt2","reschedule nextCalcTimer for {} is {}. Calctime {}. Inside own timer",roomDevice,heatingTimers.get(roomDevice+"_NextCalc")?.toString,calc_time)
		]))
	}else{
		if (triggeringItem.name.contains("Setpoint") || triggeringItem.name.contains("Mode")){
			Heating_Learn.allMembers.findFirst[name.contains(roomDevice)].sendCommand(OFF)
			roomNextCalcTimer.reschedule(now)
			logInfo("svt2","reschedule nextCalcTimer for {} is {}. CalcTime {}. When mode/setpoint changed",roomDevice,roomNextCalcTimer?.toString,calc_time)
		}else{
			roomNextCalcTimer.reschedule(calc_time)
			logInfo("svt2","reschedule nextCalcTimer for {} is {}. Calctime {}",roomDevice,roomNextCalcTimer?.toString,calc_time)
		}
	}
end

rule "Boiler on/off"
when
	Member of Heating_BoilerValves changed
then
	checkFirstS.apply(BoilerRoom_Boiler_Switch,Heating_BoilerValves.state,10)
	logInfo("Boiler","CV {}",Heating_BoilerValves.state.toString)
end

rule "Reset SVT2"
when 
	Item Reset_SVT received command ON
then
	Heating_BoilerValves.allMembers.forEach[postUpdate(OFF)]
	Heating_CalcTime.allMembers.forEach[postUpdate(30)]
	Heating_ConstC.allMembers.forEach[postUpdate(60)]
	Heating_LastCalc.allMembers.forEach[postUpdate(new DateTimeType(now.toString))]
	Heating_Learn.allMembers.forEach[postUpdate(ON)]
	Heating_Mode2.allMembers.forEach[postUpdate(1)]
	Heating_Setpoint_Current.allMembers.forEach[postUpdate(20)]
	Heating_Setpoint_Eco.allMembers.forEach[postUpdate(17)]
	Heating_Setpoint_Normal.allMembers.forEach[postUpdate(20)]
	Heating_Power.allMembers.forEach[postUpdate(50)] 
	createTimer(now.plusSeconds(10),[|	//let OH give a chance to update NULLs
		logInfo("svt2","retrigger")
		Heating_Mode2.allMembers.forEach[i|
			i.sendCommand(i.state)
			logInfo("svt2", "retrigger {}",i.name)
			] 
	])
end 

And items

Group:Number:AVG	Temperatures                                                    (gHistory)

Group:Number			Heating_Mode2																																				
Group:Switch:OR(ON,OFF)			Heating_BoilerValves								(gHistory)															
Group:Number			Heating_Setpoint_Normal																																							
Group:Number			Heating_Setpoint_Eco																																							
Group:Number			Heating_Setpoint_Current		                            (gHistory)																																									
Group:Number        	Heating_ConstC												(gHistory)
Group:DateTime       	Heating_LastCalc																																
Group:Number			Heating_CalcTime																					
Group:Switch			Heating_Learn					
Group:Number            Heating_Power  												(gHistory)					


Number					LNG_Radiator_Mode				"Lounge radiator mode [MAP(spiritmode.map):%s]"				(Heating_Mode2 )
Number					LNG_Radiator_Setpoint_Normal	"Lounge radiator thermostat [%.1f °C]"		<my-heating>	(Heating_Setpoint_Normal)
Number					LNG_Radiator_Setpoint_Eco		"Lounge radiator thermostat eco [%.1f °C]"	<my-heating>	(Heating_Setpoint_Eco)
//Number:Dimensionless	LNG_Radiator_Valve				"Lounge radiator valve [JS(topct.js):%s]"
//Number					LNG_Radiator_SensorReport		"Lounge external temperature [%.1f °C]"													{ channel="zwave:device:512:node3:sensor_report" }
Switch					LNG_Radiator_BoilerValve				"Lounge boiler valve [%s]"							(Heating_BoilerValves)  { mqtt=">[mosquitto:cmnd/sonoff-heating-1/POWER1:command:*:default], <[mosquitto:stat/sonoff-heating-1/POWER1:state:default]", autoupdate="false"}
Number					LNG_Radiator_Setpoint_Current			"Lounge current setpoint [%.1f °C]"					(Heating_Setpoint_Current)
Number					LNG_Radiator_CalcTime					"Lounge CalcTime [%s]"								(Heating_CalcTime)
Number					LNG_Radiator_ConstC						"Lounge ConstC [%s]"								(Heating_ConstC)
DateTime				LNG_Radiator_LastCalc					"Lounge LastCalc [%s]"								(Heating_LastCalc)																	
Switch					LNG_Radiator_Learn						"Lounge Learning [%s]"								(Heating_Learn)
Number                  LNG_Radiator_Power                      "Lounge Power [%s]"                                  (Heating_Power)

Number LNG_Radiator_Temperature "Lounge Temperature [%.1f °C]" 			    <temperature>   (Temperatures)  {mqtt="<[mosquitto:esp-lng-1/env/temperature:state:default]", expire="30m"}

Switch					BoilerRoom_Boiler_Switch			"Boiler on/off" 									<fire>

Switch                  Reset_SVT   "Reset SVT Variables" { expire="1s,OFF" }

gHistory group is used for persisting items on everyChange to jdbc/mysql

1 Like

Here’s some logs from when I left it to run for a while:

2019-12-06 17:42:39.837 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@3f6b53. CalcTime 30. When mode/setpoint changed
2019-12-06 17:42:49.785 [INFO ] [.eclipse.smarthome.model.script.svt2] - retrigger
2019-12-06 17:42:49.794 [INFO ] [.eclipse.smarthome.model.script.svt2] - retrigger
2019-12-06 17:42:49.794 [INFO ] [.eclipse.smarthome.model.script.svt2] - retrigger LNG_Radiator_Mode
2019-12-06 17:42:49.795 [INFO ] [.eclipse.smarthome.model.script.svt2] - retrigger LNG_Radiator_Mode
2019-12-06 17:42:49.800 [INFO ] [.eclipse.smarthome.model.script.svt2] - Room LNG, RoomDevice LNG_Radiator
2019-12-06 17:42:49.800 [INFO ] [.eclipse.smarthome.model.script.svt2] - Room LNG, RoomDevice LNG_Radiator
2019-12-06 17:42:49.802 [INFO ] [.eclipse.smarthome.model.script.svt2] - nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@3f6b53
2019-12-06 17:42:49.801 [INFO ] [.eclipse.smarthome.model.script.svt2] - nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@3f6b53
2019-12-06 17:42:49.805 [INFO ] [.eclipse.smarthome.model.script.svt2] - start new calc for LNG_Radiator in 30 minutes
2019-12-06 17:42:49.807 [INFO ] [.eclipse.smarthome.model.script.svt2] - start new calc for LNG_Radiator in 30 minutes
2019-12-06 17:42:49.815 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 20.0, Temp 21.3, Mode 1, Learning OFF
2019-12-06 17:42:49.818 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 20.0, Temp 21.3, Mode 1, Learning OFF
2019-12-06 17:42:49.837 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 21.3, roomsetpoint 20.0, lastpower 50.0, lastsetpoint 20.0
2019-12-06 17:42:49.838 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 21.3, roomsetpoint 20.0, lastpower 50.0, lastsetpoint 20.0
2019-12-06 17:42:49.841 [INFO ] [.eclipse.smarthome.model.script.svt2] - Power is 0
2019-12-06 17:42:49.843 [INFO ] [.eclipse.smarthome.model.script.svt2] - Power is 0
2019-12-06 17:42:49.846 [INFO ] [.eclipse.smarthome.model.script.svt2] - Heatduration is 0 minutes for LNG_Radiator
2019-12-06 17:42:49.848 [INFO ] [.eclipse.smarthome.model.script.svt2] - endHeatTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@3f6b53
2019-12-06 17:42:49.853 [INFO ] [.eclipse.smarthome.model.script.svt2] - Heatduration is 0 minutes for LNG_Radiator
2019-12-06 17:42:49.853 [INFO ] [.eclipse.smarthome.model.script.svt2] - No heat request
2019-12-06 17:42:49.858 [INFO ] [.eclipse.smarthome.model.script.svt2] - endHeatTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@3f6b53
2019-12-06 17:42:49.859 [INFO ] [.eclipse.smarthome.model.script.svt2] - No heat request
2019-12-06 17:42:49.871 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@108430e. Calctime 30. Inside own timer
2019-12-06 17:42:49.881 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@108430e. Calctime 30. Inside own timer
2019-12-06 17:43:13.482 [INFO ] [.eclipse.smarthome.model.script.svt2] - Room LNG, RoomDevice LNG_Radiator
2019-12-06 17:43:13.490 [INFO ] [.eclipse.smarthome.model.script.svt2] - nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@108430e
2019-12-06 17:43:13.496 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@108430e. CalcTime 30. When mode/setpoint changed
2019-12-06 17:43:13.500 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 21.0, Temp 21.3, Mode 1, Learning OFF
2019-12-06 17:43:13.513 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 21.3, roomsetpoint 21.0, lastpower 0.0, lastsetpoint 20.0
2019-12-06 17:43:13.515 [INFO ] [.eclipse.smarthome.model.script.svt2] - Power is 0
2019-12-06 17:43:13.516 [INFO ] [.eclipse.smarthome.model.script.svt2] - Heatduration is 0 minutes for LNG_Radiator
2019-12-06 17:43:13.518 [INFO ] [.eclipse.smarthome.model.script.svt2] - endHeatTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@3f6b53
2019-12-06 17:43:13.519 [INFO ] [.eclipse.smarthome.model.script.svt2] - No heat request
2019-12-06 17:43:13.536 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@108430e. Calctime 30. Inside own timer
2019-12-06 17:43:13.620 [INFO ] [.eclipse.smarthome.model.script.svt2] - Room LNG, RoomDevice LNG_Radiator
2019-12-06 17:43:13.623 [INFO ] [.eclipse.smarthome.model.script.svt2] - nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@108430e
2019-12-06 17:43:13.626 [INFO ] [.eclipse.smarthome.model.script.svt2] - start new calc for LNG_Radiator in 30 minutes
2019-12-06 17:43:13.637 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 22.0, Temp 21.3, Mode 1, Learning OFF
2019-12-06 17:43:13.652 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 21.3, roomsetpoint 22.0, lastpower 0.0, lastsetpoint 20.0
2019-12-06 17:43:13.654 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, constCItem = 
2019-12-06 17:43:13.657 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, cc = 
2019-12-06 17:43:13.658 [INFO ] [.eclipse.smarthome.model.script.svt2] - ConstC is 60.0
2019-12-06 17:43:13.661 [INFO ] [.eclipse.smarthome.model.script.svt2] - Power is 41.99999999999996
2019-12-06 17:43:13.663 [INFO ] [.eclipse.smarthome.model.script.svt2] - Heatduration is 12 minutes for LNG_Radiator
2019-12-06 17:43:13.664 [INFO ] [.eclipse.smarthome.model.script.svt2] - endHeatTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@108430e
2019-12-06 17:43:13.666 [INFO ] [.eclipse.smarthome.model.script.svt2] - Valve ON
2019-12-06 17:43:13.672 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@1ff9b4a. Calctime 30. Inside own timer
2019-12-06 17:43:13.854 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Boiler on/off': cannot invoke method public abstract java.util.Date org.eclipse.smarthome.core.persistence.HistoricItem.getTimestamp() on null
2019-12-06 17:43:21.170 [INFO ] [home.model.script.heating_mode.rules] - Executing 'System started' rule for Heating
2019-12-06 17:52:04.951 [INFO ] [el.core.internal.ModelRepositoryImpl] - Refreshing model 'smartheating.sitemap'
2019-12-06 17:55:13.669 [INFO ] [.eclipse.smarthome.model.script.svt2] - End heat
2019-12-06 17:55:13.676 [INFO ] [.eclipse.smarthome.model.script.svt2] - Valve OFF LNG_Radiator
2019-12-06 17:55:13.804 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Boiler on/off': cannot invoke method public abstract java.util.Date org.eclipse.smarthome.core.persistence.HistoricItem.getTimestamp() on null
2019-12-06 18:12:39.852 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 22.0, Temp 23.5, Mode 1, Learning ON
2019-12-06 18:12:39.865 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 23.5, roomsetpoint 22.0, lastpower 0.0, lastsetpoint 20.0
2019-12-06 18:12:39.871 [INFO ] [.eclipse.smarthome.model.script.svt2] - Power is 0
2019-12-06 18:12:39.876 [INFO ] [.eclipse.smarthome.model.script.svt2] - Heatduration is 0 minutes for LNG_Radiator
2019-12-06 18:12:39.879 [INFO ] [.eclipse.smarthome.model.script.svt2] - endHeatTimer for LNG_Radiator is null
2019-12-06 18:12:39.881 [INFO ] [.eclipse.smarthome.model.script.svt2] - No heat request
2019-12-06 18:12:39.918 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@1ff9b4a. Calctime 30. Inside own timer
2019-12-06 18:13:13.540 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 22.0, Temp 23.5, Mode 1, Learning OFF
2019-12-06 18:13:13.554 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 23.5, roomsetpoint 22.0, lastpower 41.99999999999996, lastsetpoint 22.0
2019-12-06 18:13:13.565 [INFO ] [.eclipse.smarthome.model.script.svt2] - Power is 0
2019-12-06 18:13:13.567 [INFO ] [.eclipse.smarthome.model.script.svt2] - Heatduration is 0 minutes for LNG_Radiator
2019-12-06 18:13:13.568 [INFO ] [.eclipse.smarthome.model.script.svt2] - endHeatTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@3f6b53
2019-12-06 18:13:13.569 [INFO ] [.eclipse.smarthome.model.script.svt2] - No heat request
2019-12-06 18:13:13.589 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@1ff9b4a. Calctime 30. Inside own timer
2019-12-06 18:43:13.595 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 22.0, Temp 22.2, Mode 1, Learning OFF
2019-12-06 18:43:13.605 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 22.2, roomsetpoint 22.0, lastpower 0.0, lastsetpoint 22.0
2019-12-06 18:43:13.617 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, constCItem = 
2019-12-06 18:43:13.619 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, cc = 
2019-12-06 18:43:13.620 [INFO ] [.eclipse.smarthome.model.script.svt2] - ConstC is 60.0
2019-12-06 18:43:13.622 [INFO ] [.eclipse.smarthome.model.script.svt2] - Power is 0.0
2019-12-06 18:43:13.625 [INFO ] [.eclipse.smarthome.model.script.svt2] - Heatduration is 0 minutes for LNG_Radiator
2019-12-06 18:43:13.627 [INFO ] [.eclipse.smarthome.model.script.svt2] - endHeatTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@108430e
2019-12-06 18:43:13.628 [INFO ] [.eclipse.smarthome.model.script.svt2] - No heat request
2019-12-06 18:43:13.650 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@1ff9b4a. Calctime 30. Inside own timer
2019-12-06 19:13:13.655 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 22.0, Temp 21.4, Mode 1, Learning OFF
2019-12-06 19:13:13.674 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 21.4, roomsetpoint 22.0, lastpower 0.0, lastsetpoint 22.0
2019-12-06 19:13:13.676 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, constCItem = 
2019-12-06 19:13:13.679 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, cc = 
2019-12-06 19:13:13.680 [INFO ] [.eclipse.smarthome.model.script.svt2] - ConstC is 60.0
2019-12-06 19:13:13.685 [INFO ] [.eclipse.smarthome.model.script.svt2] - Power is 36.000000000000085
2019-12-06 19:13:13.689 [INFO ] [.eclipse.smarthome.model.script.svt2] - Heatduration is 10 minutes for LNG_Radiator
2019-12-06 19:13:13.692 [INFO ] [.eclipse.smarthome.model.script.svt2] - endHeatTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@108430e
2019-12-06 19:13:13.698 [INFO ] [.eclipse.smarthome.model.script.svt2] - Valve ON
2019-12-06 19:13:13.714 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@1ff9b4a. Calctime 30. Inside own timer
2019-12-06 19:13:13.830 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Boiler on/off': cannot invoke method public abstract java.util.Date org.eclipse.smarthome.core.persistence.HistoricItem.getTimestamp() on null
2019-12-06 19:22:16.845 [INFO ] [el.core.internal.ModelRepositoryImpl] - Refreshing model 'heating.items'
2019-12-06 19:23:13.702 [INFO ] [.eclipse.smarthome.model.script.svt2] - End heat
2019-12-06 19:23:13.710 [INFO ] [.eclipse.smarthome.model.script.svt2] - Valve OFF LNG_Radiator
2019-12-06 19:23:13.918 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Boiler on/off': cannot invoke method public abstract java.util.Date org.eclipse.smarthome.core.persistence.HistoricItem.getTimestamp() on null
2019-12-06 19:23:38.199 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Boiler on/off': cannot invoke method public abstract java.util.Date org.eclipse.smarthome.core.persistence.HistoricItem.getTimestamp() on null
2019-12-06 19:28:35.094 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Boiler on/off': cannot invoke method public abstract java.util.Date org.eclipse.smarthome.core.persistence.HistoricItem.getTimestamp() on null
2019-12-06 19:43:13.720 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 22.0, Temp 21.8, Mode 1, Learning ON
2019-12-06 19:43:13.730 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 21.8, roomsetpoint 22.0, lastpower 0.0, lastsetpoint 22.0
2019-12-06 19:43:13.743 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, constCItem = 
2019-12-06 19:43:13.749 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, cc = 
2019-12-06 19:43:13.754 [INFO ] [.eclipse.smarthome.model.script.svt2] - ConstC is 60.0
2019-12-06 19:43:13.756 [INFO ] [.eclipse.smarthome.model.script.svt2] - Power is 11.999999999999957
2019-12-06 19:43:13.761 [INFO ] [.eclipse.smarthome.model.script.svt2] - Heatduration is 3 minutes for LNG_Radiator
2019-12-06 19:43:13.763 [INFO ] [.eclipse.smarthome.model.script.svt2] - endHeatTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@108430e
2019-12-06 19:43:13.768 [INFO ] [.eclipse.smarthome.model.script.svt2] - Valve ON
2019-12-06 19:43:13.783 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@1ff9b4a. Calctime 30. Inside own timer
2019-12-06 19:43:13.994 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Boiler on/off': cannot invoke method public abstract java.util.Date org.eclipse.smarthome.core.persistence.HistoricItem.getTimestamp() on null
2019-12-06 19:46:13.773 [INFO ] [.eclipse.smarthome.model.script.svt2] - End heat
2019-12-06 19:46:13.780 [INFO ] [.eclipse.smarthome.model.script.svt2] - Valve OFF LNG_Radiator
2019-12-06 19:46:13.948 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Boiler on/off': cannot invoke method public abstract java.util.Date org.eclipse.smarthome.core.persistence.HistoricItem.getTimestamp() on null
2019-12-06 20:13:13.785 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 22.0, Temp 21.6, Mode 1, Learning ON
2019-12-06 20:13:13.794 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 21.6, roomsetpoint 22.0, lastpower 36.000000000000085, lastsetpoint 22.0
2019-12-06 20:13:13.796 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, constCItem = 
2019-12-06 20:13:13.799 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, cc = 
2019-12-06 20:13:13.810 [INFO ] [.eclipse.smarthome.model.script.svt2] - Last temperature 21.8, Last setpoint 22.0, delta 1800.0, room temp 21.6, calc time 30, ConstCAvg 60.0
2019-12-06 20:13:13.816 [INFO ] [.eclipse.smarthome.model.script.svt2] - ConstC is -60.0
2019-12-06 20:13:13.820 [INFO ] [.eclipse.smarthome.model.script.svt2] - Power is 0.0
2019-12-06 20:13:13.844 [INFO ] [.eclipse.smarthome.model.script.svt2] - Heatduration is 0 minutes for LNG_Radiator
2019-12-06 20:13:13.846 [INFO ] [.eclipse.smarthome.model.script.svt2] - endHeatTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@108430e
2019-12-06 20:13:13.847 [INFO ] [.eclipse.smarthome.model.script.svt2] - No heat request
2019-12-06 20:13:13.863 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@1ff9b4a. Calctime 30. Inside own timer
2019-12-06 20:35:59.394 [INFO ] [el.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model 'smartheating.rules', using it anyway:
Assignment to final variable
2019-12-06 20:35:59.433 [INFO ] [el.core.internal.ModelRepositoryImpl] - Refreshing model 'smartheating.rules'
2019-12-06 20:36:07.075 [INFO ] [.eclipse.smarthome.model.script.svt2] - System started, resetting timers and checking for NULL
2019-12-06 20:36:17.079 [INFO ] [.eclipse.smarthome.model.script.svt2] - retrigger
2019-12-06 20:36:17.082 [INFO ] [.eclipse.smarthome.model.script.svt2] - retrigger LNG_Radiator_Mode
2019-12-06 20:36:17.085 [INFO ] [.eclipse.smarthome.model.script.svt2] - Room LNG, RoomDevice LNG_Radiator
2019-12-06 20:36:17.088 [INFO ] [.eclipse.smarthome.model.script.svt2] - nextCalcTimer for LNG_Radiator is null
2019-12-06 20:36:17.090 [INFO ] [.eclipse.smarthome.model.script.svt2] - start new calc for LNG_Radiator in 30 minutes
2019-12-06 20:36:17.098 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 22.0, Temp 21.7, Mode 1, Learning OFF
2019-12-06 20:36:17.107 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 21.7, roomsetpoint 22.0, lastpower 11.999999999999957, lastsetpoint 22.0
2019-12-06 20:36:17.109 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, constCItem = LNG_Radiator_ConstC
2019-12-06 20:36:17.114 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, cc = -7.903852923986432
2019-12-06 20:36:17.115 [INFO ] [.eclipse.smarthome.model.script.svt2] - ConstC is -7.903852923986432
2019-12-06 20:36:17.117 [INFO ] [.eclipse.smarthome.model.script.svt2] - Power is 0.0
2019-12-06 20:36:17.121 [INFO ] [.eclipse.smarthome.model.script.svt2] - Heatduration is 0 minutes for LNG_Radiator
2019-12-06 20:36:17.123 [INFO ] [.eclipse.smarthome.model.script.svt2] - endHeatTimer for LNG_Radiator is null
2019-12-06 20:36:17.124 [INFO ] [.eclipse.smarthome.model.script.svt2] - No heat request
2019-12-06 20:36:17.132 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@1e207d8. Calctime 30. Inside own timer
2019-12-06 20:37:21.605 [INFO ] [.eclipse.smarthome.model.script.svt2] - Room LNG, RoomDevice LNG_Radiator
2019-12-06 20:37:21.610 [INFO ] [.eclipse.smarthome.model.script.svt2] - nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@1e207d8
2019-12-06 20:37:21.613 [INFO ] [.eclipse.smarthome.model.script.svt2] - start new calc for LNG_Radiator in 30 minutes
2019-12-06 20:37:21.623 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 23.0, Temp 21.7, Mode 1, Learning ON
2019-12-06 20:37:21.632 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 21.7, roomsetpoint 23.0, lastpower 0.0, lastsetpoint 22.0
2019-12-06 20:37:21.634 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, constCItem = LNG_Radiator_ConstC
2019-12-06 20:37:21.641 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, cc = -8.221846373883333
2019-12-06 20:37:21.642 [INFO ] [.eclipse.smarthome.model.script.svt2] - ConstC is -8.221846373883333
2019-12-06 20:37:21.646 [INFO ] [.eclipse.smarthome.model.script.svt2] - Power is 0.0
2019-12-06 20:37:21.649 [INFO ] [.eclipse.smarthome.model.script.svt2] - Heatduration is 0 minutes for LNG_Radiator
2019-12-06 20:37:21.650 [INFO ] [.eclipse.smarthome.model.script.svt2] - endHeatTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@1e207d8
2019-12-06 20:37:21.651 [INFO ] [.eclipse.smarthome.model.script.svt2] - No heat request
2019-12-06 20:37:21.667 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@296c7b. Calctime 30. Inside own timer
2019-12-06 20:37:22.824 [INFO ] [.eclipse.smarthome.model.script.svt2] - Room LNG, RoomDevice LNG_Radiator
2019-12-06 20:37:22.827 [INFO ] [.eclipse.smarthome.model.script.svt2] - nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@296c7b
2019-12-06 20:37:22.830 [INFO ] [.eclipse.smarthome.model.script.svt2] - start new calc for LNG_Radiator in 30 minutes
2019-12-06 20:37:22.837 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 22.0, Temp 21.7, Mode 1, Learning OFF
2019-12-06 20:37:22.847 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 21.7, roomsetpoint 22.0, lastpower 0.0, lastsetpoint 22.0
2019-12-06 20:37:22.849 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, constCItem = LNG_Radiator_ConstC
2019-12-06 20:37:22.852 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, cc = -8.227776973306444
2019-12-06 20:37:22.853 [INFO ] [.eclipse.smarthome.model.script.svt2] - ConstC is -8.227776973306444
2019-12-06 20:37:22.855 [INFO ] [.eclipse.smarthome.model.script.svt2] - Power is 0.0
2019-12-06 20:37:22.856 [INFO ] [.eclipse.smarthome.model.script.svt2] - Heatduration is 0 minutes for LNG_Radiator
2019-12-06 20:37:22.857 [INFO ] [.eclipse.smarthome.model.script.svt2] - endHeatTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@296c7b
2019-12-06 20:37:22.858 [INFO ] [.eclipse.smarthome.model.script.svt2] - No heat request
2019-12-06 20:37:22.863 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@149f49a. Calctime 30. Inside own timer
2019-12-06 20:43:13.862 [ERROR] [org.quartz.core.JobRunShell         ] - Job DEFAULT.Timer 868 2019-12-06T17:43:13.627Z: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: 
2019-12-06 20:47:18.490 [INFO ] [el.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model 'smartheating.rules', using it anyway:
Assignment to final variable
2019-12-06 20:47:18.507 [INFO ] [el.core.internal.ModelRepositoryImpl] - Refreshing model 'smartheating.rules'
2019-12-06 20:47:26.304 [INFO ] [.eclipse.smarthome.model.script.svt2] - System started, resetting timers and checking for NULL
2019-12-06 20:47:36.308 [INFO ] [.eclipse.smarthome.model.script.svt2] - retrigger
2019-12-06 20:47:36.321 [INFO ] [.eclipse.smarthome.model.script.svt2] - Room LNG, RoomDevice LNG_Radiator
2019-12-06 20:47:36.322 [INFO ] [.eclipse.smarthome.model.script.svt2] - retrigger LNG_Radiator_Mode
2019-12-06 20:47:36.325 [INFO ] [.eclipse.smarthome.model.script.svt2] - nextCalcTimer for LNG_Radiator is null
2019-12-06 20:47:36.327 [INFO ] [.eclipse.smarthome.model.script.svt2] - start new calc for LNG_Radiator in 30 minutes
2019-12-06 20:47:36.338 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 22.0, Temp 21.5, Mode 1, Learning ON
2019-12-06 20:47:36.346 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 21.5, roomsetpoint 22.0, lastpower 0.0, lastsetpoint 23.0
2019-12-06 20:47:36.348 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, constCItem = LNG_Radiator_ConstC
2019-12-06 20:47:36.351 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, cc = -11.06715317622342
2019-12-06 20:47:36.352 [INFO ] [.eclipse.smarthome.model.script.svt2] - ConstC is -11.06715317622342
2019-12-06 20:47:36.354 [INFO ] [.eclipse.smarthome.model.script.svt2] - Power is 0.0
2019-12-06 20:47:36.369 [INFO ] [.eclipse.smarthome.model.script.svt2] - Heatduration is 0 minutes for LNG_Radiator
2019-12-06 20:47:36.371 [INFO ] [.eclipse.smarthome.model.script.svt2] - endHeatTimer for LNG_Radiator is null
2019-12-06 20:47:36.371 [INFO ] [.eclipse.smarthome.model.script.svt2] - No heat request
2019-12-06 20:47:36.386 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@167774f. Calctime 30. Inside own timer
2019-12-06 20:49:46.871 [INFO ] [el.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model 'smartheating.rules', using it anyway:
Assignment to final variable
2019-12-06 20:49:46.904 [INFO ] [el.core.internal.ModelRepositoryImpl] - Refreshing model 'smartheating.rules'
2019-12-06 20:49:54.138 [INFO ] [.eclipse.smarthome.model.script.svt2] - System started, resetting timers and checking for NULL
2019-12-06 20:50:04.143 [INFO ] [.eclipse.smarthome.model.script.svt2] - retrigger
2019-12-06 20:50:04.147 [INFO ] [.eclipse.smarthome.model.script.svt2] - retrigger LNG_Radiator_Mode
2019-12-06 20:50:04.151 [INFO ] [.eclipse.smarthome.model.script.svt2] - Room LNG, RoomDevice LNG_Radiator
2019-12-06 20:50:04.156 [INFO ] [.eclipse.smarthome.model.script.svt2] - nextCalcTimer for LNG_Radiator is null
2019-12-06 20:50:04.157 [INFO ] [.eclipse.smarthome.model.script.svt2] - start new calc for LNG_Radiator in 30 minutes
2019-12-06 20:50:04.165 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 22.0, Temp 21.5, Mode 1, Learning OFF
2019-12-06 20:50:04.180 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 21.5, roomsetpoint 22.0, lastpower 0.0, lastsetpoint 22.0
2019-12-06 20:50:04.182 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, constCItem = LNG_Radiator_ConstC
2019-12-06 20:50:04.189 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, cc = -11.70541094735583
2019-12-06 20:50:04.190 [INFO ] [.eclipse.smarthome.model.script.svt2] - ConstC is -11.70541094735583
2019-12-06 20:50:04.192 [INFO ] [.eclipse.smarthome.model.script.svt2] - Power is 0.0
2019-12-06 20:50:04.201 [INFO ] [.eclipse.smarthome.model.script.svt2] - Heatduration is 0 minutes for LNG_Radiator
2019-12-06 20:50:04.202 [INFO ] [.eclipse.smarthome.model.script.svt2] - endHeatTimer for LNG_Radiator is null
2019-12-06 20:50:04.203 [INFO ] [.eclipse.smarthome.model.script.svt2] - No heat request
2019-12-06 20:50:04.219 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@1e12491. Calctime 30. Inside own timer
2019-12-06 20:50:32.100 [INFO ] [.eclipse.smarthome.model.script.svt2] - Room LNG, RoomDevice LNG_Radiator
2019-12-06 20:50:32.110 [INFO ] [.eclipse.smarthome.model.script.svt2] - nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@1e12491
2019-12-06 20:50:32.115 [INFO ] [.eclipse.smarthome.model.script.svt2] - Room LNG, RoomDevice LNG_Radiator
2019-12-06 20:50:32.117 [INFO ] [.eclipse.smarthome.model.script.svt2] - start new calc for LNG_Radiator in 30 minutes
2019-12-06 20:50:32.117 [INFO ] [.eclipse.smarthome.model.script.svt2] - nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@1e12491
2019-12-06 20:50:32.119 [INFO ] [.eclipse.smarthome.model.script.svt2] - start new calc for LNG_Radiator in 30 minutes
2019-12-06 20:50:32.125 [INFO ] [.eclipse.smarthome.model.script.svt2] - Room LNG, RoomDevice LNG_Radiator
2019-12-06 20:50:32.133 [INFO ] [.eclipse.smarthome.model.script.svt2] - Room LNG, RoomDevice LNG_Radiator
2019-12-06 20:50:32.135 [INFO ] [.eclipse.smarthome.model.script.svt2] - nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@bcf207
2019-12-06 20:50:32.136 [INFO ] [.eclipse.smarthome.model.script.svt2] - nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@bcf207
2019-12-06 20:50:32.140 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 20.0, Temp 21.5, Mode 1, Learning OFF
2019-12-06 20:50:32.145 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 20.0, Temp 21.5, Mode 1, Learning OFF
2019-12-06 20:50:32.149 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@bcf207. CalcTime 30. When mode/setpoint changed
2019-12-06 20:50:32.148 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 20.0, Temp 21.5, Mode 1, Learning OFF
2019-12-06 20:50:32.157 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@bcf207. CalcTime 30. When mode/setpoint changed
2019-12-06 20:50:32.181 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 20.0, Temp 21.5, Mode 1, Learning OFF
2019-12-06 20:50:32.182 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 21.5, roomsetpoint 20.0, lastpower 0.0, lastsetpoint 22.0
2019-12-06 20:50:32.184 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 21.5, roomsetpoint 20.0, lastpower 0.0, lastsetpoint 22.0
2019-12-06 20:50:32.187 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 21.5, roomsetpoint 20.0, lastpower 0.0, lastsetpoint 22.0
2019-12-06 20:50:32.188 [INFO ] [.eclipse.smarthome.model.script.svt2] - Power is 0
2019-12-06 20:50:32.189 [INFO ] [.eclipse.smarthome.model.script.svt2] - Power is 0
2019-12-06 20:50:32.191 [INFO ] [.eclipse.smarthome.model.script.svt2] - Power is 0
2019-12-06 20:50:32.191 [INFO ] [.eclipse.smarthome.model.script.svt2] - Heatduration is 0 minutes for LNG_Radiator
2019-12-06 20:50:32.195 [INFO ] [.eclipse.smarthome.model.script.svt2] - endHeatTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@1e12491
2019-12-06 20:50:32.197 [INFO ] [.eclipse.smarthome.model.script.svt2] - No heat request
2019-12-06 20:50:32.201 [INFO ] [.eclipse.smarthome.model.script.svt2] - Heatduration is 0 minutes for LNG_Radiator
2019-12-06 20:50:32.202 [INFO ] [.eclipse.smarthome.model.script.svt2] - Heatduration is 0 minutes for LNG_Radiator
2019-12-06 20:50:32.203 [INFO ] [.eclipse.smarthome.model.script.svt2] - endHeatTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@1e12491
2019-12-06 20:50:32.203 [INFO ] [.eclipse.smarthome.model.script.svt2] - No heat request
2019-12-06 20:50:32.226 [INFO ] [.eclipse.smarthome.model.script.svt2] - endHeatTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@1e12491
2019-12-06 20:50:32.229 [INFO ] [.eclipse.smarthome.model.script.svt2] - No heat request
2019-12-06 20:50:32.230 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 21.5, roomsetpoint 20.0, lastpower 0.0, lastsetpoint 22.0
2019-12-06 20:50:32.247 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@6a3a2. Calctime 30. Inside own timer
2019-12-06 20:50:32.245 [INFO ] [.eclipse.smarthome.model.script.svt2] - Power is 0
2019-12-06 20:50:32.253 [WARN ] [el.script.internal.actions.TimerImpl] - An error occurred while rescheduling the job because one already exists with this identification.
2019-12-06 20:50:32.254 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@6a3a2. Calctime 30. Inside own timer
2019-12-06 20:50:32.255 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@6a3a2. Calctime 30. Inside own timer
2019-12-06 20:50:32.256 [INFO ] [.eclipse.smarthome.model.script.svt2] - Heatduration is 0 minutes for LNG_Radiator
2019-12-06 20:50:32.258 [INFO ] [.eclipse.smarthome.model.script.svt2] - endHeatTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@1e12491
2019-12-06 20:50:32.259 [INFO ] [.eclipse.smarthome.model.script.svt2] - No heat request
2019-12-06 20:50:32.273 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@6a3a2. Calctime 30. Inside own timer
2019-12-06 20:50:42.121 [INFO ] [.eclipse.smarthome.model.script.svt2] - retrigger
2019-12-06 20:50:42.123 [INFO ] [.eclipse.smarthome.model.script.svt2] - retrigger LNG_Radiator_Mode
2019-12-06 20:50:42.127 [INFO ] [.eclipse.smarthome.model.script.svt2] - Room LNG, RoomDevice LNG_Radiator
2019-12-06 20:50:42.129 [INFO ] [.eclipse.smarthome.model.script.svt2] - nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@6a3a2
2019-12-06 20:50:42.131 [INFO ] [.eclipse.smarthome.model.script.svt2] - start new calc for LNG_Radiator in 30 minutes
2019-12-06 20:50:42.139 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 20.0, Temp 21.5, Mode 1, Learning OFF
2019-12-06 20:50:42.147 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 21.5, roomsetpoint 20.0, lastpower 0.0, lastsetpoint 22.0
2019-12-06 20:50:42.151 [INFO ] [.eclipse.smarthome.model.script.svt2] - Power is 0
2019-12-06 20:50:42.153 [INFO ] [.eclipse.smarthome.model.script.svt2] - Heatduration is 0 minutes for LNG_Radiator
2019-12-06 20:50:42.155 [INFO ] [.eclipse.smarthome.model.script.svt2] - endHeatTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@6a3a2
2019-12-06 20:50:42.156 [INFO ] [.eclipse.smarthome.model.script.svt2] - No heat request
2019-12-06 20:50:42.163 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@3d34d3. Calctime 30. Inside own timer
2019-12-06 20:50:52.330 [INFO ] [.eclipse.smarthome.model.script.svt2] - Room LNG, RoomDevice LNG_Radiator
2019-12-06 20:50:52.333 [INFO ] [.eclipse.smarthome.model.script.svt2] - nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@3d34d3
2019-12-06 20:50:52.335 [INFO ] [.eclipse.smarthome.model.script.svt2] - start new calc for LNG_Radiator in 30 minutes
2019-12-06 20:50:52.343 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 21.0, Temp 21.5, Mode 1, Learning OFF
2019-12-06 20:50:52.361 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 21.5, roomsetpoint 21.0, lastpower 0.0, lastsetpoint 20.0
2019-12-06 20:50:52.364 [INFO ] [.eclipse.smarthome.model.script.svt2] - Power is 0
2019-12-06 20:50:52.369 [INFO ] [.eclipse.smarthome.model.script.svt2] - Heatduration is 0 minutes for LNG_Radiator
2019-12-06 20:50:52.370 [INFO ] [.eclipse.smarthome.model.script.svt2] - endHeatTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@3d34d3
2019-12-06 20:50:52.371 [INFO ] [.eclipse.smarthome.model.script.svt2] - No heat request
2019-12-06 20:50:52.386 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@9c6706. Calctime 30. Inside own timer
2019-12-06 20:50:52.799 [INFO ] [.eclipse.smarthome.model.script.svt2] - Room LNG, RoomDevice LNG_Radiator
2019-12-06 20:50:52.802 [INFO ] [.eclipse.smarthome.model.script.svt2] - nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@9c6706
2019-12-06 20:50:52.804 [INFO ] [.eclipse.smarthome.model.script.svt2] - start new calc for LNG_Radiator in 30 minutes
2019-12-06 20:50:52.811 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 22.0, Temp 21.5, Mode 1, Learning OFF
2019-12-06 20:50:52.832 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 21.5, roomsetpoint 22.0, lastpower 0.0, lastsetpoint 20.0
2019-12-06 20:50:52.834 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, constCItem = LNG_Radiator_ConstC
2019-12-06 20:50:52.837 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, cc = 0.109828517251764
2019-12-06 20:50:52.838 [INFO ] [.eclipse.smarthome.model.script.svt2] - ConstC is 0.109828517251764
2019-12-06 20:50:52.840 [INFO ] [.eclipse.smarthome.model.script.svt2] - Power is 0.054914258625882
2019-12-06 20:50:52.842 [INFO ] [.eclipse.smarthome.model.script.svt2] - Heatduration is 0 minutes for LNG_Radiator
2019-12-06 20:50:52.843 [INFO ] [.eclipse.smarthome.model.script.svt2] - endHeatTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@9c6706
2019-12-06 20:50:52.846 [INFO ] [.eclipse.smarthome.model.script.svt2] - Valve ON
2019-12-06 20:50:52.851 [INFO ] [.eclipse.smarthome.model.script.svt2] - End heat
2019-12-06 20:50:52.854 [INFO ] [.eclipse.smarthome.model.script.svt2] - reschedule nextCalcTimer for LNG_Radiator is org.eclipse.smarthome.model.script.internal.actions.TimerImpl@ae4c84. Calctime 30. Inside own timer
2019-12-06 20:50:52.860 [INFO ] [.eclipse.smarthome.model.script.svt2] - Valve OFF LNG_Radiator

Thanks for you feedback. I experience the save problem, I’ve got also negative ConstatC’s, but also very high ConstactC.
I’m working on that.

The reason is as follow:

Because the last temperature is higher than the current room temperature, the value (roomTemp-lastTemp) wil be negative and causes a negative ConstC.

So, I know the problem, now I need to figure out how to fix it.

Well, I’ve looked in the original code and I see that I’ve forgot a “fail-safe” in the formula: if roomTemp > lastTemp then do the caculation :grimacing:

I’m going to fix it and publish it.

Would it be possible to put this code on GitHub? :slight_smile: It would be easier I think to follow the changes there…

1 Like

Good idea! But I’ve no experience of using GitHub. Only to search for things.

If you can give me hits, guides, how-to’s or anything I’m going to read GitHub Guide, so I can learn how to use GitHub for sharing my code. :slight_smile:

For now, I’ve updated my code to version 0.2.5

Yes, for sure :slight_smile:

https://help.github.com/en/github/getting-started-with-github/create-a-repo

But what you have linked is also good, maybe a little bit more detailed.

Scrolling through, this seems a good how-to guide.

But basically what you will have to do:

  • Create a GitHub account if you don’t own one.
  • Create a new repository. You can check this in the linked tutorial. You just have to press the “+” icon in the top right corner and follow the instructions. Give a proper name, etc… Leave it public so everyone will see it. You can also check the initialize with a README.md option, and you can later copy the first post (excluding the rule and items).
  • You can use Git from your computer if installed to add files to the repository or you can use the GitHub UI as in the tutorial to edit and create files.

This infinity checking part is missing from 2.5? Is it intended or by accident?

                            // Catch if somehow calculation is infinity
                            if (ccCalc.toString.contains("Infinity")) {
								logInfo(filename, "Infinity calc: {}, roomDevice: {}", ccCalc.toString, roomDevice)
								Heating_ConstC.allMembers.findFirst[name.contains(roomDevice)].postUpdate(cc)
								cc
							}

							else {
								Heating_ConstC.allMembers.findFirst[name.contains(roomDevice)].postUpdate(cc * ccCalc)
								cc * ccCalc
							}

It is intended. The formula can’t be infinity (and negative) any more because of the addition of: if (roomTemp > lastTemp && lastSetpoint > lastTemp)

And there was a bug in that part of the code. I fixed it.

Done, if all went well you can find my repository at https://github.com/ljsquare/SmartVirtualThermostat

Thanks :slight_smile: I can see it and looks great!

Hi,

Grabbed the latest from github, and am trying again.

I’ve done a reset item/rule:

rule "Reset SVT"
when
    Item Reset_SVT received command ON 
then 

    Heating_BoilerValves.allMembers.forEach[postUpdate(OFF)]
    Heating_CalcTime.allMembers.forEach[postUpdate(30)]
    Heating_ConstC.allMembers.forEach[postUpdate(60)]
    Heating_LastCalc.allMembers.forEach[postUpdate(new DateTimeType(now.toString))]
    Heating_Learn.allMembers.forEach[postUpdate(ON)]
    Heating_Mode2.allMembers.forEach[postUpdate(0)]
    Heating_Setpoint_Current.allMembers.forEach[postUpdate(20)]
    Heating_Setpoint_Eco.allMembers.forEach[postUpdate(17)]
    Heating_Setpoint_Normal.allMembers.forEach[postUpdate(20)]
    Heating_Power.allMembers.forEach[postUpdate(50)]
end

But, unfortunately, when setting the Mode to 1 and setpoint to a value higher than my current temperature, the following is logged in events.log:

2019-12-18 17:37:44.116 [ome.event.ItemCommandEvent] - Item 'LNG_Radiator_Setpoint_Current' received command 21
2019-12-18 17:37:44.118 [vent.ItemStateChangedEvent] - LNG_Radiator_Setpoint_Current changed from 20 to 21
2019-12-18 17:37:44.120 [GroupItemStateChangedEvent] - Heating_Setpoint_Current changed from 20 to 21 through LNG_Radiator_Setpoint_Current
2019-12-18 17:37:44.567 [ome.event.ItemCommandEvent] - Item 'LNG_Radiator_Setpoint_Current' received command 22
2019-12-18 17:37:44.570 [GroupItemStateChangedEvent] - Heating_Setpoint_Current changed from 21 to 22 through LNG_Radiator_Setpoint_Current
2019-12-18 17:37:44.572 [vent.ItemStateChangedEvent] - LNG_Radiator_Setpoint_Current changed from 21 to 22
2019-12-18 17:37:45.523 [ome.event.ItemCommandEvent] - Item 'LNG_Radiator_Setpoint_Normal' received command 21
2019-12-18 17:37:45.527 [GroupItemStateChangedEvent] - Heating_Setpoint_Normal changed from 20 to 21 through LNG_Radiator_Setpoint_Normal
2019-12-18 17:37:45.528 [vent.ItemStateChangedEvent] - LNG_Radiator_Setpoint_Normal changed from 20 to 21
2019-12-18 17:37:45.705 [ome.event.ItemCommandEvent] - Item 'LNG_Radiator_Setpoint_Normal' received command 22
2019-12-18 17:37:45.708 [GroupItemStateChangedEvent] - Heating_Setpoint_Normal changed from 21 to 22 through LNG_Radiator_Setpoint_Normal
2019-12-18 17:37:45.711 [vent.ItemStateChangedEvent] - LNG_Radiator_Setpoint_Normal changed from 21 to 22
2019-12-18 17:37:59.778 [ome.event.ItemCommandEvent] - Item 'LNG_Radiator_Mode' received command 1
2019-12-18 17:37:59.782 [vent.ItemStateChangedEvent] - LNG_Radiator_Mode changed from 0 to 1
2019-12-18 17:37:59.786 [GroupItemStateChangedEvent] - Heating_Mode2 changed from 0 to 1 through LNG_Radiator_Mode

And the following error is logged:

2019-12-18 17:37:59.783 [INFO ] [.eclipse.smarthome.model.script.svt2] - Room LNG, RoomDevice LNG_Radiator
2019-12-18 17:37:59.786 [INFO ] [.eclipse.smarthome.model.script.svt2] - nextCalcTimer for LNG_Radiator is null
2019-12-18 17:37:59.788 [INFO ] [.eclipse.smarthome.model.script.svt2] - start new calc for LNG_Radiator in 30 minutes
2019-12-18 17:37:59.795 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, Setpoint 22.0, Temp 20.8, Mode 1, Learning ON
2019-12-18 17:37:59.811 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice LNG_Radiator, roomtemp 20.8, roomsetpoint 22.0, lastpower 0.054914258625882, lastsetpoint 20.0, roomlearn ON
2019-12-18 17:37:59.816 [ERROR] [org.quartz.core.JobRunShell         ] - Job DEFAULT.Timer 1057 2019-12-18T17:37:59.789Z: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
  val roomTemp
  val roomMode
  val lastCalcItem
  val roomSetpoint
  val roomLearnItem
  var roomLearn
  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XMemberFeatureCallImplCustom>)
  val setpointItem
  val powerItem
  var lastSetpoint
  val lastSetpointState
  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@154d0d9
  val lastPower
  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@14ffcb0
  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>)
  val power
  <XFeatureCallImplCustom>.postUpdate(<XFeatureCallImplCustom>)
  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XFeatureCallImplCustom>)
  val heatduration
  val valveItem
  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XMemberFeatureCallImplCustom>,<XFeatureCallImplCustom>)
  val roomEndHeatTimer
  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XFeatureCallImplCustom>,<XMemberFeatureCallImplCustom>)
  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@1088cc7
  <XFeatureCallImplCustom>.postUpdate(<XConstructorCallImplCustom>)
  <XFeatureCallImplCustom>.postUpdate(<XFeatureCallImplCustom>)
  <XFeatureCallImplCustom>.postUpdate(<XFeatureCallImplCustom>)
  <XMemberFeatureCallImplCustom>.reschedule(<XMemberFeatureCallImplCustom>)
  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XFeatureCallImplCustom>,<XMemberFeatureCallImplCustom>,<XFeatureCallImplCustom>)
} ] threw an unhandled Exception: 
java.lang.NullPointerException: cannot invoke method public abstract double java.lang.Number.doubleValue() on null
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:1071) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:1061) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1047) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:992) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:151) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:772) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:220) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:827) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:264) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:447) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:228) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:460) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:244) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:827) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:264) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:447) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:228) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:190) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:29) ~[?:?]
	at com.sun.proxy.$Proxy3853.apply(Unknown Source) ~[?:?]
	at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:49) ~[?:?]
	at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [181:org.openhab.core.scheduler:2.5.0.M3]
	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [181:org.openhab.core.scheduler:2.5.0.M3]
2019-12-18 17:37:59.908 [ERROR] [org.quartz.core.ErrorLogger         ] - Job (DEFAULT.Timer 1057 2019-12-18T17:37:59.789Z: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
  val roomTemp
  val roomMode
  val lastCalcItem
  val roomSetpoint
  val roomLearnItem
  var roomLearn
  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XMemberFeatureCallImplCustom>)
  val setpointItem
  val powerItem
  var lastSetpoint
  val lastSetpointState
  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@154d0d9
  val lastPower
  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@14ffcb0
  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>)
  val power
  <XFeatureCallImplCustom>.postUpdate(<XFeatureCallImplCustom>)
  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XFeatureCallImplCustom>)
  val heatduration
  val valveItem
  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XMemberFeatureCallImplCustom>,<XFeatureCallImplCustom>)
  val roomEndHeatTimer
  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XFeatureCallImplCustom>,<XMemberFeatureCallImplCustom>)
  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@1088cc7
  <XFeatureCallImplCustom>.postUpdate(<XConstructorCallImplCustom>)
  <XFeatureCallImplCustom>.postUpdate(<XFeatureCallImplCustom>)
  <XFeatureCallImplCustom>.postUpdate(<XFeatureCallImplCustom>)
  <XMemberFeatureCallImplCustom>.reschedule(<XMemberFeatureCallImplCustom>)
  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XFeatureCallImplCustom>,<XMemberFeatureCallImplCustom>,<XFeatureCallImplCustom>)
} ] threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception.
	at org.quartz.core.JobRunShell.run(JobRunShell.java:213) [181:org.openhab.core.scheduler:2.5.0.M3]
	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [181:org.openhab.core.scheduler:2.5.0.M3]
Caused by: java.lang.NullPointerException: cannot invoke method public abstract double java.lang.Number.doubleValue() on null
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:1071) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:1061) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1047) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:992) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:151) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:772) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:220) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:827) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:264) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:447) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:228) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:460) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:244) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:827) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:264) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:447) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:228) ~[?:?]
	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:190) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46) ~[?:?]
	at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:29) ~[?:?]
	at com.sun.proxy.$Proxy3853.apply(Unknown Source) ~[?:?]
	at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:49) ~[?:?]
	at org.quartz.core.JobRunShell.run(JobRunShell.java:202) ~[?:?]
	... 1 more

I’ve had the same problem, but I can’t remember it any more what the problem is. I get back to you.

Sorry for the delay @Confused.
Probably this part of the code:
var cc = (constCItem.averageSince(now.minusDays(7),DATABASE) as Number).doubleValue
gives the error. I had the same, I reset the database (rrd4j) by clearing it. Then there were too few entries to calculate the averegeSince, there for causes a null error.
It solves it self after a few entries. For a permanent solution, I’m still working on it.

I just installed your solution for my 7 rooms.
It looks like it is working fine (via influxdb) but I always get exceptions in the log like an example below for almost each device:

2020-01-08 19:29:02.057 [INFO ] [.eclipse.smarthome.model.script.svt2] - Roomdevice BadBenedenRoom_Heating, Setpoint 21.0, Temp 21.2, Mode 1, Learning OFF

2020-01-08 19:29:02.076 [ERROR] [org.quartz.core.JobRunShell         ] - Job DEFAULT.Timer 8 2020-01-08T19:29:02.013+01:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {

  val roomTemp

  val roomMode

  val lastCalcItem

  val roomSetpoint

  val roomLearnItem

  var roomLearn

  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XMemberFeatureCallImplCustom>)

  val setpointItem

  val powerItem

  var lastSetpoint

  val lastSetpointState

  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@1409393 (conditionalExpression: false)

  var lastPower

  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@1be7588 (conditionalExpression: false)

  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@b9af57 (conditionalExpression: false)

  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>)

  val power

  <XFeatureCallImplCustom>.postUpdate(<XFeatureCallImplCustom>)

  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XFeatureCallImplCustom>)

  val heatduration

  val valveItem

  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XMemberFeatureCallImplCustom>,<XFeatureCallImplCustom>)

  val roomEndHeatTimer

  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XFeatureCallImplCustom>,<XMemberFeatureCallImplCustom>)

  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@1004c4c (conditionalExpression: false)

  <XFeatureCallImplCustom>.postUpdate(<XConstructorCallImplCustom>)

  <XFeatureCallImplCustom>.postUpdate(<XFeatureCallImplCustom>)

  <XFeatureCallImplCustom>.postUpdate(<XFeatureCallImplCustom>)

  <XMemberFeatureCallImplCustom>.reschedule(<XMemberFeatureCallImplCustom>)

  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XFeatureCallImplCustom>,<XMemberFeatureCallImplCustom>,<XFeatureCallImplCustom>)

} ] threw an unhandled Exception: 

java.lang.NullPointerException: null

	at org.eclipse.smarthome.model.persistence.extensions.PersistenceExtensions.historicState(PersistenceExtensions.java:163) ~[?:?]

	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_152]

	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_152]

	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_152]

	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_152]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:1175) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:1150) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1136) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:1081) ~[?:?]

	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:151) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:861) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:231) ~[?:?]

	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:857) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:231) ~[?:?]

	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:511) ~[?:?]

	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter._doEvaluate(ScriptInterpreter.java:243) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:245) ~[?:?]

	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:916) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:275) ~[?:?]

	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:458) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:239) ~[?:?]

	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:201) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:29) ~[?:?]

	at com.sun.proxy.$Proxy552.apply(Unknown Source) ~[?:?]

	at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:48) ~[?:?]

	at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [bundleFile:?]

	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [bundleFile:?]

2020-01-08 19:29:02.097 [ERROR] [org.quartz.core.ErrorLogger         ] - Job (DEFAULT.Timer 8 2020-01-08T19:29:02.013+01:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {

  val roomTemp

  val roomMode

  val lastCalcItem

  val roomSetpoint

  val roomLearnItem

  var roomLearn

  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XMemberFeatureCallImplCustom>)

  val setpointItem

  val powerItem

  var lastSetpoint

  val lastSetpointState

  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@1409393 (conditionalExpression: false)

  var lastPower

  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@1be7588 (conditionalExpression: false)

  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@b9af57 (conditionalExpression: false)

  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>,<XFeatureCallImplCustom>)

  val power

  <XFeatureCallImplCustom>.postUpdate(<XFeatureCallImplCustom>)

  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XFeatureCallImplCustom>)

  val heatduration

  val valveItem

  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XMemberFeatureCallImplCustom>,<XFeatureCallImplCustom>)

  val roomEndHeatTimer

  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XFeatureCallImplCustom>,<XMemberFeatureCallImplCustom>)

  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@1004c4c (conditionalExpression: false)

  <XFeatureCallImplCustom>.postUpdate(<XConstructorCallImplCustom>)

  <XFeatureCallImplCustom>.postUpdate(<XFeatureCallImplCustom>)

  <XFeatureCallImplCustom>.postUpdate(<XFeatureCallImplCustom>)

  <XMemberFeatureCallImplCustom>.reschedule(<XMemberFeatureCallImplCustom>)

  logInfo(<XStringLiteralImpl>,<XStringLiteralImpl>,<XFeatureCallImplCustom>,<XMemberFeatureCallImplCustom>,<XFeatureCallImplCustom>)

} ] threw an exception.

org.quartz.SchedulerException: Job threw an unhandled exception.

	at org.quartz.core.JobRunShell.run(JobRunShell.java:213) [bundleFile:?]

	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [bundleFile:?]

Caused by: java.lang.NullPointerException

	at org.eclipse.smarthome.model.persistence.extensions.PersistenceExtensions.historicState(PersistenceExtensions.java:163) ~[?:?]

	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_152]

	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_152]

	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_152]

	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_152]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:1175) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:1150) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1136) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:1081) ~[?:?]

	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:151) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:861) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:231) ~[?:?]

	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:857) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:231) ~[?:?]

	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:511) ~[?:?]

	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter._doEvaluate(ScriptInterpreter.java:243) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:245) ~[?:?]

	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:916) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:275) ~[?:?]

	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:458) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:239) ~[?:?]

	at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:201) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46) ~[?:?]

	at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:29) ~[?:?]

	at com.sun.proxy.$Proxy552.apply(Unknown Source) ~[?:?]

	at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:48) ~[?:?]

	at org.quartz.core.JobRunShell.run(JobRunShell.java:202) ~[?:?]

	... 1 more

This is running for a couple of hours now so I would suspect that there is no issue with historic information.

See also here an extract of my items:

Switch					LivingRoom_Heating_BoilerValve																		(Heating_BoilerValves, BoilerRoom)															
Number					LivingRoom_Heating_Mode				"Woonkamer verwarming modus [MAP(modes.map):%s]"			    (LivingRoom, Heating_Mode)															
Number					LivingRoom_Heating_ConstC																			(Heating_ConstC)												
DateTime				LivingRoom_Heating_LastCalc																			(Heating_LastCalc)																	
Number					LivingRoom_Heating_Setpoint_Verwarmen	"Woonkamer thermostaat [%.1f °C]"				<my-heating>	(LivingRoom, Heating_Setpoint_Verwarmen)		{channel="zwave:device:7308080f:node16:thermostat_setpoint_heating"}																						
Number					LivingRoom_Heating_Setpoint_Current																    (Heating_Setpoint_Current)
Number					LivingRoom_Heating_CalcTime																			(Heating_CalcTime)
Switch					LivingRoom_Heating_Learn																			(Heating_Learn)
Number                  LivingRoom_Heating_Power    

Switch					KeukenRoom_Heating_BoilerValve																		(Heating_BoilerValves, BoilerRoom)															
Number					KeukenRoom_Heating_Mode				"KeukenRoom verwarming modus [MAP(modes.map):%s]"			        (KeukenRoom, Heating_Mode)															
Number					KeukenRoom_Heating_ConstC																			(Heating_ConstC)												
DateTime				KeukenRoom_Heating_LastCalc																			(Heating_LastCalc)																	
Number					KeukenRoom_Heating_Setpoint_Verwarmen	"KeukenRoom thermostaat [%.1f °C]"				<my-heating>	(KeukenRoom, Heating_Setpoint_Verwarmen)		{channel="zwave:device:7308080f:node132:thermostat_setpoint_heating"}																						
Number					KeukenRoom_Heating_Setpoint_Current																    (Heating_Setpoint_Current)
Number					KeukenRoom_Heating_CalcTime																			(Heating_CalcTime)
Switch					KeukenRoom_Heating_Learn																			(Heating_Learn)
Number                  KeukenRoom_Heating_Power

Switch					BijkeukenRoom_Heating_BoilerValve																		(Heating_BoilerValves, BoilerRoom)															
Number					BijkeukenRoom_Heating_Mode				"BijkeukenRoom verwarming modus [MAP(modes.map):%s]"			        (BijkeukenRoom, Heating_Mode)															
Number					BijkeukenRoom_Heating_ConstC																			(Heating_ConstC)												
DateTime				BijkeukenRoom_Heating_LastCalc																			(Heating_LastCalc)																	
Number					BijkeukenRoom_Heating_Setpoint_Verwarmen	"BijkeukenRoom thermostaat [%.1f °C]"				<my-heating>	(BijkeukenRoom, Heating_Setpoint_Verwarmen)		{channel="zwave:device:7308080f:node96:thermostat_setpoint_heating"}																						
Number					BijkeukenRoom_Heating_Setpoint_Current																    (Heating_Setpoint_Current)
Number					BijkeukenRoom_Heating_CalcTime																			(Heating_CalcTime)
Switch					BijkeukenRoom_Heating_Learn																			(Heating_Learn)
Number                  BijkeukenRoom_Heating_Power  

Switch					BadBenedenRoom_Heating_BoilerValve																		(Heating_BoilerValves, BoilerRoom)															
Number					BadBenedenRoom_Heating_Mode				"BadBenedenRoom verwarming modus [MAP(modes.map):%s]"			        (BadBenedenRoom, Heating_Mode)															
Number					BadBenedenRoom_Heating_ConstC																			(Heating_ConstC)												
DateTime				BadBenedenRoom_Heating_LastCalc																			(Heating_LastCalc)																	
Number					BadBenedenRoom_Heating_Setpoint_Verwarmen	"BadBenedenRoom thermostaat [%.1f °C]"				<my-heating>	(BadBenedenRoom, Heating_Setpoint_Verwarmen)	{channel="zwave:device:7308080f:node14:thermostat_setpoint_heating"}																							
Number					BadBenedenRoom_Heating_Setpoint_Current																    (Heating_Setpoint_Current)
Number					BadBenedenRoom_Heating_CalcTime																			(Heating_CalcTime)
Switch					BadBenedenRoom_Heating_Learn																			(Heating_Learn)
Number                  BadBenedenRoom_Heating_Power    

Switch					SpeelkamerRoom_Heating_BoilerValve																		(Heating_BoilerValves, BoilerRoom)															
Number					SpeelkamerRoom_Heating_Mode				"SpeelkamerRoom verwarming modus [MAP(modes.map):%s]"			        (SpeelkamerRoom, Heating_Mode)															
Number					SpeelkamerRoom_Heating_ConstC																			(Heating_ConstC)												
DateTime				SpeelkamerRoom_Heating_LastCalc																			(Heating_LastCalc)																	
Number					SpeelkamerRoom_Heating_Setpoint_Verwarmen	"SpeelkamerRoom thermostaat [%.1f °C]"				<my-heating>	(SpeelkamerRoom, Heating_Setpoint_Verwarmen)		{channel="zwave:device:7308080f:node15:thermostat_setpoint_heating"}																						
Number					SpeelkamerRoom_Heating_Setpoint_Current																    (Heating_Setpoint_Current)
Number					SpeelkamerRoom_Heating_CalcTime																			(Heating_CalcTime)
Switch					SpeelkamerRoom_Heating_Learn																			(Heating_Learn)
Number                  SpeelkamerRoom_Heating_Power                                                                                 (Heating_Power)

Switch					SlaapLaurenRoom_Heating_BoilerValve																		(Heating_BoilerValves, BoilerRoom)															
Number					SlaapLaurenRoom_Heating_Mode				"SlaapLauren verwarming modus [MAP(modes.map):%s]"			        (SlaapLaurenRoom, Heating_Mode)															
Number					SlaapLaurenRoom_Heating_ConstC																			(Heating_ConstC)												
DateTime				SlaapLaurenRoom_Heating_LastCalc																			(Heating_LastCalc)																	
Number					SlaapLaurenRoom_Heating_Setpoint_Verwarmen	"SlaapLauren thermostaat [%.1f °C]"				<my-heating>	(SlaapLaurenRoom, Heating_Setpoint_Verwarmen)		{channel="zwave:device:7308080f:node5:thermostat_setpoint_heating"}																					
Number					SlaapLaurenRoom_Heating_Setpoint_Current																    (Heating_Setpoint_Current)
Number					SlaapLaurenRoom_Heating_CalcTime																			(Heating_CalcTime)
Switch					SlaapLaurenRoom_Heating_Learn																			(Heating_Learn)
Number                  SlaapLaurenRoom_Heating_Power                                                                                 (Heating_Power)

Switch					BadBovenRoom_Heating_BoilerValve																		(Heating_BoilerValves, BoilerRoom)															
Number					BadBovenRoom_Heating_Mode				"BadBovenRoom verwarming modus [MAP(modes.map):%s]"			        (BadBovenRoom, Heating_Mode)															
Number					BadBovenRoom_Heating_ConstC																			(Heating_ConstC)												
DateTime				BadBovenRoom_Heating_LastCalc																			(Heating_LastCalc)																	
Number					BadBovenRoom_Heating_Setpoint_Verwarmen	"BadBovenRoom thermostaat [%.1f °C]"				<my-heating>	(BadBovenRoom, Heating_Setpoint_Verwarmen)	{channel="zwave:device:7308080f:node4:thermostat_setpoint_heating"}																							
Number					BadBovenRoom_Heating_Setpoint_Current																    (Heating_Setpoint_Current)
Number					BadBovenRoom_Heating_CalcTime																			(Heating_CalcTime)
Switch					BadBovenRoom_Heating_Learn																			(Heating_Learn)
Number                  BadBovenRoom_Heating_Power    

Switch					SlaapkamerRoom_Heating_BoilerValve																		(Heating_BoilerValves, BoilerRoom)															
Number					SlaapkamerRoom_Heating_Mode				"Slaapkamer verwarming modus [MAP(modes.map):%s]"			        (SlaapkamerRoom, Heating_Mode)															
Number					SlaapkamerRoom_Heating_ConstC																			(Heating_ConstC)												
DateTime				SlaapkamerRoom_Heating_LastCalc																			(Heating_LastCalc)																	
Number					SlaapkamerRoom_Heating_Setpoint_Verwarmen	"Slaapkamer thermostaat [%.1f °C]"				<my-heating>	(SlaapkamerRoom, Heating_Setpoint_Verwarmen)	{channel="zwave:device:7308080f:node6:thermostat_setpoint_heating"}																							
Number					SlaapkamerRoom_Heating_Setpoint_Current																    (Heating_Setpoint_Current)
Number					SlaapkamerRoom_Heating_CalcTime																			(Heating_CalcTime)
Switch					SlaapkamerRoom_Heating_Learn																			(Heating_Learn)
Number                  SlaapkamerRoom_Heating_Power    


Switch					BoilerRoom_Boiler_Switch			"CV aan/uit" 									<fire>			(BoilerRoom,Influxdb)		{channel="zwave:device:7308080f:node17:switch_binary"}
Group:Number:AVG	    Temperatures						"Temperaturen"										<temperature>	(Home,Influxdb)
Group:Number:AVG		LivingRoom_Temperatures			    "Woonkamer temperatuur [%.1f °C]"								<temperature>	(LivingRoom,Temperatures)			[ "CurrentTemperature","Temperature", "Measurement"]
Number 				    LivingRoom_Current_Temperature	"Woonkamer temperatuur [%.1f °C]"							<temperature>	(LivingRoom,LivingRoom_Temperatures)				[ "CurrentTemperature" ]			{channel="zwave:device:7308080f:node16:sensor_temperature"}

Group:Number:AVG		KeukenRoom_Temperatures			    "Keuken temperatuur [%.1f °C]"								<temperature>	(KeukenRoom,Temperatures)			[ "CurrentTemperature","Temperature", "Measurement"]
Number 				    KeukenRoom_Current_Temperature	"Keuken temperatuur [%.1f °C]"							<temperature>	(KeukenRoom,KeukenRoom_Temperatures)				[ "CurrentTemperature" ]			{channel="zwave:device:7308080f:node121:sensor_temperature"}

Group:Number:AVG		BijkeukenRoom_Temperatures			    "Bijkeuken temperatuur [%.1f °C]"								<temperature>	(BijkeukenRoom,Temperatures)			[ "CurrentTemperature","Temperature", "Measurement"] 
Number 				    BijkeukenRoom_Current_Temperature	"Bijkeuken temperatuur [%.1f °C]"							<temperature>	(BijkeukenRoom,BijkeukenRoom_Temperatures)	[ "CurrentTemperature" ] {channel="zwave:device:7308080f:node121:sensor_temperature"}

Group:Number:AVG		BadBenedenRoom_Temperatures			    "BadBeneden temperatuur [%.1f °C]"								<temperature>	(BadBenedenRoom,Temperatures)			[ "CurrentTemperature","Temperature", "Measurement"] 
Number 				    BadBenedenRoom_Current_Temperature	"BadBeneden temperatuur [%.1f °C]"							<temperature>	(BadBenedenRoom,BadBenedenRoom_Temperatures)	[ "CurrentTemperature" ] {channel="zwave:device:7308080f:node109:sensor_temperature"}

Group:Number:AVG		SpeelkamerRoom_Temperatures			    "Speelkamer temperatuur [%.1f °C]"								<temperature>	(SpeelkamerRoom,Temperatures)			[ "CurrentTemperature","Temperature", "Measurement"] 
Number 				    SpeelkamerRoom_Current_Temperature	"Speelkamer temperatuur [%.1f °C]"							<temperature>	(SpeelkamerRoom,SpeelkamerRoom_Temperatures)	[ "CurrentTemperature" ] {channel="zwave:device:7308080f:node110:sensor_temperature"}

Group:Number:AVG		SlaapLaurenRoom_Temperatures			    "SlaapLauren temperatuur [%.1f °C]"								<temperature>	(SlaapLaurenRoom,Temperatures)			[ "CurrentTemperature","Temperature", "Measurement"] 
Number 				    SlaapLaurenRoom_Current_Temperature	"SlaapLauren temperatuur [%.1f °C]"							<temperature>	(SlaapLaurenRoom,SlaapLaurenRoom_Temperatures)	[ "CurrentTemperature" ] {channel="zwave:device:7308080f:node70:sensor_temperature"}

Group:Number:AVG		BadBovenRoom_Temperatures			    "BadBoven temperatuur [%.1f °C]"								<temperature>	(BadBovenRoom,Temperatures)			[ "CurrentTemperature","Temperature", "Measurement"] 
Number 				    BadBovenRoom_Current_Temperature	"BadBoven temperatuur [%.1f °C]"							<temperature>	(BadBovenRoom,BadBovenRoom_Temperatures)	[ "CurrentTemperature" ] {channel="zwave:device:7308080f:node112:sensor_temperature"}

Group:Number:AVG		SlaapkamerRoom_Temperatures			    "Slaapkamer temperatuur [%.1f °C]"								<temperature>	(SlaapkamerRoom,Temperatures)			[ "CurrentTemperature","Temperature", "Measurement"] 
Number 				    SlaapkamerRoom_Current_Temperature	"Slaapkamer temperatuur [%.1f °C]"							<temperature>	(SlaapkamerRoom,SlaapkamerRoom_Temperatures)	[ "CurrentTemperature" ] {channel="zwave:device:7308080f:node6:sensor_temperature"}

Is there anything I’m still doing wrong here ?

You have a Timer in a Rule somewhere. That Rule is generating an error. The error is a NullPointerException which usually means that you are calling a persistence method and there is no data to query, or you are trying to cast or use a Type in an unsupported way. The most common cause is failing to check that an Item’s State is not NULL and not UNDEF before trying to use it as a Number.

Thanks @rlkoshak, I’ve tried to check for NULL’s, but somehow I missed a spot. I’m looking into it.
@Benny_Dormaels created a issue on GitHub:

I think I found the bug.
but it needs to be tested.
Change

val lastTemp = Temperatures.allMembers.filter[name.contains(room)].map[(historicState(new DateTime(lastCalcItem.state.toString),DATABASE).state as Number).doubleValue].reduce[s, v |s+v]/Temperatures.allMembers.filter[name.contains(room)].size

to

val lastTemp = Temperatures.allMembers.filter[name.contains(room)].map[(historicState(new DateTime(lastCalcItem.state.toString),DATABASE)?.state as Number).doubleValue].reduce[s, v |s+v]/Temperatures.allMembers.filter[name.contains(room)].size 

Mind the little ? before .state

I’ve committed a new version (0.2.11)