Controlling global variable and timer from Groovy
-
I am planning to connect a multi-position switch with a few PIR sensors.
When PIR1 gets tripped and switch is OFF, switch should be set to position1.
Switch should be turned OFF after 3 minutes.When PIR1 gets tripped and switch is not OFF, switch should be kept in this state extra 3 minutes and then turned OFF.
When PIR2 gets tripped, switch should be set to position2 for 3 minutes.To implement this scenario, I plan to define global variable to hold switch state and timer to turn switch off when timeout expires.
Now questions:
Should I use "Utilities->Variables repository" to define global variable?
Could someone post a code snippet to show how to read/write global variable in the Groovy script?I guess timer should be "normal" (not recurring)?
Timer should be connected to the "Turn OFF" operation?
How could I control timer in the Groovy script (e.g. change time when it should trigger)?I need Groovy sample that runs some command line tool or shell script.
-
Should I use "Utilities->Variables repository" to define global variable?
Could someone post a code snippet to show how to read/write global variable in the Groovy script?You can get follow http://forum.mycontroller.org/category/24/scripts have a lot of examples.
def myVar = mcApi.variable().get("my-variable") //Read values myVar.getId() //Returns internal id(for end user not useful) myVar.getKey() //Key(here: my-variable) myVar.getValue() //value as String myVar.getValue2() //value2 as String myVar.getValue3() //value3 as String //Change value myVar.setValue("my-new-value") //Should be in the form of String //to save myVar.save() //or mcApi.variable().update(myVar)
I guess timer should be "normal" (not recurring)?
Timer should be connected to the "Turn OFF" operation?
How could I control timer in the Groovy script (e.g. change time when it should trigger)?You can control your timer. Even you can control your operations. I will add example soon.
I need Groovy sample that runs some command line tool or shell script.
MyController scripts designed to run on MyController itself. For now, we cannot run outside (command line).
-
-
@benya I verified, Groovy could execute external tools. Tested with Demo system:
return "ls".execute().text.split("\n")
Result:
{ "mcResult": [ "Publicbroker-wstestmosquittoorg8080mqtt", "h2", "start.bat", "start.sh", "start_.sh", "stop.sh", "test_19Kz0-tcpwantsoftru1883", "test_48n0f-tcpwantsoftru1883", "test_FzOqu-tcpwantsoftru1883", "test_epPgp-tcpwantsoftru1883", "tmp" ] }
-
@benya I thought you asked to execute script itself from command line.
-
@jkandasa said:
You can get follow http://forum.mycontroller.org/category/24/scripts have a lot of examples.
I saw only 9 topics in this list.
Did you have a chance to prepare sample to show how to control timer?
-
def filters = [:]; //Add filter to get your timer filters.put("name", "Disable-PIR-rules"); //your timer def myTimer = mcApi.timer().get(filters); //Do actions myTimer.setEnabled(false); //Update this timer mcApi.timer().update(myTimer);
-
@jkandasa Seems
mcApi.timer().update(myTimer);
causes timer to loose references to the operations and doesn't trigger operation when enabled again.I had better luck with the following code:
def filters = [:]; filters.put("name", "Timer1"); def myTimer = mcApi.timer().get(filters); def timerIds = [myTimer.getId()]; mcApi.timer().disable(timerIds) mcApi.timer().enable(timerIds)
-
@benya Thanks for the update, let me check
mcApi.timer().update(myTimer)