Een simpele drukknop met 2 functies (2 x schakelen)

Om een simpele drukknop te gebruiken om 2 toestellen aan te sturen moet je een onderscheid kunnen maken tussen een “Single Click” = éénmaal drukken en een “Double Click” = tweemaal kort achtereen drukken.

Indien de simpele drukknop geen twee of meer aparte profielen ondersteunt (zoals bvb de NodOn Soft Remote wel doet) kan je met wat programmeren in LUA toch wel zo iets benaderen.

Hiertoe moet je 3 globale variabelen declareren (in het “Variables Panel”) per schakelaar en 2 LUA scenes maken.

1. Globale Variabelen

Maak er 3 aan; voor de naamgeving heb ik hier een conventie gebruikt om ze later gemakkelijk te identificeren. Vervang {{id1}} door het ID van de schakelaar/drukknop, {{id2}} door het ID van de eerste module die je wil schakelen met een enkele druk en {{id3}} door het ID van de derde module die je met dubbel drukken wil schakelen.

  • Push{{id1}}_1
  • Push{{id1}}_2
  • Push{{id1}}_3

2. LUA script voor het druk-event

AdvDrukknop{{id1}}_DRUK

--[[
%% properties
{{id1}} value
%% events
%% globals
--]]
local id1={{id1}} --schakelaar
local id2={{id2}} --advanced drukknop scene
fibaro:debug("Button Push Time: "..tonumber(os.time()))
fibaro:setGlobal("Push"..id1.."_3",fibaro:getGlobalValue("Push"..id1.."_2"))
fibaro:setGlobal("Push"..id1.."_2",fibaro:getGlobalValue("Push"..id1.."_1"))
fibaro:setGlobal("Push"..id1.."_1",tonumber(os.time()))
fibaro:sleep(200)
fibaro:startScene(id2)

3. LUA script voor de schakeling

--[[
%% properties
%% events
%% globals
--]]
local id1=37 -- de schakelaar
local id2=34 -- module 1 - enkele klik
local id3=48 -- module 2 - dubbele klik
local p3=fibaro:getGlobalValue("Push"..id1.."_3")
local p2=fibaro:getGlobalValue("Push"..id1.."_2")
local p1=fibaro:getGlobalValue("Push"..id1.."_1")
fibaro:debug('Change detected in '..fibaro:getName(id1)..' with id '..id1)
local db=10
local d1=p1-p2
local d2=p2-p3
fibaro:debug('Delta 1: '..d1..' Delta 2: '..d2)
if ((d10)) then
fibaro:debug("Double click on "..fibaro:getName(id1).." detected ")
fibaro:setGlobal("Push"..id1.."_1",0)
fibaro:setGlobal("Push"..id1.."_2",0)
fibaro:setGlobal("Push"..id1.."_3",0)
--basis drukknop routine bij double click (enkel toggle, geen overeenkomst met indicator)
local currentstate = fibaro:getValue(id3, 'value')
fibaro:debug('Current state of switch '..fibaro:getName(id3)..' : '..currentstate)
if (currentstate == "0") then
fibaro:call(id3, "turnOn")
fibaro:debug("Turning ON switch "..fibaro:getName(id3))
else
fibaro:call(id3, "turnOff")
fibaro:debug("Turning OFF switch "..fibaro:getName(id3))
end
elseif ((d1>=db) and (d2==0)) then
fibaro:debug("Single click on "..fibaro:getName(id1).." detected ")
fibaro:setGlobal("Push"..id1.."_1",0)
fibaro:setGlobal("Push"..id1.."_2",0)
fibaro:setGlobal("Push"..id1.."_3",0)
--basis drukknop routine bij single click
local currentstate = fibaro:getValue(id2, 'value')
fibaro:debug('Current state of switch '..fibaro:getName(id2)..' : '..currentstate)
if ((currentstate == "0") and (fibaro:getValue(id1,'value')=="1")) then
fibaro:call(id2, "turnOn")
fibaro:debug("Turning ON switch "..fibaro:getName(id2))
else
fibaro:call(id2, "turnOff")
fibaro:debug("Turning OFF switch "..fibaro:getName(id2))
end
else
fibaro:setGlobal("Push"..id1.."_1",0)
fibaro:setGlobal("Push"..id1.."_2",0)
fibaro:setGlobal("Push"..id1.."_3",0)
end

Een reactie achterlaten

Je e-mailadres zal niet getoond worden. Vereiste velden zijn gemarkeerd met *

Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.

Translate »