Cześć,
niżej gotowa scena zapalania i gaszenia światła. Wprowadź drobne modyfikacje pod siebie i będzie OK. Używam jej w wiatrołapie. Automatycznie zapala i gasi światło po naruszeniu czujki satel lub DorWindowSensor Fibaro (dwa czujniki 'lub'). Usuń jeden i będzie OK.
Jeżeli któryś z czujników jest naruszony, odliczanie zaczyna się od nowa i zgasi światło dopiero, gdy każdy z nich będzie nienaruszony przez określony czas.
--[[
%% autostart
%% properties
2281 value
2841 value
2814 value
%% events
%% globals
--]]
-- 2018.01.09
-- Scena z 2 sensorami ruchu i 1 światłem
-----------------------------------------------------------------------------
fibaro:debug("SCENE START --------------------------")
fibaro:debug("sceneInstance: "..fibaro:countScenes())
if fibaro:countScenes() > 1 then
fibaro:debug("SCENE ABORT --------------------------")
fibaro:abort()
end
-----------------------------------------------------------------------------
local sensorID1 = 2281 -- Wiatrołap czujnik ruchu
local sensorID2 = 2841 -- Wiatrołap DWS
local lightID = 2814 -- Wiatrołap L1
local delay = 60 -- s (1 min)
-- Functions ---------------------------------------------------------------
local sensorMoved1 = (tonumber(fibaro:getValue(sensorID1, "value")) > 0);
local sensorMoved2 = (tonumber(fibaro:getValue(sensorID2, "value")) > 0);
local isLightOn = (tonumber(fibaro:getValue(lightID, "value")) > 0);
--local lclIsNight = (fibaro:getGlobalValue("isNight"));
fibaro:debug("isLightOn: "..tostring(isLightOn));
fibaro:debug("sensorMoved1: "..tostring(sensorMoved1));
fibaro:debug("sensorMoved2: "..tostring(sensorMoved2));
--fibaro:debug("isNight: "..lclIsNight);
-- zapalanie światła --------------------------------------------------------
if sensorMoved1 or sensorMoved2 --and (lclIsNight == '1')
then
fibaro:call(lightID, "turnOn") -- Relay
-- fibaro:call(lightID, "setValue", "10") -- Dimmer
fibaro:debug("Action: turnOn")
end
-- gaszenie światła ---------------------------------------------------------
if isLightOn then
local turnOffTime = os.time() + delay
while turnOffTime > os.time() do
if ((tonumber(fibaro:getValue(sensorID1, "value"))) > 0) or ((tonumber(fibaro:getValue(sensorID2, "value"))) > 0)
then turnOffTime = os.time() + delay
end
fibaro:debug("zwłoka: "..tostring(turnOffTime - os.time()))
fibaro:sleep(5000)
end
fibaro:call(lightID, "turnOff") -- Relay
-- fibaro:call(lightID, "setValue", "0") -- Dimmer
fibaro:debug("Action: turnOff")
end
-- koniec --------------------------------------------------------------------
fibaro:debug("SCENE STOP")