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.

detect double, single and long press from wall switch
#6
Hi guys,

I have been testing our colleague's solution to be able to turn on two different lights with the same button using a single pulse or double pulse, but I can't get it to work properly (and I don't know if there is something I haven't understood well)

I have created a resident script (sleep interval 0), where the address 16/1/1 is the press that I make on the button, the addresses 1/1/10 and 1/1/120 are the lights and the address 16/1/2 is an address that I have created to perform the count
:
Code:
if not client then
  require('genohm-scada.eibdgm')
 
  -- knx group write handler
  function groupwrite(event)
    local value
    value = knxdatatype.decode(event.datahex, dt.bool)
    --first room
    if event.dst == "16/1/1" then
      switcher("16_1_1", "1/1/10", "1/1/120", "16/1/2", value)
    end
  end
 
  client = eibdgm:new()
  client:sethandler('groupwrite', groupwrite)

  function switcher(event_adress, light1, light2, counter_object, value)
    nowTIME = os.time()
    counter = grp.getvalue(counter_object)
    state = value
    if (state == false) then
      counter = counter + 1
      log(counter)
      lastONtime = storage.get('lastONtime' .. event_adress)
      if (nowTIME - lastONtime > 1) then
        log('long press ' .. event_adress)
        grp.write(light1, false)
        grp.write(light2, false)
        grp.update(counter_object, 0)
      else
        grp.update(counter_object, counter)
      end
    else
      storage.set('lastONtime'  .. event_adress, nowTIME)
    end   
  end
end

client:step()

And also at address 16/1/2 I have created the following event script:
Code:
value = tonumber(event.datahex, 16)

if value > 0 then
  light1 = '1/1/10'
  light2 = '1/1/120'
  switcher_adress = '16/1/1'

  os.sleep(1)
  value = event.getvalue()

  if value == 1 then
    log('single press '.. switcher_adress)
    grp.write(light1, not(grp.getvalue(light1)))
  elseif value == 2 then
    log('double ' .. switcher_adress)
    grp.write(light2, not(grp.getvalue(light2)))
  end

  -- reset counter
  if value > 0 then
    grp.update(event.dst, 0)
  end
end

The problem is that I can't get it to turn on the corresponding lights by giving it a single pulse or two, but nevertheless there are times when I do a short press, it interprets that I have done a long press and turns off the lights or when I try to do a double press , it interprets that I have done one or that I have done a long press (that is, it does different things each time). I can't find what the problem is.

I hope you can help me. Thank you so much
Reply


Messages In This Thread
RE: detect double, single and long press from wall switch - by JoseJimenez94 - 11.01.2024, 08:45

Forum Jump: