Smart Virtual Thermostat (beta version)

The way that rrd4j works is that as the data ages, high resolution data (e.g. one value every minute) gets replaced with an average of entries over a given time period (e.g. the average of every ten minutes). But there is always a value at any time in the past, but depending on the age of the data the value may not be exactly what it was at that time in real life. But unless the values are wildly jumping from a low value to a high value from one reading to the next, the value will be very close to the original. You are not going back that far into the past so rrd4j values should be just fine for this use case.

1 Like

This looks really promising! I’ve been having a little bit of overshooting with my heating solution, this could be a cool change to make.

I’ll have a look later, and maybe swap over a room to test it out :slight_smile:

I’ve just updated the code in the starter post
I’ve completely rewritten the code to a more OpenHAB design, based on the advise of @rlkoshak :+1:

Please let me know what you think of the new version.

2 Likes

I’m very interrested in this…
Right now I have some Danfoss TRV, but wanna changed to some Eurotronic Spirit and implement this or something like this.
Haven’t got the chance to look deeper in the code, but may I suggest adding some comments? They can be helpful to understand the logic :smile:.
Also, another suggestion, for a future version. Think of implementing an anti-calcification mechanism for the summer period - is “anti-calcification” a word? Sorry, English is not my strength, but maybe you understand what I mean… Something like opening and closing the valve 2-3 times once a week when heating is off?

I’d like to try to understand this a little more, could do with some comments added in the code.

In addition, there appears that there may be some extra groups etc defined against the items, plus the descriptions are not in English, so I’m not sure what is needed and what isn’t, like which groups are necessary for this, and what are there just for your installation.

Thanks!

I know, I’m not that good in adding comments. I’ll try to do it more and more.

As far as I know, this is not necessary with the Eurospirit, maybe you can tackle this with a separate rule if necessary.

These groups Influxdb, Influxdb_EU, Rrd4j, RestoreOnStartup are based on this Design Pattern: Group Based Persistence.
NodeX is my Zwave group (all items that belongs to Zwave device Node X are in a group) and Home, BoilerRoom, Bathroom, etc are groups for my house layout (Floors, rooms, etc)
The labels are in Dutch, but all comments and item names are in English (as far as I know :grimacing:). I think it’s time consuming to translate all the labels and you also have Google Translate :wink:

I tried to get this up and running last night, but there seems to be some missing steps to get this working correctly. I was getting a number of errors due to NULL, and then when it appeared to do something more, I had a target of 24, with current temp of ~22 (and gradually dropping), and over the course of an hour, it never said it needed heat, Power was always 0.

Maybe because the room was hotter than the target when I first started? Does it need to start from “cold”?

I appreciate the effort you’ve put in, and I’m sure it’s working for you… but trying to configure this on a fresh installation causes problems!

I would appreciate if you could try what you’ve got above on a fresh install, hopefully you’ll get similar issues to me, and can more quickly fix them then I can! (I think I stumbled upon something vaguely working more by luck than doing anything by judgement!)

Thanks for trying! Good advice to try it on a fresh install. I got also NULL errors:

2019-11-07 16:25:53.960 [WARN ] [nce.extensions.PersistenceExtensions] - There is no queryable persistence service registered with the id 'influxdb'
2019-11-07 16:25:53.961 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Smart heating v0.2.2': cannot invoke method public abstract java.util.Date org.eclipse.smarthome.core.persistence.HistoricItem.getTimestamp() on null
2019-11-07 16:25:53.963 [WARN ] [nce.extensions.PersistenceExtensions] - There is no queryable persistence service registered with the id 'influxdb'
2019-11-07 16:25:53.964 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Smart heating v0.2.2': cannot invoke method public abstract java.util.Date org.eclipse.smarthome.core.persistence.HistoricItem.getTimestamp() on null

But this was because I forget to install a persistence add-on.
I’ll continue to test on a fresh install.

1 Like

Can you share a logfile @Confused with the null errors?
I’ve copy and paste my rules and items as posted here in a new and fresh openhab (docker version 2.5M4). The only null-errors i’ve got came from the persistence. As I mentioned, I forget to install a persistence (i’ve used rrd4j for testing).
Make sure that you have temperature sensors using the same persistence. Otherwise it won’t work either (because of the previousState).

Changed the first post with a new version (0.2.4). The main change is the addition of a check if the power was in the last calculation 0 or 100, so there will not be any learning. Without the check, the ConstC can become very high.

Thanks this looks really great, I’m planning on buying Eurotronic Spirit TRVs.

Just a few questions/suggestions:

  • Do you use external temp sensor in every room?
  • Can I use the internal temp sensor and it will work with it (for example if I measure the actual temp in the room once and set a good offset value)
  • How the outside temperature affects this rule? Why it is needed in the first place?
  • How does this rule exactly controls the valve? I can see that only the target temps are associated with a channel, and the mode, so it just modifies the target temp? Or does it control the valve directly (like setting the valve to 50%)
  • Also you have group Items for Bathroom and not for the Living Room. Why it is different in each room? What items are a ‘must have’?
    Can you extend the code with more comments? Like what happens at each block. This looks like a rather complex rule and that way maybe customizing it would be easier.

Thanks for your work!

Since a short time I use a external temp sensor Heiman with a direct association with the Spirit.
Before that I’ve used the internal sensor. It works great, but the internal sensor you have to adjust, because it’s near the heat source (obviously).

The outside temperature is not yet affecting the rule (feature for later). The idea is that if you have a house which is not so isolated, the rule can adjust the power based on inside and outside temperatures → with other words, if it’s cold outside, the heating needs to be longer as opposite when it’s outside warmer.
My house is a new house (2 years old) en very good isolated, so the need of the outside temperature is for my case not very important.

The valve does it own job. It calculates bases on the internal or external sensor what the opening of the valve must be, just like a regular radiator thermostat (only that’s based on thermal expansion).

In my bathroom I’ve two “heating devices” → a radiator and under the floor heating. I’ve created a group to control both of them at the same time. This is not necessary. The must have items are the items which the last part of the name is the same as the group.
The item names contains: ROOM_ANYNAME_FUNCTION where ROOM is obvious, ANYNAME you can give it what you like (ex Floor, Radiator, Towel, Upper, Lower, etc etc) and Function is one of these: Mode, BoilerValve, Setpoint_Normal, Setpoint_Eco, Setpoint_Current, ConstC, LastCalc, Learn, Power

Yes, I will, it part of my to do list. This is the first time I publish my own code to the public and I’m not a ver good comments writer :wink:

You’re welcome and thank you for your questions

Thanks for your detailed answer!

I have the same setup! Thanks for clarifing this and all the other things also.

One thing I still can’t understand, I think you might misunderstood me, so I will try to rephrase my question :slight_smile:

I know that it works like a regular thermostat. My question was, that how this rule affects this? I mean that even if you don’t have any automation set up for heating, it will ‘calculate’ the needed power for heating, and will try to add the required heating to reach the setpoint. So what does this rule do? I couldn’t figure it out at a quick glance at the code. It will turn just turn ON/OFF the valve or it will alternate the target temperature?

Good question! A normal wall-thermostat works with a PID, it calculates based on experience when to turn ON/OFF the boiler. Newer systems with modulation are more advanced, they predict, based on history, when en how much the boiler needs to work (changing the water temperature).

The rule works a little like the ON/OFF thermostat. Based on history (it needs a few days to calibrate), it can predict how long the boiler needs to be ON to get the right room temperature. This is very different per room, per season, per isolation of the house, etc etc. Every 30 minutes (or whatever the CalcTime is set to) it recalculates.
Example: If the room temperature is 20 degrees, we want it to 21.5 degrees, the first run (let’s assume there is no calibration done yet, so the ConstC =60), the rule will let the boiler be ON for 27 minutes (1.5 * 60 * 30 (calctime)/100). After 27 minutes the boiler is OFF, after 30 minutes there is a recalibration → the room temperature is 21.3degrees, according to the formula, the new ConstC will be 69 (instead of 60). So the rule will let the boiler run for 4 minutes (0.2 * 69 *30). And so on.
In the beginning there’ll be over- and undershoots, but eventually it will be around the right temperature.
It is based on this VERA plugin: Smart Virtual Thermostat

Thanks!

Now I can understand it better.
However I don’t have a ‘boiler’. I live in flat and it has it’s central-heating (boiler), so I don’t have one individually. Can I somehow use this rule that it turns off the individual thermostat valves itself and not the ‘boiler’?

Yes you can. The item XXX_XXX_BoilerValue is the key. It can be used as a virtual item or as a linked item. The rule uses this item as a “Heating needed”. So it can check if that device/room needs heat. In addition I’ve a second rule that watches the group with these items and if one of them becomes ON, it will start the boiler.
In your case, if you link it a valve (ex under de floor heating), the hot water from your central-heating will flow.
For the radiators with Spirits you can use it as a virtual item. The item XXX_XXX_Mode needs to link to the Spirit mode. Then based on the measured temperature, the Spirit will controle the valve for optimal heating. The rule will adapt to that behaviour.

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.