Scena/zmienna - włącz się tylko raz o określonej porze

  • 2 Odpowiedzi
  • 4755 Wyświetleń

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

*

Offline wojtas810

  • *** 205
  • 3
  • Nazwa i wersja ID: wojtas810
Scena/zmienna - włącz się tylko raz o określonej porze
« dnia: Grudzień 14, 2017, 09:26:42 pm »
Witam

 

Potrzebuje stworzyć scenę która będzie codziennie rano pomiędzy 7.30 a 9.30 sprawdzała czy czujka ruchu jest naruszona, jeśli tak to wywoła ona jakąś reakcję, ale tylko raz dziennie.

Dlatego potrzebne na pewno jest zrobienie zmiennej która będzie zmieniała wartość po naruszeniu z 0 na 1

Niestety moje początki z Lua są trudne czy ktoś by mi mógł pomóc w uporządkowaniu aby zaczęło działać ?

 

--[[
%% properties
%% events
%% globals
--]]
if fibaro:countScenes() > 1 then
 fibaro:debug("SCENE ABORT --------------------------")
end

function toMinutes(czasHHMM)
local a
if type(czasHHMM) => "07:30"
if type(czasHHMM) =< "09:30"

end
      then
      fibaro:setGlobal("rano", "0")
      else
      fibaro:setGlobal("rano", "1")
    end
 
fibaro:sleep(60*1000)
   
end
*

Offline wojtas810

  • *** 205
  • 3
  • Nazwa i wersja ID: wojtas810
Odp: Scena/zmienna - włącz się tylko raz o określonej porze
« Odpowiedź #1 dnia: Styczeń 08, 2018, 09:34:16 pm »
W razie czego przy pomocy kolegi z innego forum udało się i działa to co wyżej chciałem

Problem pojawiał się ponieważ w jednej scenie nie dało się właczyć to czego chciałem dlatego trzeba po przez tą scenę uciekać do innej - może sie komuś to przyda.

Scena wywoływana jest tylko raz dziennie między 7.00 - 9.00 pod warunkiem ze motion wykryje ruch


--[[
%% properties
602 value
%% weather
%% events
%% globals
--]]

local motionId = 602;
local morningTime = "07:00-09:00";

local startSource = fibaro:getSourceTrigger();

function between(str)
     -- get current time
    local t = os.date("*t", os.time())
    local h1,m1,h2,m2 = str:match("(%d+):(%d+)-(%d+):(%d+)")
    m1, m2, t = h1*60+m1, h2*60+m2, t.hour*60+t.min
    if (m1 <= m2) then
      return m1 <= t and t <= m2 -- 01:00-02:00
    else
      return m1 <= t or t <= m2 -- 23:00-21:00
    end
end

function isToday()
      local when = tonumber(fibaro:getGlobalValue('I_got_up', 0));
    local daysfrom = os.difftime(os.time(), when) / (24 * 60 * 60);
    local wholedays = math.floor(daysfrom);
     
   fibaro:debug(wholedays); -- 0 today > 0 next days

     if wholedays == 0 then
      return false;
    else
        fibaro:setGlobal("I_got_up", os.time())
        return true;
    end
end

if ( ( tonumber(fibaro:getValue(motionId, "value")) > 0 ) or
     ( startSource["type"] == "other" ) ) then
 
     fibaro:debug("Motion detected!");
     -- is morning?
   if between(morningTime) then
       fibaro:debug("Morning hours");
       if isToday() then
            fibaro:debug("dowolne przejście lub właczenie inej sceny ");
         else
            fibaro:debug("Do jutra");
         end
    end
end
*

Offline Piotr B

  • ** 64
  • 0
Odp: Scena/zmienna - włącz się tylko raz o określonej porze
« Odpowiedź #2 dnia: Styczeń 20, 2018, 02:16:41 pm »
Ja to zrobiłem trochę inaczej.

U mnie bazuje to na 3 funkcjach:
1. funkcja która ustawia zmienną globalną mówiącą, że jest odpowiednia godzina do tego aby coś mogło się wykonać
2. funkcja, która wykonuje zadanie (w moim wypadku jest to załączenie oświetlenia poprzez czujkę ruchu)
3. scena która wyłącza oświetlenie i resetuje zmienna globalną

Jest to o tyle fajne, że na podstawie zmiennej globalnej mogę wykonywać kilka niezależnych scen.

Jak ktoś zainteresowany to mogę podesłać scenę zmieniającą zmienną globalną (nie zamieszczam tutaj bo jest ona niezoptymalizowana). Proszę o kontakt na priv llbpr (at) wp.pl

PiotrBr