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 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
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
I’m going to fix it and publish it.
Would it be possible to put this code on GitHub? It would be easier I think to follow the changes there…
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.
For now, I’ve updated my code to version 0.2.5
Yes, for sure
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 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