24.10.2023, 09:45
You don't need an extra script for this. In "Last instance only" mode all previous script instances are stopped once new value arrives.
Your script should be modified to turn off all outputs when false is received. This is needed because when the script is running it's mostly sleeping with one output turned on.
Your script should be modified to turn off all outputs when false is received. This is needed because when the script is running it's mostly sleeping with one output turned on.
Code:
value = event.getvalue()
function dosleep(obj)
local timer = grp.getvalue(obj)
timer = tonumber(timer)
if timer then
if timer < mintimer then
timer = mintimer
elseif timer > maxtimer then
timer = maxtimer
end
os.sleep(timer * 60) -- minutes -> seconds
end
end
mintimer = 0.1 -- minimum timer value in minutes
maxtimer = 60 -- maximum timer value in minutes
objects = {
{
output = '5/1/1',
timer = '5/3/1',
enable = '5/4/1',
},
{
output = '5/1/2',
timer = '5/3/2',
enable = '5/4/2',
},
{
output = '5/1/3',
timer = '5/3/3',
enable = '5/4/3',
},
{
output = '5/1/4',
timer = '5/3/4',
enable = '5/4/4',
},
{
output = '5/1/5',
timer = '5/3/5',
enable = '5/4/5',
},
{
output = '5/1/6',
timer = '5/3/6',
enable = '5/4/6',
},
{
output = '5/1/7',
timer = '5/3/7',
enable = '5/4/7',
},
{
output = '5/1/8',
timer = '5/3/8',
enable = '5/4/8',
},
{
output = '5/1/9',
timer = '5/3/9',
enable = '5/4/9',
},
{
output = '5/1/10',
timer = '5/3/10',
enable = '5/4/10',
}
}
for _, item in ipairs(objects) do
if value == true then
if grp.getvalue(item.enable) then
grp.write(item.output, true)
dosleep(item.timer)
grp.write(item.output, false)
end
else
grp.checkwrite(item.output, false)
end
end