Stel, je hebt een drukknop die niet elektrisch gekoppeld is aan een dimmende lamp. Nu wil je die drukknop gebruiken om die lamp toch te laten aan gaan, vervolgens in een paar stappen door de dimmer te gaan en weer uit te gaan.In de vorige post hierover vond je een wiskundige spreiding voor de dimwaarden (per 25%). Nu is dit met de meeste lampen niet logisch omdat die naarmate je meer bij de 100% komt niet veel harder branden. Vandaar heb ik hier geprobeerd om wat waarden te pakken die beter uitkomen.
Onderstaand vind je de LUA code hiervoor.
Vul de waarde voor id1 met het ID van de drukknop en id2 met het ID van de schakelaar en vervang {{id1}} door het ID van de drukknop.
--[[ %% properties {{id1}} value %% events %% globals --]] local id1=xx local id2=xx fibaro:debug('Change detected in '..fibaro:getName(id1)..' with id '..id1..'. New Value: '..fibaro:getValue(id1,'value')) local currentstate = tonumber(fibaro:getValue(id2, 'value')) fibaro:debug('Current state of dimmer'..fibaro:getName(id2)..' : '..currentstate) local oldpush=fibaro:getGlobal("Push"..id1.."_1") local newpush=tonumber(os.time()) fibaro:setGlobal("Push"..id1.."_1",newpush) fibaro:debug('first push: '..oldpush..' second push: '..newpush..' delta: '..newpush-oldpush) if (currentstate == 0) then currentstate=35 elseif (currentstate == 35) then currentstate=55 elseif (currentstate == 55) then currentstate=70 elseif (currentstate == 70) then currentstate=100 elseif (currentstate >90) then currentstate=0 fibaro:call(id2, "turnOff") fibaro:debug("Setting dimmer "..fibaro:getName(id2).." to OFF") end if ((newpush-oldpush>30) and (currentstate~=10)) then currentstate=0 fibaro:call(id2, "turnOff") fibaro:debug("Setting dimmer "..fibaro:getName(id2).." to OFF") if (fibaro:getValue(id1,"value")=="1") then fibaro:setGlobal("Correct"..id1,"1") fibaro:call(id1,"turnOff") end end if (currentstate~=0) then fibaro:call(id2, "setValue",currentstate) fibaro:debug("Setting dimmer "..fibaro:getName(id2).." to level "..currentstate.." %") end
Versie 2 MET correctie van de indicator van de schakelaar.
Indien u een schakelaar die een indicator heeft gebruikt, zal de indicatie bij de standaard procedure niet meer kloppen. Om dit te corrigeren onderstaande. Hiervoor moet u in het “Variables Panel” een globale variabele aanmaken.
Globale variabele
-
- Correct{{id1}}
LUA Scene
--[[ %% properties {{id1}} value %% events %% globals --]] local id1=xx local id2=xx fibaro:debug('Change detected in '..fibaro:getName(id1)..' with id '..id1..'. New Value: '..fibaro:getValue(id1,'value')) local currentstate = tonumber(fibaro:getValue(id2, 'value')) if (fibaro:getGlobalValue("Correct"..id1)=="0") then fibaro:debug('Current state of dimmer'..fibaro:getName(id2)..' : '..currentstate) local oldpush=fibaro:getGlobal("Push"..id1.."_1") local newpush=tonumber(os.time()) fibaro:setGlobal("Push"..id1.."_1",newpush) fibaro:debug('first push: '..oldpush..' second push: '..newpush..' delta: '..newpush-oldpush) if (currentstate == 0) then currentstate=35 elseif (currentstate == 35) then currentstate=55 elseif (currentstate == 55) then currentstate=70 elseif (currentstate == 70) then currentstate=100 elseif (currentstate >90) then currentstate=0 fibaro:call(id2, "turnOff") fibaro:debug("Setting dimmer "..fibaro:getName(id2).." to OFF") if (fibaro:getValue(id1,"value")=="1") then fibaro:setGlobal("Correct"..id1,"1") fibaro:call(id1,"turnOff") end end if ((newpush-oldpush>30) and (currentstate~=10)) then currentstate=0 fibaro:call(id2, "turnOff") fibaro:debug("Setting dimmer "..fibaro:getName(id2).." to OFF") if (fibaro:getValue(id1,"value")=="1") then fibaro:setGlobal("Correct"..id1,"1") fibaro:call(id1,"turnOff") end end if (currentstate~=0) then fibaro:call(id2, "setValue",currentstate) fibaro:debug("Setting dimmer "..fibaro:getName(id2).." to level "..currentstate.." %") if (fibaro:getValue(id1,"value")=="0") then fibaro:setGlobal("Correct"..id1,"1") fibaro:call(id1,"turnOn") end end else fibaro:setGlobal("Correct"..id1,"0") end