Hi
actually i try to setup my Openhab. I’m using some rules of the setup from ThomDietrich which you can finde here. ThomDietrichs setup
now i have this PRoblem. I guess it is the rule of the heating hystem but i don’t know how to do bugfixing in this case.
2018-02-21 12:52:20.825 [ERROR] [org.quartz.core.JobRunShell ] - Job DEFAULT.2018-02-21T12:52:20.822+01:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
<XMemberFeatureCallImplCustom>.forEach(<XClosureImplCustom>)
} ] threw an unhandled Exception:
java.lang.NullPointerException: null
at org.eclipse.smarthome.model.script.engine.ScriptError.<init>(ScriptError.java:66) [145:org.eclipse.smarthome.model.script:0.10.0.b1]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:130) [145:org.eclipse.smarthome.model.script:0.10.0.b1]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:901) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:864) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:223) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:215) [145:org.eclipse.smarthome.model.script:0.10.0.b1]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:759) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:219) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:215) [145:org.eclipse.smarthome.model.script:0.10.0.b1]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:759) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:219) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:215) [145:org.eclipse.smarthome.model.script:0.10.0.b1]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:446) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:227) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:215) [145:org.eclipse.smarthome.model.script:0.10.0.b1]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:189) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46) [164:org.eclipse.xtext.xbase:2.12.0.v20170519-0752]
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:29) [164:org.eclipse.xtext.xbase:2.12.0.v2017051 9-0752]
at com.sun.proxy.$Proxy176.apply(Unknown Source) [?:?]
at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:49) [145:org.eclipse.smarthome.model.script:0.10.0.b1]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [115:org.eclipse.smarthome.core.scheduler:0.10.0.b1]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [115:org.eclipse.smarthome.core.scheduler:0.10.0.b1]
2018-02-21 12:52:22.602 [ERROR] [org.quartz.core.ErrorLogger ] - Job (DEFAULT.2018-02-21T12:52:20.822+01:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
<XMemberFeatureCallImplCustom>.forEach(<XClosureImplCustom>)
} ] threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception.
at org.quartz.core.JobRunShell.run(JobRunShell.java:213) [115:org.eclipse.smarthome.core.scheduler:0.10.0.b1]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [115:org.eclipse.smarthome.core.scheduler:0.10.0.b1]
Caused by: java.lang.NullPointerException
at org.eclipse.smarthome.model.script.engine.ScriptError.<init>(ScriptError.java:66) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:130) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:901) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:864) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:223) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:215) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:759) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:219) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:215) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:759) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:219) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:215) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:446) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:227) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:215) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:189) ~[?:?]
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.$Proxy176.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
2018-02-21 12:52:31.501 [INFO ] [org.quartz.core.QuartzScheduler ] - Scheduler openHAB-job-scheduler_$_NON_CLUSTERED started.
The Rules looks like this
import org.eclipse.xtext.xbase.lib.Functions
val String filename = "heizung-raeume.rules"
val Number tempHigher = 25.0
val Number tempComfort = 23.0
val Number tempMid = 22.0
val Number tempLower = 17.0
val Number tempChill = 15.0
val Number tempAway = 15.0
val Number tempAwayLonger = 13.0
val Number tempOff = 4.5
val Functions$Function5<StringItem, NumberItem, NumberItem, NumberItem, SwitchItem, String> //
generateSummary = [Heater_Mode, Heater_Act_Temp, Heater_Set_Temp, Heater_Valve_Position, Window_Mode |
var String summary = "(fehlende Daten)"
if (Heater_Act_Temp.state instanceof Number && Heater_Set_Temp.state instanceof Number && Heater_Valve_Position.state instanceof Number) {
val actTemp = (Heater_Act_Temp.state as DecimalType).floatValue
val setTemp = (Heater_Set_Temp.state as DecimalType).floatValue
val valvePos = (Heater_Valve_Position.state as DecimalType).floatValue
val mode = Heater_Mode.state as StringType
summary = //
if (Window_Mode.state == ON) String::format("( ↻ Fenster offen ) %.1f °C", actTemp)
else if (mode == "BOOST-MODE") String::format("( 🔥 Boost ) %.1f °C", actTemp)
else if (mode == "AUTO-MODE") String::format("( ⚙ %.1f °C ) %.1f °C", setTemp, actTemp)
else if (valvePos > 60) String::format("( ⟰ %.1f °C ) %.1f °C", setTemp, actTemp)
else if (valvePos > 40) String::format("( ⤊ %.1f °C ) %.1f °C", setTemp, actTemp)
else if (valvePos > 20) String::format("( ⇈ %.1f °C ) %.1f °C", setTemp, actTemp)
else if (valvePos > 0) String::format("( ↑ %.1f °C ) %.1f °C", setTemp, actTemp)
else if (setTemp > actTemp) String::format("( • %.1f °C ) %.1f °C", setTemp, actTemp)
else String::format("%.1f °C", actTemp)
}
return summary
]
val Functions$Function2<ContactItem, NumberItem, OnOffType> //
heaterInWindowMode = [Window_State, Heater_Set_Temp |
if (Window_State.state == OPEN && Heater_Set_Temp.state == 12.0) {
return ON
} else if (Window_State.state == CLOSED && Heater_Set_Temp.state != 12.0) {
return OFF
} else {
return OFF
}
]
///////////////////////////////////////////////////////////////////////////////
rule "System started - Heizung"
when
System started
then
createTimer(now.plusSeconds(200)) [|
logInfo(filename, "System started - Heizung")
if (WZ_Heizung_Fault.state == NULL) WZ_Heizung_Fault.postUpdate("NO_FAULT")
if (FK_Heizung_Fault.state == NULL) FK_Heizung_Fault.postUpdate("NO_FAULT")
if (EZ_Heizung_Fault.state == NULL) EZ_Heizung_Fault.postUpdate("NO_FAULT")
if (BU_Heizung_Fault.state == NULL) BU_Heizung_Fault.postUpdate("NO_FAULT")
if (BD_Heizung_Fault.state == NULL) BD_Heizung_Fault.postUpdate("NO_FAULT")
if (TO_Heizung_Fault.state == NULL) TO_Heizung_Fault.postUpdate("NO_FAULT")
]
end
///////////////////////////////////////////////////////////////////////////////
// *_Fenster_State Auswertung
rule "*_Fenster_State Auswertung"
when
Item WZ_Fenster_State changed or
Item BU_Fenster_State changed or
Item FK_Fenster_State changed
then {logInfo(filename, "*_Fenster_State Auswertung2")
createTimer(now.plusSeconds(15)) [|
logInfo(filename, "*_Fenster_State Auswertung")
WZ_Heizung_WindowMode.postUpdate(heaterInWindowMode.apply(WZ_Fenster_State, WZ_Heizung_SetTemp))
BU_Heizung_WindowMode.postUpdate(heaterInWindowMode.apply(BU_Fenster_State, BU_Heizung_SetTemp))
FK_Heizung_WindowMode.postUpdate(heaterInWindowMode.apply(FK_Fenster_State, FK_Heizung_SetTemp))
]
}
end
///////////////////////////////////////////////////////////////////////////////
// Heizung Erzeuge Heizkörper Temperatur Zusammenfassung
rule "Heizung Erzeuge Heizkörper Temperatur Zusammenfassung"
when
Item Whg_Heating_Mode received command or
Item Heating_TargetTemps changed or
Item Heating_ValveSettings changed or
Item Heating_OpModes changed or
Item Heating_WindowModes changed
then {
//logInfo(filename, "Heizung Erzeuge Heizkörper Temperatur Zusammenfassung")
WZ_Heizung_Summary.postUpdate(generateSummary.apply(WZ_Heizung_Mode, WZ_Heizung_ActTemp, WZ_Heizung_SetTemp, WZ_Heizung_Valve, WZ_Heizung_WindowMode))
FK_Heizung_Summary.postUpdate(generateSummary.apply(FK_Heizung_Mode, FK_Heizung_ActTemp, FK_Heizung_SetTemp, FK_Heizung_Valve, FK_Heizung_WindowMode))
EZ_Heizung_Summary.postUpdate(generateSummary.apply(EZ_Heizung_Mode, EZ_Heizung_ActTemp, EZ_Heizung_SetTemp, EZ_Heizung_Valve, EZ_Heizung_WindowMode))
BU_Heizung_Summary.postUpdate(generateSummary.apply(BU_Heizung_Mode, BU_Heizung_ActTemp, BU_Heizung_SetTemp, BU_Heizung_Valve, BU_Heizung_WindowMode))
BD_Heizung_Summary.postUpdate(generateSummary.apply(BD_Heizung_Mode, BD_Heizung_ActTemp, BD_Heizung_SetTemp, BD_Heizung_Valve, BD_Heizung_WindowMode))
TO_Heizung_Summary.postUpdate(generateSummary.apply(TO_Heizung_Mode, TO_Heizung_ActTemp, TO_Heizung_SetTemp, TO_Heizung_Valve, TO_Heizung_WindowMode))
//logInfo(filename, "Heizung Erzeuge Heizkörper Temperatur Zusammenfassung - abgeschlossen")
}
end
///////////////////////////////////////////////////////////////////////////////
// Heizung Auswertung Schnellauswahl (Sitemap)
rule "WZ_Heizung Auswertung Schnellauswahl (Sitemap)"
when
Item WZ_Heizung_Preset received command
then {
//logInfo(filename, "Auswertung Schnellauswahl (Sitemap)")
switch (receivedCommand){
case 0: WZ_Heizung_Manu.sendCommand(tempLower)
case 1: WZ_Heizung_Manu.sendCommand(tempComfort)
case 2: WZ_Heizung_Manu.sendCommand(tempHigher)
}
WZ_Heizung_Preset.postUpdate(-1)
}
end
rule "FK_Heizung Auswertung Schnellauswahl (Sitemap)"
when
Item FK_Heizung_Preset received command
then {
//logInfo(filename, "Auswertung Schnellauswahl (Sitemap)")
switch (receivedCommand){
case 0: FK_Heizung_Manu.sendCommand(tempLower)
case 1: FK_Heizung_Manu.sendCommand(tempComfort)
case 2: FK_Heizung_Manu.sendCommand(tempHigher)
}
FK_Heizung_Preset.postUpdate(-1)
}
end
rule "EZ_Heizung Auswertung Schnellauswahl (Sitemap)"
when
Item EZ_Heizung_Preset received command
then {
//logInfo(filename, "Auswertung Schnellauswahl (Sitemap)")
switch (receivedCommand){
case 0: EZ_Heizung_Manu.sendCommand(tempLower)
case 1: EZ_Heizung_Manu.sendCommand(tempComfort)
case 2: EZ_Heizung_Manu.sendCommand(tempHigher)
}
EZ_Heizung_Preset.postUpdate(-1)
}
end
rule "BU_Heizung Auswertung Schnellauswahl (Sitemap)"
when
Item BU_Heizung_Preset received command
then {
//logInfo(filename, "Auswertung Schnellauswahl (Sitemap)")
switch (receivedCommand){
case 0: BU_Heizung_Manu.sendCommand(tempLower)
case 1: BU_Heizung_Manu.sendCommand(tempComfort)
case 2: BU_Heizung_Manu.sendCommand(tempHigher)
}
BU_Heizung_Preset.postUpdate(-1)
}
end
rule "BD_Heizung Auswertung Schnellauswahl (Sitemap)"
when
Item BD_Heizung_Preset received command
then {
//logInfo(filename, "Auswertung Schnellauswahl (Sitemap)")
switch (receivedCommand){
case 0: BD_Heizung_Manu.sendCommand(tempLower)
case 1: BD_Heizung_Manu.sendCommand(tempComfort)
case 2: BD_Heizung_Manu.sendCommand(tempHigher)
}
BD_Heizung_Preset.postUpdate(-1)
}
end
rule "TO_Heizung Auswertung Schnellauswahl (Sitemap)"
when
Item TO_Heizung_Preset received command
then {
//logInfo(filename, "Auswertung Schnellauswahl (Sitemap)")
switch (receivedCommand){
case 0: TO_Heizung_Manu.sendCommand(tempLower)
case 1: TO_Heizung_Manu.sendCommand(tempComfort)
case 2: TO_Heizung_Manu.sendCommand(tempHigher)
}
TO_Heizung_Preset.postUpdate(-1)
}
end
// vim: syntax=Xtend