Hi,
thank you very much for your code. I was trying yesterday to implement the code, btw grouping is very easy. This is the result:
Option 1:
when
Time cron "*/12 * * * * ?"
then
gGroup1.members.forEach[ lightQuery |
lightQuery.sendCommand("ON") // issue the request to the device to report its current status
Thread::sleep(500) // wait for update, presumably lightQuery gets updated with the light's current state
val lightSwitch = gGroup2.members.filter[lightSwitch|lightSwitch.name == lightQuery.name+"_switch"].head
if(lightSwitch.state != lightQuery.state) lightSwitch.postUpdate(lightQuery.state)
]
end
I have this errors:
java.lang.IllegalStateException: Could not invoke method: org.openhab.model.script.lib.NumberExtensions.operator_notEquals(org.openhab.core.types.Type,java.lang.Number) on instance: null
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:738) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._featureCallOperation(XbaseInterpreter.java:713) ~[na:na]
at sun.reflect.GeneratedMethodAccessor43.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_91]
at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
at org.openhab.model.script.interpreter.ScriptInterpreter.internalFeatureCallDispatch(ScriptInterpreter.java:69) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateAbstractFeatureCall(XbaseInterpreter.java:658) ~[na:na]
at sun.reflect.GeneratedMethodAccessor44.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_91]
at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateIfExpression(XbaseInterpreter.java:327) ~[na:na]
at sun.reflect.GeneratedMethodAccessor53.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_91]
at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateBlockExpression(XbaseInterpreter.java:321) ~[na:na]
at sun.reflect.GeneratedMethodAccessor48.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_91]
at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:204) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:28) ~[na:na]
at com.sun.proxy.$Proxy79.apply(Unknown Source) ~[na:na]
at org.eclipse.xtext.xbase.lib.IterableExtensions.forEach(IterableExtensions.java:395) ~[na:na]
at sun.reflect.GeneratedMethodAccessor71.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_91]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:729) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._featureCallOperation(XbaseInterpreter.java:713) ~[na:na]
at sun.reflect.GeneratedMethodAccessor43.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_91]
at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
at org.openhab.model.script.interpreter.ScriptInterpreter.internalFeatureCallDispatch(ScriptInterpreter.java:69) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateMemberFeatureCall(XbaseInterpreter.java:549) ~[na:na]
at sun.reflect.GeneratedMethodAccessor45.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_91]
at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateBlockExpression(XbaseInterpreter.java:321) ~[na:na]
at sun.reflect.GeneratedMethodAccessor48.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_91]
at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:204) ~[na:na]
at org.openhab.model.script.internal.engine.ScriptImpl.execute(ScriptImpl.java:59) ~[na:na]
at org.openhab.model.rule.internal.engine.ExecuteRuleJob.execute(ExecuteRuleJob.java:55) ~[na:na]
at org.quartz.core.JobRunShell.run(JobRunShell.java:213) [quartz-all-2.1.7.jar:na]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557) [quartz-all-2.1.7.jar:na]
Caused by: java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_91]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_91]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:729) ~[na:na]
... 56 common frames omitted
Option 2:
when
Time cron "*/12 * * * * ?"
then
gGroup1.members.forEach[ lightQuery |
lightQuery.sendCommand("ON") // issue the request to the device to report its current status
Thread::sleep(500) // wait for update, presumably lightQuery gets updated with the light's current state
val lightSwitch = gGroup2.members.filter[lightSwitch|lightSwitch.name == lightQuery.name+"_switch"].head
if(lightSwitch.state != lightQuery.state) lightSwitch.postUpdate (if(lightQuery.state != OFF) ON else OFF)
]
end
I have this errors:
java.lang.IllegalStateException: Could not invoke method: org.openhab.model.script.lib.NumberExtensions.operator_notEquals(org.openhab.core.types.Type,java.lang.Number) on instance: null
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:738) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._featureCallOperation(XbaseInterpreter.java:713) ~[na:na]
at sun.reflect.GeneratedMethodAccessor43.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_91]
at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
at org.openhab.model.script.interpreter.ScriptInterpreter.internalFeatureCallDispatch(ScriptInterpreter.java:69) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateAbstractFeatureCall(XbaseInterpreter.java:658) ~[na:na]
at sun.reflect.GeneratedMethodAccessor44.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_91]
at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateIfExpression(XbaseInterpreter.java:327) ~[na:na]
at sun.reflect.GeneratedMethodAccessor53.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_91]
at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateBlockExpression(XbaseInterpreter.java:321) ~[na:na]
at sun.reflect.GeneratedMethodAccessor48.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_91]
at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:204) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:28) ~[na:na]
at com.sun.proxy.$Proxy79.apply(Unknown Source) ~[na:na]
at org.eclipse.xtext.xbase.lib.IterableExtensions.forEach(IterableExtensions.java:395) ~[na:na]
at sun.reflect.GeneratedMethodAccessor71.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_91]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:729) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._featureCallOperation(XbaseInterpreter.java:713) ~[na:na]
at sun.reflect.GeneratedMethodAccessor43.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_91]
at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
at org.openhab.model.script.interpreter.ScriptInterpreter.internalFeatureCallDispatch(ScriptInterpreter.java:69) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateMemberFeatureCall(XbaseInterpreter.java:549) ~[na:na]
at sun.reflect.GeneratedMethodAccessor45.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_91]
at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._evaluateBlockExpression(XbaseInterpreter.java:321) ~[na:na]
at sun.reflect.GeneratedMethodAccessor48.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_91]
at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:291) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:218) ~[na:na]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:204) ~[na:na]
at org.openhab.model.script.internal.engine.ScriptImpl.execute(ScriptImpl.java:59) ~[na:na]
at org.openhab.model.rule.internal.engine.ExecuteRuleJob.execute(ExecuteRuleJob.java:55) ~[na:na]
at org.quartz.core.JobRunShell.run(JobRunShell.java:213) [quartz-all-2.1.7.jar:na]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557) [quartz-all-2.1.7.jar:na]
Caused by: java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_91]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_91]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:729) ~[na:na]
... 56 common frames omitted
And finally option 3:
You can see, that i only reverse if(lightSwitch.state != lightQuery.state) to if(lightQuery.state != lightSwitch.state) and it works. To be honest, I dont understand it, but it
s working.
when
Time cron "*/12 * * * * ?"
then
gGroup1.members.forEach[ lightQuery |
lightQuery.sendCommand("ON") // issue the request to the device to report its current status
Thread::sleep(500) // wait for update, presumably lightQuery gets updated with the light's current state
val lightSwitch = gGroup2.members.filter[lightSwitch|lightSwitch.name == lightQuery.name+"_switch"].head
if(lightQuery.state != lightSwitch.state) lightSwitch.postUpdate (if(lightQuery.state != OFF) ON else OFF)
]
end
Woking!
2016-08-05 10:16:14.836 [INFO ] [c.internal.ModelRepositoryImpl] - Refreshing model 'svetla.rules'
2016-08-05 10:16:24.396 [INFO ] [runtime.busevents ] - svoblus received command ON
2016-08-05 10:16:24.872 [INFO ] [t.protocol.internal.TCPBinding] - Received !d0012@P from the remote end Channel [item=svoblus, command=ON, direction=OUT, remote=/192.168.88.238:13000, buffer=, isBlocking=false, isReconnecting=false, channel=/192.168.88.250:52587::/192.168.88.238:13000, host=192.168.88.238, port=13000]
2016-08-05 10:16:25.041 [INFO ] [runtime.busevents ] - svoblus state updated to OFF
2016-08-05 10:16:25.631 [INFO ] [runtime.busevents ] - svobbod received command ON
2016-08-05 10:16:26.205 [INFO ] [t.protocol.internal.TCPBinding] - Received !d0032@P from the remote end Channel [item=svobbod, command=ON, direction=OUT, remote=/192.168.88.238:13000, buffer=, isBlocking=false, isReconnecting=false, channel=/192.168.88.250:52587::/192.168.88.238:13000, host=192.168.88.238, port=13000]
2016-08-05 10:16:26.373 [INFO ] [runtime.busevents ] - svobbod state updated to OFF
2016-08-05 10:16:26.892 [INFO ] [runtime.busevents ] - svobled received command ON
2016-08-05 10:16:27.489 [INFO ] [t.protocol.internal.TCPBinding] - Received !d0022@P from the remote end Channel [item=svobled, command=ON, direction=OUT, remote=/192.168.88.238:13000, buffer=, isBlocking=false, isReconnecting=false, channel=/192.168.88.250:52587::/192.168.88.238:13000, host=192.168.88.238, port=13000]
2016-08-05 10:16:27.648 [INFO ] [runtime.busevents ] - svobled state updated to OFF
2016-08-05 10:16:28.166 [INFO ] [runtime.busevents ] - svsch received command ON
2016-08-05 10:16:28.619 [INFO ] [runtime.busevents ] - lampa state updated to 4
2016-08-05 10:16:28.666 [INFO ] [runtime.busevents ] - slamp state updated to OFF
2016-08-05 10:16:28.718 [INFO ] [t.protocol.internal.TCPBinding] - Received !d0042@P from the remote end Channel [item=svsch, command=ON, direction=OUT, remote=/192.168.88.238:13000, buffer=, isBlocking=false, isReconnecting=false, channel=/192.168.88.250:52587::/192.168.88.238:13000, host=192.168.88.238, port=13000]
2016-08-05 10:16:28.734 [INFO ] [runtime.busevents ] - ppower state updated to OFF
2016-08-05 10:16:28.996 [INFO ] [runtime.busevents ] - svsch state updated to OFF
2016-08-05 10:16:29.435 [INFO ] [runtime.busevents ] - svvch received command ON
2016-08-05 10:16:30.001 [INFO ] [t.protocol.internal.TCPBinding] - Received !d0052@P from the remote end Channel [item=svvch, command=ON, direction=OUT, remote=/192.168.88.238:13000, buffer=, isBlocking=false, isReconnecting=false, channel=/192.168.88.250:52587::/192.168.88.238:13000, host=192.168.88.238, port=13000]
2016-08-05 10:16:30.166 [INFO ] [runtime.busevents ] - svvch state updated to OFF
2016-08-05 10:16:30.681 [INFO ] [runtime.busevents ] - svloz received command ON
2016-08-05 10:16:31.036 [INFO ] [t.protocol.internal.TCPBinding] - Received !d0062@P from the remote end Channel [item=svloz, command=ON, direction=OUT, remote=/192.168.88.238:13000, buffer=, isBlocking=false, isReconnecting=false, channel=/192.168.88.250:52587::/192.168.88.238:13000, host=192.168.88.238, port=13000]
2016-08-05 10:16:31.232 [INFO ] [runtime.busevents ] - svloz state updated to OFF
2016-08-05 10:16:31.522 [INFO ] [runtime.busevents ] - stav state updated to 7
2016-08-05 10:16:31.754 [INFO ] [runtime.busevents ] - svpolus received command ON
2016-08-05 10:16:32.302 [INFO ] [t.protocol.internal.TCPBinding] - Received !d1012@P from the remote end Channel [item=svpolus, command=ON, direction=OUT, remote=/192.168.88.238:13000, buffer=, isBlocking=false, isReconnecting=false, channel=/192.168.88.250:52587::/192.168.88.238:13000, host=192.168.88.238, port=13000]
2016-08-05 10:16:32.469 [INFO ] [runtime.busevents ] - svpolus state updated to OFF
2016-08-05 10:16:32.975 [INFO ] [runtime.busevents ] - svpohve received command ON
2016-08-05 10:16:33.329 [INFO ] [t.protocol.internal.TCPBinding] - Received !d1022@P from the remote end Channel [item=svpohve, command=ON, direction=OUT, remote=/192.168.88.238:13000, buffer=, isBlocking=false, isReconnecting=false, channel=/192.168.88.250:52587::/192.168.88.238:13000, host=192.168.88.238, port=13000]
2016-08-05 10:16:33.519 [INFO ] [runtime.busevents ] - svpohve state updated to OFF