Info if garage is opened longer than 15minues

Hi!

Tried the following rule in openhab 2.2.0-SNAPSHOT, without getting an info…

/* -------------  Garage ist offen (länger als 15 Minuten zwischen 17:00 - 08:00) --------------------
*/
items:

```csv
String GarageOutValue { http="<[beckhoff:2000:JSONPATH($.Garage)]" }
Switch GarageOut { http=">[ON:POST:URL] >[OFF:POST:URL2]" }

rule:

```php
rule "garage"
when
        Item GarageOutValue received update
then
        GarageOut.postUpdate(if(GarageOutValue.state == "on") ON else OFF)
end
rule "openGarage"
when
		Time cron "0 0/15 17-8 * * ?"
then
	if (GarageOutValue.state == "off" && !GarageOutValue.changedSince(now.minusMinutes(1))){ 
                logInfo(filename, "Garage ist länger als 15 Minuten geöffnet")
		 
        //Sende Notification
	sendPushbulletNote("DEFAULT", "mail@mail.at", "Garagentor ist seit über 15min geöffnet!", "Garagentor schließen!")
        }
end

here is how I manage it (with a timer):

var int timervalueDoor = 600 // garage door timer

rule "Garage door state"
	when 
		Item GarageDoor changed
	then
		if (GarageDoor.state == "open") { 
			say("La porte du garage est ouverte") 
				timerDoor = createTimer(now.plusSeconds(timervalueDoor)) [|
		   	   	say("La porte du garage est ouverte depuis "+ timervalueDoor + " secondes")
		   	   	sendMail(maillist, mailsubject, "Porte du garage ouverte depuis "+ timervalueDoor + " secondes " + df.format( new Date() ))
   	   			timerDoor.cancel
				timerDoor = null
			]	
		} else if (GarageDoor.state == "closed"){
			say("La porte du garage est fermée")
   			timerDoor.cancel
			timerDoor = null
		}

end

thanks, getting the following error. I deleted the say( ) method. maybe this comes from this call. saved… but maybe not clear recognized, that I delted…

2017-12-11 21:20:58.387 [ERROR] [org.quartz.core.JobRunShell         ] - Job DEFAULT.2017-12-11T21:20:58.375+01:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
  logInfo(<XFeatureCallImplCustom>,<XStringLiteralImpl>)
  sendPushbulletNote(<XStringLiteralImpl>,<XStringLiteralImpl>,<XStringLiteralImpl>,<XStringLiteralImpl>)
  <XFeatureCallImplCustom>.cancel
  <null>.timerDoor = <XNullLiteralImplCustom>
} ] threw an unhandled Exception:
java.lang.reflect.UndeclaredThrowableException: null
        at com.sun.proxy.$Proxy148.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.201712081218]
        at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [115:org.eclipse.smarthome.core.scheduler:0.10.0.201712081218]
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [115:org.eclipse.smarthome.core.scheduler:0.10.0.201712081218]
Caused by: org.eclipse.smarthome.model.script.engine.ScriptExecutionException: The name 'filename' cannot be resolved to an item or type; line 29, column 27, length 8
        at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:131) ~[?:?]
        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.evaluateArgumentExpressions(XbaseInterpreter.java:1115) ~[?:?]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1045) ~[?:?]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:991) ~[?:?]
        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: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) ~[?:?]
        ... 4 more
2017-12-11 21:21:00.113 [ERROR] [org.quartz.core.ErrorLogger         ] - Job (DEFAULT.2017-12-11T21:20:58.375+01:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
  logInfo(<XFeatureCallImplCustom>,<XStringLiteralImpl>)
  sendPushbulletNote(<XStringLiteralImpl>,<XStringLiteralImpl>,<XStringLiteralImpl>,<XStringLiteralImpl>)
  <XFeatureCallImplCustom>.cancel
  <null>.timerDoor = <XNullLiteralImplCustom>
} ] 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.201712081218]
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [115:org.eclipse.smarthome.core.scheduler:0.10.0.201712081218]
Caused by: java.lang.reflect.UndeclaredThrowableException
        at com.sun.proxy.$Proxy148.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 'filename' cannot be resolved to an item or type; line 29, column 27, length 8
        at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:131) ~[?:?]
        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.evaluateArgumentExpressions(XbaseInterpreter.java:1115) ~[?:?]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1045) ~[?:?]
        at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:991) ~[?:?]
        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: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.$Proxy148.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

seems to came from the pushbullet method, you could try to comment it and see if you get still errors

Caused by: org.eclipse.smarthome.model.script.engine.ScriptExecutionException: The name 'filename' cannot be resolved to an item or type; line 29, column 27, length 8

So openHAB complains about a name filename. What’s the complete rule?

thank you that was in my logInfo… do I have to include some classes to use logInfo?

my exaclty code looks like this:

import org.openhab.model.script.actions.Timer
var int timervalueDoor = 900
rule "garage"
when
        Item GarageOutValue received update
then
        GarageOut.postUpdate(if(GarageOutValue.state == "on") ON else OFF)
end

/* -------------  Garage ist offen (länger als 15 Minuten zwischen 17:00 - 08:00) --------------------
*/

rule "openGarage"
when
        Item GarageOutValue changed
then
	if (GarageOutValue.state == "off") { 
		timerDoor = createTimer(now.plusSeconds(timervalueDoor)) [|
		/*logInfo("Garage ist länger als 10 Minuten geöffnet")*/
		sendPushbulletNote("DEFAULT", "mymail@mail.at", "Garagentor ist seit über 15min geöffnet!", "Garagentor schließen!")
		timerDoor.cancel
		timerDoor = null]	
	} else if (GarageOutValue.state == "on"){
   			timerDoor.cancel
			timerDoor = null
	}
end

now it sends pushbullet notes! But in my log I can find this error:

2017-12-12 19:49:41.381 [ERROR] [org.quartz.core.JobRunShell         ] - Job DEFAULT.2017-12-12T19:49:39.228+01:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
  sendPushbulletNote(<XStringLiteralImpl>,<XStringLiteralImpl>,<XStringLiteralImpl>,<XStringLiteralImpl>)
  <XFeatureCallImplCustom>.cancel
  <null>.timerDoor = <XNullLiteralImplCustom>
} ] 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.201712111157]
        at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:130) [145:org.eclipse.smarthome.model.script:0.10.0.201712111157]
        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.201712111157]
        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.201712111157]
        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.201712111157]
        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.v20170519-0752]
        at com.sun.proxy.$Proxy145.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.201712111157]
        at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [115:org.eclipse.smarthome.core.scheduler:0.10.0.201712111157]
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [115:org.eclipse.smarthome.core.scheduler:0.10.0.201712111157]
2017-12-12 19:49:41.414 [ERROR] [org.quartz.core.ErrorLogger         ] - Job (DEFAULT.2017-12-12T19:49:39.228+01:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
  sendPushbulletNote(<XStringLiteralImpl>,<XStringLiteralImpl>,<XStringLiteralImpl>,<XStringLiteralImpl>)
  <XFeatureCallImplCustom>.cancel
  <null>.timerDoor = <XNullLiteralImplCustom>
} ] 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.201712111157]
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [115:org.eclipse.smarthome.core.scheduler:0.10.0.201712111157]
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: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.$Proxy145.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

do I have to declare the variable timerDoor ? I only declared timervalueDoor…

Yes, you have to define timerDoor. As you use openHAB2.x, you don’t need to define Timer actions.

If using a timer, it’s recommended to test if the timer is already running:

val int timervalueDoor = 900  //val -> will not change, constant value
var Timer timerDoor = null

rule "openGarage"
when
    Item GarageOutValue changed
then
    if (GarageOutValue.state.toString == "off") { 
        if(timerDoor!==null)  //no curly brackets, so only the next command will be executed
            timerDoor.cancel
        timerDoor = createTimer(now.plusSeconds(timervalueDoor)) [|
            logInfo("garage","Garage ist länger als {} Sekunden geöffnet!",timervalueDoor)
            sendPushbulletNote("DEFAULT", "mymail@mail.at", "Garagentor ist seit über 15min geöffnet!", "Garagentor schließen!")
            timerDoor = null   //timer already expired, no need to cancel
        ]	
    }
    else if (GarageOutValue.state.toString == "on") {
        timerDoor.cancel  //cancel timer
        timerDoor = null  //and reset to null
    }
end

Please keep attention to the .state.toString part. Actually, “on” or “off” are strings but not states. However, openHAB2 will silently convert the state to a string, but there are situations where this does not work as expected, so always be aware of the difference between a state and a string.

1 Like