Zapalanie i gaszenie światła za pomocą czujki Satel

  • 7 Odpowiedzi
  • 1098 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

Zapalanie i gaszenie światła za pomocą czujki Satel
« dnia: Czerwiec 07, 2018, 09:42:22 pm »
Witam

Skonfigurowałem scenę, która po zmroku zapala światło gdy czujnik ruchu systemu alarmowego jest naruszony, a gasi gdy czujnik ruchu jest nienaruszony przez 120s. Wszystko działa jednak w notyfikacjach wyświetla się komunikat dotyczący sceny gaszenia światła o przekroczonym limicie instancji. Proszę o pomoc w znalezieniu problemu.
Odp: Zapalanie i gaszenie światła za pomocą czujki Satel
« Odpowiedź #1 dnia: Lipiec 16, 2018, 09:58:20 pm »
na początek zwiększ liczbę instancji i sprawdź czy w Twoim przypadku będzie dobrze
Liczba instancji to informacja ile razy scena została aktywowana, a w przypadku wyłączenia scena jest aktywowana za każdym razem gdy czujka przejdzie w stan spoczynku (nie wykrywa ruchu) a kończy się dopiero po 120s i w tym czasie scena jest aktywowana kilkukrotnie i stąd ten komunikat
« Ostatnia zmiana: Lipiec 16, 2018, 10:02:03 pm wysłana przez jaras231 »
*

Offline Boogie

  • * 8
  • 1
    • Zobacz profil
Odp: Zapalanie i gaszenie światła za pomocą czujki Satel
« Odpowiedź #2 dnia: Lipiec 31, 2018, 08:13:06 pm »
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")
*

Offline Zelter

  • * 3
  • 0
    • Zobacz profil
  • Nazwa i wersja ID: Zelter
Odp: Zapalanie i gaszenie światła za pomocą czujki Satel
« Odpowiedź #3 dnia: Sierpień 11, 2018, 11:53:39 pm »
Boogie chcę Ci bardzo podziękować za podzielenie się tą sceną.
Dzięki Tobie rozwiązałem problem ze światłem w wiatrołapie oraz zmodyfikowałem scenę żeby tylko wyłączała światło po braku ruchu w pokoju. Moje córki zawsze zostawiają włączone światło. Jeszcze raz Dzięki.
Odp: Zapalanie i gaszenie światła za pomocą czujki Satel
« Odpowiedź #4 dnia: Październik 08, 2018, 09:13:00 pm »
Boogie również dziękuję z isNight działa OK ale jeżeli po zapaleniu światła wyłączymy je łącznikiem to scena nadal odlicza czas do wyłączenia światła i nie pozwala do jego upłynięcia ponownie załączyć przez czujnik ruchu.
« Ostatnia zmiana: Październik 08, 2018, 10:40:26 pm wysłana przez krystian_man »
*

Offline adamus

  • * 7
  • 0
    • Zobacz profil
Odp: Zapalanie i gaszenie światła za pomocą czujki Satel
« Odpowiedź #5 dnia: Listopad 04, 2018, 06:17:07 pm »
Scena super śmiga :) Ale mam jeszcze prośbę. Czy można dodać do sceny opcję czasową? Tak aby scena włączała i wyłączała się o określonych godzinach. Lub żeby włączała się o zachodzie słońca i wyłączała się o wschodzie słońca. Za pomoc z góry bardzo dziękuję.
*

Offline wojo2000

  • * 21
  • 0
    • Zobacz profil
Odp: Zapalanie i gaszenie światła za pomocą czujki Satel
« Odpowiedź #6 dnia: Listopad 07, 2018, 07:48:22 pm »
#Boogie - Dzięki!
*

Offline gomark

  • * 2
  • 0
    • Zobacz profil
Odp: Zapalanie i gaszenie światła za pomocą czujki Satel
« Odpowiedź #7 dnia: Listopad 21, 2018, 05:02:36 pm »
Proponuje troszkę zmodyfikować.

--[[
%% properties
26 value
%% globals
--]]

-- tylko jedna scena równocześnie
-----------------------------------------------------------------------------
fibaro:debug("SCENE START --------------------------")
fibaro:debug("sceneInstance: "..fibaro:countScenes())
if fibaro:countScenes() > 1
 then
 fibaro:debug("SCENE ABORT --------------------------")
 fibaro:abort()
end
-- czy globalna zmienna mówi, że światło włączone ręcznie
if (tostring(fibaro:getGlobal("manualOn")) == "true")
 then
 fibaro:debug("SCENE ABORT --------------------------")
 fibaro:abort()
end
-----------------------------------------------------------------------------
 
-- sensor ruchu
local sensorID = 26
 
-- światło
local lightID =  131

-- opóźnienie gaszenia
local delay =  30

-- czujnik światła
local lumenID =  28

-- próg natężenia światła
local lumen =  10

-- czas działania
local timeStart = '07:00'
local timeStop = '18:59'
 
local sensorMoved = (tonumber(fibaro:getValue(sensorID, "value")) > 0)
local isLightOn = (tonumber(fibaro:getValue(lightID, "value")) > 0)
 
fibaro:debug("isLightOn: "..tostring(isLightOn))
fibaro:debug("sensorMoved: "..tostring(sensorMoved))
 

---funkcje
-- funkcja zamienia czas w formacie tekstowym "HH:MM" lub os.date("*t") na liczbę minut od północy

function toMinutes(czasHHMM)
 local a
 if type(czasHHMM) == "string" then
   a = tonumber(string.sub(czasHHMM, 1, 2)) * 60 + tonumber(string.sub(czasHHMM, 4, 5))
  else   
   a = tonumber(czasHHMM.hour) * 60 + tonumber(czasHHMM.min)
 end
return a
end


------------------------------------------------------------------------------

local minStart = toMinutes(timeStart)
local minStop = toMinutes(timeStop)
local minNow = toMinutes(os.date("*t"))

local sensorMoved = (tonumber(fibaro:getValue(sensorID, "value")) > 0)
local isLightOn = (tonumber(fibaro:getValue(lightID, "value")) > 0)

fibaro:debug("isLightOn: "..tostring(isLightOn))
fibaro:debug("sensorMoved: "..tostring(sensorMoved))

------------------------------------------------------------------------------

local isTime

if (minStop >= minStart)
 then
   if (minNow >= minStart) and (minNow <= minStop)
    then isTime = true else isTime = false
   end
elseif (minStop <= minStart)
 then
  if (minNow <= minStart) and (minNow >= minStop)
    then isTime = false else isTime = true
   end
end
fibaro:debug("isTime: "..tostring(isTime))

------------------------------------------------------------------------------

local isDark
if tonumber(fibaro:getValue(lumenID, "value")) < lumen
 then
 isDark = true
else
 isDark = false
end

fibaro:debug("isDark: "..tostring(isDark))

------------------------------------------------------------------------------
 -- zapalanie światła --------------------------------------------------------
 
if (sensorMoved and isDark == true and isTime == true and isLightOn == false)
  then
  fibaro:call(lightID, "turnOn")
  fibaro:debug("Action: turnOn")
else fibaro:debug("nie spełniono warunków")
  end
 
-- gaszenie światła ---------------------------------------------------------
 
if isLightOn
  then
 
  local turnOffTime = os.time() + delay
 
  while turnOffTime > os.time()
    do
    if (tonumber(fibaro:getValue(sensorID, "value")) > 0)
      then
      turnOffTime = os.time() + delay
      end 
    fibaro:debug("DELAY: "..tostring(turnOffTime - os.time()))
    fibaro:sleep(1000)
    end
-- sprawdzenie czy światło wyłączone ręcznie podczas trwania zwłoki (zmienna globalna)
if (tostring(fibaro:getGlobal("manualOn")) == "true")
 then
 fibaro:debug("SCENE ABORT -----------MANUAL ON ACTIVATED---------------")
 fibaro:abort()
end

fibaro:call(lightID, "turnOff")
fibaro:debug("Action: turnOff")   
 
end