![]() |
|
Simple Staircase Timer - Printable Version +- LogicMachine Forum (https://forum.logicmachine.net) +-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1) +--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8) +--- Thread: Simple Staircase Timer (/showthread.php?tid=4193) |
Simple Staircase Timer - Rauschentofft - 16.08.2022 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 RE: Simple Staircase Timer - admin - 17.08.2022 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
endRE: Simple Staircase Timer - Rauschentofft - 17.08.2022 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 RE: Simple Staircase Timer - Rauschentofft - 02.04.2023 Hi, if i only want the staircase timer to send 90% when its trigged, and the time is out it send 10% RE: Simple Staircase Timer - admin - 03.04.2023 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)
}
}RE: Simple Staircase Timer - Rauschentofft - 03.04.2023 Thank you very much for the help. |