This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Irrigation program
#21
Which script are you trying to disable and stop? The script above is for Scheduled script only.
------------------------------
Ctrl+F5
Reply
#22
(24.10.2023, 08:38)Daniel Wrote: Which script are you trying to disable and stop? The script above is for Scheduled script only.


Code:
value = event.getvalue()
if value == true then
  --os.sleep(3)
  --grp.write("5/0/1",false)

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 grp.getvalue(item.enable) then
    grp.write(item.output, true)
    dosleep(item.timer)
    grp.write(item.output, false) 
  end
end
grp.write("5/0/1",false)
end

This is the script i'm using as event-based script.
Reply
#23
Set event script "Execution mode" to "Last instance only".
Reply
#24
(24.10.2023, 08:50)admin Wrote: Set event script "Execution mode" to "Last instance only".

How can I configure this?
Reply
#25
In event script settings. You need 2023 or newer firmware for this.
Reply
#26
Ok so I'll have an event-based script for the irrigation program configured as last instance only execution mode.

Code:
value = event.getvalue()
if value == true then
  --os.sleep(3)
  --grp.write("5/0/1",false)

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 grp.getvalue(item.enable) then
    grp.write(item.output, true)
    dosleep(item.timer)
    grp.write(item.output, false) 
  end
end
grp.write("5/0/1",false)
end


And then I also need an event-based script in normal execution mode like the shown below in order to stop the irrigation program. Is that correct? Thank you!

Code:
value = event.getvalue()
if value == false then
name = 'my script name'
item = script.get(name)
script.disable(name)
os.execute('pkill -f "scripting-scheduled.lua ' .. item.id .. '"')
Reply
#27
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.
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
Reply


Forum Jump: