![]() |
|
movement detection - 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: movement detection (/showthread.php?tid=5700) |
movement detection - almoisey - 23.10.2024 Hello. I need that script for movement detection-if there is movement, the actuator is triggered for a certain time1 . if the movement is repeated(while the actuator is ON), the actuator's operating time is extended for time 2 thanks RE: movement detection - Daniel - 23.10.2024 Is the time1 different then time2? RE: movement detection - almoisey - 24.10.2024 yes. movement1= 100seconds and each another movement will add 30seconds RE: movement detection - admin - 25.10.2024 Resident script with sleep time set to 0. In this example 0/0/1 is movement input (1 bit) and 0/0/6 is actuator output control (1 bit). Multiple timers can be added to the timers table if needed. Code: if not client then
timers = {
['0/0/1'] = {
output = '0/0/6', -- binary output control (0/1)
timeoutinit = 100, -- initial timeout in seconds
timeoutadd = 30, -- additional timeout in seconds
},
}
function timerset(timer, value, ticks)
timer.on = value
timer.ticks = ticks
grp.write(timer.output, value, dt.bool)
end
function timerstart(timer)
if timer.on then
timer.ticks = timer.ticks + timer.timeoutadd
else
timerset(timer, true, timer.timeoutinit)
end
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
timerstart(timer)
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
timerset(timer, false)
end
end
end |