Een simpele drukknop voor dimmer met betere spreiding

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

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 »