Vi har tidigare gått igenom ett avancerat luascript som använder flera olika rörelsesensorer och timervariabler för att på ett intelligent sätt styra belysningen i våra lokaler. Det skriptet är antagligen mer avancerat än vad de flesta behöver, så här kommer den enkla varianten.

Scriptet nedan triggas av en rörelsesnsor eller en dörrsensor och använder den globala variabeln timer, och den globala variabeln night. Här kan du läsa mer om variabler, och här kan du läsa mer om hur du skapar en scen som sätter variabeln night.

Scriptet bör vara mycket lättare att förstå och modifiera än den avancerade varianten.

--[[ 
%% properties 
47 value
43 value
%% globals 
--]] 

--43 is the id of the PIR that is located outside near the door.
--47 is the door sensor that detects if the door is opened or not.

--Scene purpose 
-- IF PIR detects movement or door is opened then turn on lamp keep it on for 3 minutes -- but only do so if global variable "night" is true.. 
-- If new movement detected during the 3 minute period reset the timer to 3 minutes 


local sceneId = 16 --ID of this scene, used to detect number of instances run 
local timerEndTime = 180 --Seconds to keep the lamp turned on after PIR detects movement 
local timer = "timer" --Name of global variabel to control the timer 
local timerValue = fibaro:getGlobalValue(timer) --Current value of global variabel for timer 
local triggerValue = fibaro:getValue(43, "value") --Get PIR value that activated this scene 
local triggerValue2 = fibaro:getValue(47, "value") --Get Door sensor value that activated this scene
local lights = 42 --light to be controlled by this scene 


fibaro:debug("start, timer = " .. timerValue .. " lights = " .. fibaro:getValue(lights, "value") .. " ,triggerValue = " .. triggerValue .. ",".. triggerValue2..", night = " .. fibaro:getGlobalValue("night")) --debug 
if ( fibaro:getValue(lights, "value") == "0" and triggerValue + triggerValue2 > 0 and tonumber(fibaro:getGlobalValue("night")) > 0) then --if the lights is off, one (or both) of the trigger values is true and the night variable is true...
    fibaro:call(lights, "turnOn") --Turn lights on 
    fibaro:setGlobal(timer, timerEndTime) --Set global variabel for timer 
    while (fibaro:getGlobalValue(timer) ~= "0") do --loop until timer is 0
      timerValue = tonumber(fibaro:getGlobalValue(timer)) --Get current value of global variabel timer 
      fibaro:setGlobal(timer, timerValue-1) --Decrease global variabel for timer with 1 second 
      fibaro:debug("Loop - timer = " .. fibaro:getGlobalValue(timer)) --debug
      fibaro:sleep(1000) --Wait 1 second
    end 
    fibaro:call(lights, "turnOff") --Turn lights off 
elseif fibaro:countScenes(sceneId) > 1 then  --if scene is already running , reset the timer to 3 minutes 
    fibaro:setGlobal(timer, timerEndTime) --set global variabel for timer to 2 minutes 
    fibaro:debug("New instance, totalt = " .. fibaro:countScenes(sceneId)) --debug 
end

Som vanligt svarar vi gärna på frågor!