Recently ran across comments where it talked about placing common routines in scripts to streamline/reuse commands same as you would with a Function when programming. Part of what I read said you couldn’t pass variables back and forth and that is fine, but I’m having trouble with what I tried.
Here’s a set of lights that I control with a scene that I had set up previously as a rule triggered from a switch. And because this scene is triggered from multiple rules it made sense to place the code in a script and call the script, which forks fine, mostly…
The group of GE Lights work fine, but the Hue Lights do not.
What am I doing wrong?
Thanks!
//GE Lights
sendCommand(LT_Table1,100)
sendCommand(LT_Table2,100)
sendCommand(LT_Kitchen,100)
sendCommand(LT_LivingRM2,40)
sendCommand(LT_Laundry,100)
sendCommand(LT_Stairway,100)
sendCommand(LT_OCloset,20)
//Hue Lights
//master bedroom lamp
var DecimalType hue = new DecimalType(240)
var PercentType sat = new PercentType(100) // 0-100
var PercentType bright = new PercentType(10) // 0-100
var HSBType light = new HSBType(hue,sat,bright)
sendCommand(LT_MstrLamp,light)
//dining room corner
hue = new DecimalType(100)
sat = new PercentType(100) // 0-100
bright = new PercentType(40) // 0-100
light = new HSBType(hue,sat,bright)
sendCommand(LT_Dining,light)
I’ve tried to shorten it to just the following, and it still fails on the first line:
> var HSBType light = new HSBType(240,100,10)
> sendCommand(LT_MstrLamp,light)
All three parameters are needed to set the hue, saturation and brightness of the hue bulb.
When I click the switch this appears in the events log:
2016-02-19 05:31:56 - TestSW received command ON
And then this in the openhab log:
2016-02-19 05:31:56.191 [ERROR] [o.o.c.s.ScriptExecutionThread ] - Error during the execution of rule ‘Test’: An error occured during the script execution: null
This is the rule:
rule "Test"
when
Item TestSW received update
then
if (TestSW.state == ON) {
callScript(“test”)
//turn switch off
sendCommand(TestSW, OFF)
}
end
And the trimmed down script:
var HSBType light = new HSBType(240,100,10)
sendCommand(LT_MstrLamp,light)
After much reading I’ve rewritten the script and have all but one line working…
Here’s the script with comments as to what is/isn’t working:
// following lines ok - script continues
var DecimalType hue = 360
var PercentType sat = 100
var PercentType bright = 100
// if the following line isn’t commented out - the script stops here
// no errors - but the light changes below don’t get executed
//var HSBType light = (hue,sat,bright)
// this line commented out because the light line above doesn’t work
//sendCommand(LT_LivingRM2,light)
// the following work if HSBType above is commented out
sendCommand(LT_LivingRM2,10)
Thread::sleep(2000)
sendCommand(LT_LivingRM2,100)
Thread::sleep(2000)
sendCommand(LT_LivingRM2,10)
As you can see I’ve added some light changes at the bottom to see if the script continues to execute.
Is there some way to declare the HSBType in a script and use it?