Logic Machine Forum
LUA control shutter using reactor - Printable Version

+- Logic Machine 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: LUA control shutter using reactor (/showthread.php?tid=1504)



LUA control shutter using reactor - Bitver - 28.07.2018

I wonder if there is any script to control shutters (position, up/down, stop) using reactor digital outputs?


RE: LUA control shutter using reactor - buuuudzik - 28.07.2018

I was thinking about this task(as a challenge) and maybe I will prepare some script. It should be (in my opinion) combination of event-based script which will activate resident script and when blind is moving this resident script should control its relays in some wise way.


RE: LUA control shutter using reactor - AEK - 31.07.2018

(28.07.2018, 11:21)Bitver Wrote: I wonder if there is any script to control shutters (position, up/down, stop) using reactor digital outputs?

try this

1/1/1 - button up
1/1/2 - button down
1/1/3 - motor up
1/1/4 - motor down
1/1/5 - position setpoint
1/1/6 - position status

event script for button up (name = gate_up)
Code:
up = event.getvalue()
status = grp.getvalue('1/1/6')
time = 65             -- movement time (sec.)
step = time/100         -- delay step
if up == true then
 script.disable('gate_up')
 script.disable('gate_down')
    grp.write('1/1/3', true)
 while up == true do
   up1 = grp.getvalue('1/1/1')
     if up1 == false then
     status = status - 0
     grp.write('1/1/3', false)
       grp.write('1/1/4', false)
     grp.write('1/1/6', status)
     break
   end
   status = status + 1
   os.sleep(step)
   grp.write('1/1/6', status)
    end
 script.enable('gate_up')
 script.enable('gate_down')
end
event based script for button down (name = 'gate_down')
Code:
down = event.getvalue()
status = grp.getvalue('1/1/6')
time = 60             -- movement time (sec.)
step = time/100         -- delay step
if down == true then
 script.disable('gate_up')
 script.disable('gate_down')
    grp.write('1/1/4', true)
 while down == true do
   down1 = grp.getvalue('1/1/2')
   if down1 == false then
     status = status - 0
     grp.write('1/1/3', false)
       grp.write('1/1/4', false)
     grp.write('1/1/6', status)
     break
   end
   status = status - 1
   os.sleep(step)
   grp.write('1/1/6', status)
    end
 script.enable('gate_up')
 script.enable('gate_down')
end
event script for position setpoint (name = position)
Code:
proc = event.getvalue()
status = grp.getvalue('1/1/6')
time = 65             -- movement time (sec.)
step = time/100          -- delay step
if proc - status > 0 then
 grp.write('1/1/3', false)
 grp.write('1/1/4', false)
 os.sleep(0.25)
    grp.write('1/1/3', true)  
 while status ~= proc do
   proc = grp.getvalue('1/1/5')  
   status = status + 1
   os.sleep(step)
   grp.write('1/1/6', status)
   if proc == status then
     grp.write('1/1/3', false)
       grp.write('1/1/4', false)
     grp.write('1/1/6', proc)
   end
    end
elseif proc - status < 0 then
time = 60                   -- movement time (sec.)
step = time/100             -- delay step
 grp.write('1/1/3', false)
 grp.write('1/1/4', false)  
 os.sleep(0.25)
    grp.write('1/1/4', true)
 while status ~= proc do
   proc = grp.getvalue('1/1/5')
   status = status - 1
   os.sleep(step)
   grp.write('1/1/6', status)
   if proc == status then
     grp.write('1/1/3', false)
       grp.write('1/1/4', false)
     grp.write('1/1/6', proc)
   end
 end
end