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.

Simple Staircase Timer
#1
Hi.

I need help with a simple staircase timer script. Staircase with after dimming with two step.

When the trigger gets true 1/1/1, Timer 1 and Timer 2 starts and Set Value High to 1/1/2 Output.

After ten minutes the Set Value Low is set to 1/1/2 Output. If the time runs out it should write Set Value Off.

But every time the trigger recive true the timer 1 and 2 is retrigged.

If timer 2 is active and the trigger recive true it should set 90%.


1/1/1 Trigger Staircase 1bit
1/1/2 Output 1byte
Set Value High 90%
Set Value Low 20%
Set Value Off 0%
Set Timer 1 = 10min
Set Timer 2 = 20min

Br
Reply
#2
Resident script with 0 sleep time. Adjust timers table as needed. This script can handle multiple timers.
Code:
if not client then
  timers = {
    ['1/1/1'] = {
      output = '1/1/2', -- dimmer control (0..100%)
      onvaluehigh = 90, -- high output value in %
      onvaluelow = 20, -- low output value in %
      timeouthigh = 10 * 60, -- time to keep high value (in seconds)
      timeoutlow = 10 * 60, -- time to keep low value (in seconds)
    }
  }

  function timersetstate(timer, state)
    grp.checkwrite(timer.output, timer['onvalue' .. state] or 0)
    timer.state = state
    timer.ticks = timer['timeout' .. state]
  end

  function timertimeout(timer)
    local state = timer.state == 'high' and 'low' or 'off'
    timersetstate(timer, state)
  end

  for _, timer in ipairs(timers) do
    timer.state = 'off'
  end

  grp.sender = 'tm'

  client = require('localbus').new(0.1)
  client:sethandler('groupwrite', function(event)
    local timer = timers[ event.dst ]
    if timer and event.sender ~= grp.sender then
      local value = tonumber(event.datahex, 16) or 0
      if value == 1 then
        timersetstate(timer, 'high')
      end
    end
  end)
end

client:loop(1)

for _, timer in pairs(timers) do
  if timer.ticks then
    timer.ticks = timer.ticks - 1

    if timer.ticks == 0 then
      timertimeout(timer)
    end
  end
end
Reply
#3
Thank you very much for the help.

Hi again.

Is it possible to have a slave input to retrigger the timer when it is active?

1/1/1 Trigger Staircase 1bit
1/1/2 Output 1byte
1/1/3 Slave Input
Set Value High 90%
Set Value Low 20%
Set Value Off 0%
Set Timer 1 = 10min
Set Timer 2 = 20min
Reply
#4
Hi,

if i only want the staircase timer to send 90% when its trigged, and the time is out it send 10%
Reply
#5
Remove timeoutlow and the timer won't go into off state.
Code:
timers = {
  ['1/1/1'] = {
    output = '1/1/2', -- dimmer control (0..100%)
    onvaluehigh = 90, -- high output value in %
    onvaluelow = 10, -- low output value in %
    timeouthigh = 10 * 60, -- time to keep high value (in seconds)
  }
}
Reply
#6
Thank you very much for the help.
Reply


Forum Jump: