Dimmer rule with while loop?

Hello,

i got a question for optimization of a dimmer light rule. Actually i am using the following rule code and it works fine so fare. But i think it would be a bit more comfortable, if all the timers would be created when the rules fires.
So i would like to create a rule, that checks the state of the lamp every x seconds and then sends a command like “lamp.state - 10”. when the state of the lamp gets to 0, the loop should stop.

Can you help me to set up the loop?

Thanks, Alex

// Einschlaf-Licht: Licht dimmt auf 0%

rule "Einschlaf-Licht"
when
	Item Scenes_Einschlaflicht received command ON
then
// Steurung für Lampe Alex
	if ((Hue_schlafzimmer_BettAlex_Farbe.state as HSBType).getBrightness > 90) {
	createTimer(now.plusSeconds(60)) [ Hue_schlafzimmer_BettAlex_Farbe.sendCommand(90)]
	}
	if ((Hue_schlafzimmer_BettAlex_Farbe.state as HSBType).getBrightness > 80) {
	createTimer(now.plusSeconds(120)) [ Hue_schlafzimmer_BettAlex_Farbe.sendCommand(80)]
	}
	if ((Hue_schlafzimmer_BettAlex_Farbe.state as HSBType).getBrightness > 70) {
	createTimer(now.plusSeconds(180)) [ Hue_schlafzimmer_BettAlex_Farbe.sendCommand(70)]
	}
	if ((Hue_schlafzimmer_BettAlex_Farbe.state as HSBType).getBrightness > 60) {
	createTimer(now.plusSeconds(240)) [ Hue_schlafzimmer_BettAlex_Farbe.sendCommand(60)]
	}
	if ((Hue_schlafzimmer_BettAlex_Farbe.state as HSBType).getBrightness > 50) {
	createTimer(now.plusSeconds(300)) [ Hue_schlafzimmer_BettAlex_Farbe.sendCommand(50)]
	}
	if ((Hue_schlafzimmer_BettAlex_Farbe.state as HSBType).getBrightness > 40) {
	createTimer(now.plusSeconds(360)) [ Hue_schlafzimmer_BettAlex_Farbe.sendCommand(40)]
	}
	if ((Hue_schlafzimmer_BettAlex_Farbe.state as HSBType).getBrightness > 30) {
	createTimer(now.plusSeconds(420)) [ Hue_schlafzimmer_BettAlex_Farbe.sendCommand(30)]
	}
	if ((Hue_schlafzimmer_BettAlex_Farbe.state as HSBType).getBrightness > 20) {
	createTimer(now.plusSeconds(480)) [ Hue_schlafzimmer_BettAlex_Farbe.sendCommand(20)]
	}
	if ((Hue_schlafzimmer_BettAlex_Farbe.state as HSBType).getBrightness > 10) {
	createTimer(now.plusSeconds(540)) [ Hue_schlafzimmer_BettAlex_Farbe.sendCommand(10)]
	}
	if ((Hue_schlafzimmer_BettAlex_Farbe.state as HSBType).getBrightness > 00) {
	createTimer(now.plusSeconds(600)) [ Hue_schlafzimmer_BettAlex_Farbe.sendCommand(00)]
	}
	createTimer(now.plusSeconds(605)) [ Scenes_Einschlaflicht.sendCommand(OFF)]
end
var Timer timer = null // global variable

rule "Einschlaf-Licht"
when
	Item Scenes_Einschlaflicht received command ON
then
    timer = createTimer(now, [ |
        var dimmerValue = Hue_schlafzimmer_BettAlex_Farbe.state as HSBType).getBrightness as Number
        dimmerValue = dimmerValue - 10
        if (dimmerValue < 0) dimmerValue = 0
        Hue_schlafzimmer_BettAlex_Farbe.sendCommand(dimmerValue)
        if(dimmerValue > 0) timer.reschedule(now.plusSeconds(60))
        else timer = null
    ])
end
1 Like

Thank you very much!

I tried it out , but i get the following error:

2018-09-09 22:00:55.540 [vent.ChannelTriggeredEvent] - logreader:reader:869d1763:newWarningEvent triggered 2018-09-09 22:00:55.314 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'scenes.rules' has errors, therefore ignoring it: [212,78]: missing ']' at ')'

Second line is missing an opening bracket

        var dimmerValue = (Hue_schlafzimmer_BettAlex_Farbe.state as HSBType).getBrightness as Number

thank you, again.

now i get this error to the log:

2018-09-09 22:41:34.586 [ERROR] [org.quartz.core.ErrorLogger         ] - Job (DEFAULT.2018-09-09T22:41:34.534+02:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {

  var dimmerValue

  <null>.dimmerValue = <XBinaryOperationImplCustom>

  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@3107c543

  <XFeatureCallImplCustom>.sendCommand(<XFeatureCallImplCustom>)

  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@19b97b1d

} ] threw an exception.

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

	at org.quartz.core.JobRunShell.run(JobRunShell.java:213) [100:org.eclipse.smarthome.core.scheduler:0.10.0.oh240M2]

	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [100:org.eclipse.smarthome.core.scheduler:0.10.0.oh240M2]

Caused by: java.lang.reflect.UndeclaredThrowableException

	at com.sun.proxy.$Proxy192.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

Caused by: org.eclipse.smarthome.model.script.engine.ScriptExecutionException: The name 'dimmer' cannot be resolved to an item or type; line 216, column 12, length 6

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

	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:227) ~[?:?]

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

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

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

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

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

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

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

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

	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:227) ~[?:?]

	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.$Proxy192.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

==> /var/log/openhab2/events.log <==

2018-09-09 22:41:34.679 [vent.ChannelTriggeredEvent] - logreader:reader:869d1763:newErrorEvent triggered 2018-09-09 22:41:34.551 [ERROR] [org.quartz.core.JobRunShell         ] - Job DEFAULT.2018-09-09T22:41:34.534+02:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {

2018-09-09 22:41:34.680 [vent.ChannelTriggeredEvent] - logreader:reader:869d1763:newErrorEvent triggered 2018-09-09 22:41:34.586 [ERROR] [org.quartz.core.ErrorLogger         ] - Job (DEFAULT.2018-09-09T22:41:34.534+02:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
if (dimmerValue > 0) timer.reschedule(now.plusSeconds(60))

now it’s:

==> /var/log/openhab2/openhab.log <==

2018-09-09 23:01:36.941 [ERROR] [org.quartz.core.JobRunShell         ] - Job DEFAULT.2018-09-09T23:01:36.930+02:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {

  var dimmerValue

  <null>.dimmerValue = <XBinaryOperationImplCustom>

  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@3b06f401

  <XFeatureCallImplCustom>.sendCommand(<XFeatureCallImplCustom>)

  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@50619a31

} ] threw an unhandled Exception: 

java.lang.reflect.UndeclaredThrowableException: null

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

	at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:49) [130:org.eclipse.smarthome.model.script:0.10.0.oh240M2]

	at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [100:org.eclipse.smarthome.core.scheduler:0.10.0.oh240M2]

	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [100:org.eclipse.smarthome.core.scheduler:0.10.0.oh240M2]

Caused by: org.eclipse.smarthome.model.script.engine.ScriptExecutionException: 'reschedule' is not a member of 'java.lang.Object'; line 216, column 24, length 36

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

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

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

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

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

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

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

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

	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:227) ~[?:?]

	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) ~[?:?]

	... 4 more

thanks for being so patient!

'reschedule' is not a member of 'java.lang.Object'; line 216, column 24, length 36

Very strange!!

Did you declare the timer variable at the top of the rule file?

var Timer timer = null // global variable

yes, i put it into the first line of the file. does it make a difference having more than just one rule in one file?

No it should, but why don’t you move it in one separate rule file?
Do you use the timer variable in another rule?

var Timer timer = null // global variable

rule "Einschlaf-Licht"
when
    Item Scenes_Einschlaflicht received command ON
then
    timer = createTimer(now, [ |
        var dimmerValue = (Hue_schlafzimmer_BettAlex_Farbe.state as HSBType).getBrightness as Number
        logInfo("TESTING", dimmerValue.toString)
        dimmerValue = dimmerValue - 10
        if (dimmerValue < 0) dimmerValue = 0
        Hue_schlafzimmer_BettAlex_Farbe.sendCommand(dimmerValue)
        if(dimmerValue > 0) timer.reschedule(now.plusSeconds(60))
        else timer = null
    ])
end

until now i seperated all the rules-files by use case: one file for scenes, one file for notifications, one file for systemstartup and so on. at the beginning i was not sure, whats the best practice and thought, i could maybe get to many files…

yes, i use timers and cron expressions in a few rules in this, but not as variable. For example i use them like this:

then
    Zw_steckdose_wohnzimmer_media_Switch.sendCommand(ON)
    createTimer(now.plusSeconds(20)) [ RXV775Main_Zone_Zone_channels_Power.sendCommand(ON) ]
    createTimer(now.plusSeconds(24)) [ RXV775Main_Zone_Zone_channels_InputSource.sendCommand('TUNER')]

now i seperated this rule including the var into a new file, but i still get an error-message:

==> /var/log/openhab2/openhab.log <==

2018-09-10 20:41:45.751 [ERROR] [org.quartz.core.JobRunShell         ] - Job DEFAULT.2018-09-10T20:41:45.745+02:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {

  var dimmerValue

  <null>.dimmerValue = <XBinaryOperationImplCustom>

  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@118d9af8

  <XFeatureCallImplCustom>.sendCommand(<XFeatureCallImplCustom>)

  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@1d1c17a4

} ] threw an unhandled Exception: 

java.lang.reflect.UndeclaredThrowableException: null

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

	at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:49) [130:org.eclipse.smarthome.model.script:0.10.0.oh240M2]

	at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [100:org.eclipse.smarthome.core.scheduler:0.10.0.oh240M2]

	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [100:org.eclipse.smarthome.core.scheduler:0.10.0.oh240M2]

Caused by: org.eclipse.smarthome.model.script.engine.ScriptExecutionException: 'reschedule' is not a member of 'java.lang.Object'; line 12, column 24, length 36

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

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

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

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

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

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

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

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

	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:227) ~[?:?]

	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) ~[?:?]

	... 4 more

2018-09-10 20:41:45.782 [ERROR] [org.quartz.core.ErrorLogger         ] - Job (DEFAULT.2018-09-10T20:41:45.745+02:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {

  var dimmerValue

  <null>.dimmerValue = <XBinaryOperationImplCustom>

  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@118d9af8

  <XFeatureCallImplCustom>.sendCommand(<XFeatureCallImplCustom>)

  org.eclipse.xtext.xbase.impl.XIfExpressionImpl@1d1c17a4

} ] threw an exception.

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

	at org.quartz.core.JobRunShell.run(JobRunShell.java:213) [100:org.eclipse.smarthome.core.scheduler:0.10.0.oh240M2]

	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [100:org.eclipse.smarthome.core.scheduler:0.10.0.oh240M2]

Caused by: java.lang.reflect.UndeclaredThrowableException

	at com.sun.proxy.$Proxy200.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

Caused by: org.eclipse.smarthome.model.script.engine.ScriptExecutionException: 'reschedule' is not a member of 'java.lang.Object'; line 12, column 24, length 36

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

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

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

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

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

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

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

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

	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:227) ~[?:?]

	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.$Proxy200.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

in visual studio “reschedule” is underlined red:

if(dimmerValue > 0) timer.reschedule(now.plusSeconds(60))

@rlkoshak
Sorry mate, but can you have a look at this?
I’m stuck

The error is basically saying that it doesn’t like the first line of the timer body. The fact that we don’t see the dimmerValue logged also points to that line being the problem.

  1. Does Hue_schlafzimmer_BettAlex_Farbe definitely not have a not NULL state?
  2. In the most recent version of the Rule from @vzorglub there is a missing ( on that line
    var dimmerValue = (Hue_schlafzimmer_BettAlex_Farve.state as HSBType).getBrightness as Number

I double checked and getBrightness does return a PercentType and PercentType is a Number so as long as the state isn’t NULL that shouldn’t be a problem.

I would have expected VSCode and the Rules loader to have complained about the missing open paren so I’m going to guess it is only missing in the posting above.

Try this version:

    timer = createTimer(now, [ |
        if(Hue_schlafzimmer_BettAlex_Farbe.state == NULL) {
            logWarn("TESTING", "Light is in an unknown state!, cannot dim it.")
        }
        else{
            logInfo("TESTING", "Dimming the light")
            var dimmerValue = Hue_schlafzimmer_BettAlex_Farbe.state as HSBType).getBrightness as Number
            logInfo("TESTING", dimmerValue.toString)
            dimmerValue = dimmerValue - 10
            if (dimmerValue < 0) dimmerValue = 0
            Hue_schlafzimmer_BettAlex_Farbe.sendCommand(dimmerValue)
            if(dimmerValue > 0) timer.reschedule(now.plusSeconds(60))
            else timer = null
        }
    ])

thank you both for your time and help!

after uploading the updated rule to rloshaks version i get the following error message:

==> /var/log/openhab2/openhab.log <==

2018-09-10 21:14:40.556 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'einschlaflicht.rules'

2018-09-10 21:14:40.559 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'einschlaflicht.rules' is either empty or cannot be parsed correctly!

==> /var/log/openhab2/events.log <==

2018-09-10 21:14:41.097 [vent.ChannelTriggeredEvent] - logreader:reader:869d1763:newWarningEvent triggered 2018-09-10 21:14:40.559 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'einschlaflicht.rules' is either empty or cannot be parsed correctly!

==> /var/log/openhab2/openhab.log <==

2018-09-10 21:14:41.600 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'einschlaflicht.rules' has errors, therefore ignoring it: [28,82]: mismatched input ')' expecting '}'

[35,9]: mismatched input '}' expecting 'end'

==> /var/log/openhab2/events.log <==

2018-09-10 21:14:42.098 [vent.ChannelTriggeredEvent] - logreader:reader:869d1763:newWarningEvent triggered 2018-09-10 21:14:41.600 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'einschlaflicht.rules' has errors, therefore ignoring it: [28,82]: mismatched input ')' expecting '}'

after firering the rule nothing happens, even i dont get log entries

this is the rule actually:

var timer = null // global variable


rule "Einschlaf-Licht V2"
when
	Item Scenes_Einschlaflicht received command ON
then
    timer = createTimer(now, [ |
        if(Hue_wohnzimmer_StehlampeSofa_Farbe.state == NULL) {
            logWarn("TESTING", "Light is in an unknown state!, cannot dim it.")
        }
        else{
            logInfo("TESTING", "Dimming the light")
            var dimmerValue = Hue_wohnzimmer_StehlampeSofa_Farbe.state as HSBType).getBrightness as Number
            logInfo("TESTING", dimmerValue.toString)
            dimmerValue = dimmerValue - 10
            if (dimmerValue < 0) dimmerValue = 0
            Hue_wohnzimmer_StehlampeSofa_Farbe.sendCommand(dimmerValue)
            if(dimmerValue > 0) timer.reschedule(now.plusSeconds(6))
            else timer = null
        }
    ])
    end

Missing opening parenthesis:

var dimmerValue = (Hue_wohnzimmer_StehlampeSofa_Farbe.state as HSBType).getBrightness as Number

Rules won’t run if they have syntax errors.

I made the same mistake as above.

Doh, @vzorglub beat me to it. :slight_smile:

Missing (

Also, it should be:

var Timer timer = null // global variable
1 Like

Indeed, that’s an important one. Without the “Timer” there is nothing to tell the Rules engine that “timer” is of type Timer so it uses the default which is Object. That is where the “Object doesn’t have a member reschedule” error came from.

You guys are great! After adding Timer to the first line, i get no more error messages and the lights are dimming.

but also the is a new issue now: the lights at first dimm up to 100, then to 90, 80 and back to 100… and i cant stop it… my wife is already asking, whats going on here :rofl::rofl::rofl:

==> /var/log/openhab2/openhab.log <==

2018-09-10 21:29:10.162 [INFO ] [lipse.smarthome.model.script.TESTING] - Dimming the light

2018-09-10 21:29:10.163 [INFO ] [lipse.smarthome.model.script.TESTING] - 100

==> /var/log/openhab2/events.log <==

2018-09-10 21:29:10.166 [ome.event.ItemCommandEvent] - Item 'Hue_wohnzimmer_StehlampeSofa_Farbe' received command 90

2018-09-10 21:29:10.173 [vent.ItemStateChangedEvent] - Hue_wohnzimmer_StehlampeSofa_Farbe changed from 23,83,100 to 23,83,90

2018-09-10 21:29:13.147 [vent.ItemStateChangedEvent] - fboxWanTotalBytesSent changed from 976922350 to 977018702

2018-09-10 21:29:13.148 [vent.ItemStateChangedEvent] - fboxWanTotalBytesReceived changed from 1460628455 to 1460759842

==> /var/log/openhab2/openhab.log <==

2018-09-10 21:29:16.169 [INFO ] [lipse.smarthome.model.script.TESTING] - Dimming the light

2018-09-10 21:29:16.171 [INFO ] [lipse.smarthome.model.script.TESTING] - 90

==> /var/log/openhab2/events.log <==

2018-09-10 21:29:16.174 [ome.event.ItemCommandEvent] - Item 'Hue_wohnzimmer_StehlampeSofa_Farbe' received command 80

2018-09-10 21:29:16.179 [vent.ItemStateChangedEvent] - Hue_wohnzimmer_StehlampeSofa_Farbe changed from 23,83,90 to 23,83,80

==> /var/log/openhab2/openhab.log <==

2018-09-10 21:29:22.177 [INFO ] [lipse.smarthome.model.script.TESTING] - Dimming the light

2018-09-10 21:29:22.179 [INFO ] [lipse.smarthome.model.script.TESTING] - 80

==> /var/log/openhab2/events.log <==

2018-09-10 21:29:22.182 [ome.event.ItemCommandEvent] - Item 'Hue_wohnzimmer_StehlampeSofa_Farbe' received command 70

2018-09-10 21:29:22.189 [vent.ItemStateChangedEvent] - Hue_wohnzimmer_StehlampeSofa_Farbe changed from 23,83,80 to 23,83,70

2018-09-10 21:29:28.101 [vent.ItemStateChangedEvent] - Hue_wohnzimmer_StehlampeSofa_Farbe changed from 23,83,70 to 23,83,100

==> /var/log/openhab2/openhab.log <==

2018-09-10 21:29:28.184 [INFO ] [lipse.smarthome.model.script.TESTING] - Dimming the light

2018-09-10 21:29:28.185 [INFO ] [lipse.smarthome.model.script.TESTING] - 100

==> /var/log/openhab2/events.log <==

ps: already could stop it by a restart :wink:

2018-09-10 21:29:22.189 [vent.ItemStateChangedEvent] - Hue_wohnzimmer_StehlampeSofa_Farbe changed from 23,83,80 to 23,83,70 2018-09-10 21:29:28.101 [vent.ItemStateChangedEvent] - Hue_wohnzimmer_StehlampeSofa_Farbe changed from 23,83,70 to 23,83,100

HERE!!
Your light goes back up to 100 approx 6 seconds after being set to 80 by the rule
There is nothing else in the log indicating that another rule is in play
What settings have you got in the light itself via the hue hub?