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.
Deze iets ingewikkeldere opstelling laat toe om met enkele druk op de knop het dimniveau te wisselen tussen 0=OFF ; 25% ; 50% ; 75% ; 100%. Wanneer je dubbel drukt op de knop wordt het andere toestel aan- of uitgeschakeld.
Hiertoe moet je 4 globale variabelen declareren (in het “Variables Panel”) per schakelaar en 2 LUA scenes maken.
1. Globale Variabelen
Maak er 4 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
- Correct{{id1}}
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
local correct=fibaro:getGlobalValue("Correct"..id1)
if (correct=="0") then
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(13)
else
fibaro:setGlobal("Correct"..id1,"0")
end
3. LUA script voor de schakeling
--[[ %% properties %% events %% globals --]] local id1={{id1}} -- de schakelaar local id2={{id2}} -- module 1 - dimmodule local id3={{id3}} -- module 2 - schakelmodule local correctStateOnDim=1 --correctie van de indicator op de schakelaar nodig ? 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 ((d1<db) and (d2>0)) 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) --simpele dimmer drukknop routine bij single click local currentstate = tonumber(fibaro:getValue(id2, 'value')) fibaro:debug('Current state of dimmer'..fibaro:getName(id2)..' : '..currentstate) if (currentstate <= 90) then currentstate=currentstate+25 fibaro:call(id2, "setValue",currentstate) fibaro:debug("Setting dimmer "..fibaro:getName(id2).." to level "..currentstate.." %") else currentstate=0 fibaro:call(id2, "turnOff") fibaro:debug("Setting dimmer "..fibaro:getName(id2).." to OFF") end if (correctStateOnDim==1) then if ((currentstate==0) and (fibaro:getValue(id1,"value")=="1")) then fibaro:setGlobal("Correct"..id1,"1") fibaro:call(id1,"turnOff") elseif ((currentstate~=0) and (fibaro:getValue(id1,"value")=="0")) then fibaro:setGlobal("Correct"..id1,"1") fibaro:call(id1,"turnOn") end end else fibaro:setGlobal("Push"..id1.."_1",0) fibaro:setGlobal("Push"..id1.."_2",0) fibaro:setGlobal("Push"..id1.."_3",0) end