+7(982) 288-11-02
+7(905) 830-02-94

Автоматизация управления светом в санузле с помощью датчика открытия

Автоматизация управления светом в санузле с помощью датчика открытия

В этой статье рассмотрим универсальный сценарий автоматизации света в комнате кратковременного пребывания одного человека на основе датчика открытия. Этот сценарий подходит для таких помещений как туалет, ванная, кладовка и гардеробная.  Единственным условием правильной работы сценария должна быть привычка прикрывать дверь по окончании пользованием помещением, так как сценарий работает на основе датчика двери. Правильное расположение датчика открытия ближе к петлям двери, позволит сценарию работать даже при не до конца закрытой двери, что часто происходит на практике при пользовании туалетом, особенно когда в доме есть дети.

датчика открытия z-wave

Сценарий анализирует и обрабатывает несколько различных ситуаций, так что вы можете пользоваться помещением как с открытой дверью (уборка или мытье рук), так и с закрытой (уединение). Свет автоматически включится при открытии двери и входе в помещение, и автоматически выключится при выходе из помещения и закрытии двери. Если вы по привычке или ваши гости по незнанию включат свет вручную, то сценарий так же распознает любую ситуацию и выключит свет именно тогда когда вы выйдите из помещения и закроите дверь. Сценарий так же распознает ситуацию при ручном включении света из-за открытой двери и так же выключит свет при выходе из помещения.

В сценарии задается временной интервал, благодаря которому и различаются ситуации использования помещения с открытой или закрытой дверью (по умолчанию, timeToEnter = 7 секунд). Если в течении заданного интервала времени после открытия человек успевает закрыть за собой дверь, то контроллер поймет, что внутри кто-то есть, в противном случае он будет знать, что в помещении пусто, так как использовалось с открытой дверью .

Сценарий написан для контроллеров Fibaro Home Center 2 и Vera на встроенном языке LUA.

Для правильного функционирования сценария в Fibaro Home Center 2 необходимо в параметрах датчика открытия двери установить флажок.


Так как сценарий использует переменную Снятия/Постановки на охрану для анализа текущей ситуации.

Чтобы начать пользоваться сценарием необходимо Добавить сцену в режиме LUA 

и вставить код приведенный ниже, не забыв поменять ID устройств датчика открытия двери и выключателя в 2х местах:


-- НЕОБХОДИМО ПОМЕНЯТЬ ID УСТРОЙСТВ:

--[[

%% properties

293 value 

277 value

%% globals

--]]


-- Сценарий автоматического управления освещением в туалете, кладовке, гардеробной: 

-- Автоматическое управление светом по открытию/закрытию двери 


-- НЕОБХОДИМО ПОМЕНЯТЬ ID УСТРОЙСТВ:

doorID = 293; 

lightID = 277; 


-- Время входа, более длительное время, определит другую ситуацию (уборка, мойка рук)

timeToEnter = 7;


local light = fibaro:getValue(lightID, 'value');

local door = fibaro:getValue(doorID, 'value');

local armed, lastArmed = fibaro:get(doorID, 'armed');

local trigger = fibaro:getSourceTrigger();


if (tonumber(fibaro:countScenes())>1) then

  fibaro:debug('Kill second scene!');

  fibaro:abort();

end


if (trigger['type']=='property') then

  

  -- Сработка датчика открытия 

  if (tonumber(trigger['deviceID'])==tonumber(doorID)) then

    -- Открытие двери

    if (tonumber(door)==1) then

      fibaro:debug('Door opened.'); 

  

      if (tonumber(armed)==0) then

        fibaro:call(lightID, 'turnOn');

        fibaro:call(doorID, "forceArm");

fibaro:debug('Light on!');

      end

    -- закрытие двери

    elseif (tonumber(door)==0) then

 

      if (tonumber(armed)==1 and (os.time()-lastArmed)>=timeToEnter) then

        fibaro:call(lightID, 'turnOff');

        fibaro:call(doorID, 'setArmed', '0');

        fibaro:debug('Light off, room empty!');

      else

        fibaro:call(doorID, "forceArm");

        fibaro:debug('Someone inside!');

      end

    end

  -- Сработка света

  elseif (tonumber(trigger['deviceID'])==tonumber(lightID) and (os.time()-lastArmed)>0) then

    -- Ручное выключение света

    if (tonumber(light)==0) then

      if (tonumber(door)==0) then

        -- когда дверь закрыта

        fibaro:call(doorID, 'setArmed', '0');

      end

      fibaro:debug('Light manual off!');

    -- Ручное включение света

    elseif (tonumber(light)==1) and (tonumber(door)==1) then

      -- Ждем в течении интервала времени для входа в помещение

      fibaro:call(doorID, "forceArm");

      fibaro:call(doorID, 'setArmed', '0');

      fibaro:sleep(timeToEnter*1000);

           

      -- Проверяем состояние двери

      if (tonumber(door)==1) then

        fibaro:call(doorID, "forceArm"); 

      end      

      fibaro:debug('Light manual on');

    end

  end

end

В контроллере Vera необходимо создать новую сцену и в качестве триггеров указать датчик открытия двери и выключатель.


И вставить следующий код на LUA:


local doorID = 27

local lightID = 3 

local timeToEnter = 7

 

local SS_SID = "urn:micasaverde-com:serviceId:SecuritySensor1"

local SP_SID = "urn:upnp-org:serviceId:SwitchPower1"

 

local light = luup.variable_get(SP_SID,"Status",lightID)

local door = luup.variable_get(SS_SID, "Tripped", doorID) or "0"

local armed, lastArmed = luup.variable_get(SS_SID, "Armed", doorID)

 

function function_to_handle_sensor_change(dev_id,service, variable, old_val, new_val)

    -- door trigger

   

            if (door=="1") then

                --door open

                        if (armed=="0") then

                                   luup.call_action(SP_SID,"SetTarget",{ newTargetValue="1" },lightID)

                                   luup.variable_set(SS_SID, "Armed", "1", doorID)

                                   --light on

                        end

            elseif (door=="0") then

     --door close 

      if ((armed=="1") and (tonumber(os.difftime(os.time(),lastArmed))>=timeToEnter)) then

        luup.call_action(SP_SID,"SetTarget",{ newTargetValue="0" },lightID)

        luup.variable_set(SS_SID, "Armed", "0", doorID)

        --Light off, room empty!

      else

        luup.variable_set(SS_SID, "Armed", "1", doorID)

        --Someone inside!

      end

    end

end

 

function function_to_handle_power_state_change(dev_id,service, variable, old_val, new_val)

            if tonumber(os.time()-lastArmed)>0 then

                        if (light=="0") then

                                   if (door=="0") then

                                               luup.variable_set(SS_SID, "Armed", "0", doorID)

                                               --Light manual off!

                                   end

                        elseif (light=="1") and (door=="1") then

                                   luup.variable_set(SS_SID, "Armed", "1", doorID)

                        end

            end

end

 

luup.variable_watch("function_to_handle_sensor_change", "urn:micasaverde-com:serviceId:SecuritySensor1", "Tripped", doorID)

luup.variable_watch("function_to_handle_power_state_change", "urn:upnp-org:serviceId:SwitchPower1","Status", lightID)


Ссылка на видео с демонстрацией сценария и комментариями на нашем youtube канале.


Приятного использования!
16.10.2017

Возврат к списку