pomoc ze scena - Alarm

  • 2 Odpowiedzi
  • 919 Wyświetleń

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

*

Offline chez

  • * 2
  • 0
    • Zobacz profil
pomoc ze scena - Alarm
« dnia: Maj 12, 2017, 01:17:03 pm »
Witam,
Czy ma ktoś pomysł jak rozgryźć scenę która by:
- podczas uzbrajania alarmu wysyłała pusha o uzbrojeniu alarmu
- sprawdzała zamknięte/otwarte drzwi/okna i wysyłała informacje, że któreś drzwi/okna są otwarte
- sprawdzała zapalone światła, w przypadku wykrycia zapalonego światła wysyłała pusha
 
Jest ktoś w stanie pomóc ?
*

Offline viperlodz

  • Moderator Globalny
  • ***** 642
  • 19
    • Zobacz profil
  • Nazwa i wersja ID: HC2 4.180 | HC2 4.510 | HC2 4.080
Odp: pomoc ze scena - Alarm
« Odpowiedź #1 dnia: Maj 12, 2017, 01:43:59 pm »
Scenę można napisać w lua.
Obecnie można wysłać pusha z opcja np. TAK/NIE, czyli np. Czy wyłączyć światła? TAK / NIE
Większość informacji można znaleźć na forum, żeby samemu napisać coś takiego lub zlecić to komuś.
*

Offline marcinwojciesz

  • Moderator Globalny
  • ***** 115
  • 3
    • Zobacz profil
  • Nazwa i wersja ID: HC2 4.042, Sterbox
Odp: pomoc ze scena - Alarm
« Odpowiedź #2 dnia: Maj 15, 2017, 02:43:44 pm »
Kiedyś razem z marecki_0luk1 poświęciliśmy kilka wieczorów i kilka włosów - nie ukrywam nerw mojej żony był duży kiedy o 2 w nocy mrygały światła jak my testowaliśmy :)

popatrz w ten skrypcik może do czegoś Ci się przyda.

--[[
%% properties
276 value
%% globals
--]]

function sprawdz_stan(ip_IdUrzadzenia, lv_polaryzacja)
 
  local lvb_StanUrzadzenia;
  --fibaro:debug(fibaro:getName(ip_IdUrzadzenia) .. ' ' .. fibaro:getValue(ip_IdUrzadzenia, 'value'));
 
  -- w zaleznosci czy naruszony jest 0 czy 1
   
  if lv_polaryzacja == '+' then
  if tonumber(fibaro:getValue(ip_IdUrzadzenia, "value")) == 0 then
    lvb_StanUrzadzenia = false;
  else
      lvb_StanUrzadzenia = true;
  end;   
  end; 
 
  if lv_polaryzacja == '-' then
  if tonumber(fibaro:getValue(ip_IdUrzadzenia, "value")) == 1 then
    lvb_StanUrzadzenia = false;
  else
      lvb_StanUrzadzenia = true;
  end;   
  end; 
 
  return lvb_StanUrzadzenia;
end;


function powiadom(ip_IdUrzadzenia, ip_Powiadomienie)
  local lvn_EmailID = 83;
  local lvn_StanUrzadzenia;
   
    if ip_Powiadomienie == '' then     
      lvs_message = 'Urzadzenie naruszone [ID: '.. tostring(ip_IdUrzadzenia) .. '][' .. tostring(fibaro:getName(ip_IdUrzadzenia)) .. ']';
    fibaro:call(lvn_EmailID, "sendEmail", 'Fibaro - alarm', lvs_message);
    else
fibaro:call(154, "pressButton", ip_Powiadomienie);   

    end;
  return lvn_StanUrzadzenia;
end;

-- zmienne
local lvn_AlarmStan;
local lvn_AlarmID = 276;
local lva_CoUzbroic = {269, 158, 241, 231, 226};
local lva_CoWylaczyc = {190, 20, 22, 202, 186, 16, 18, 188, 204, 194, 196, 198, 200};
local lva_CoSprawdzic_plus = {};
local lva_CoSprawdzic_minus = {};

fibaro:debug('--- ALARM SCENE - uzbrajanie ---');
lvn_AlarmStan = fibaro:getValue(lvn_AlarmID, "value");
-- 1 rozbrojony
-- 0 uzbrojony
fibaro:debug('AlarmStan: ' ..tostring(lvn_AlarmStan));

if tonumber(lvn_AlarmStan) == 0 then
-- sprawdzanie
  for i = 1, # lva_CoSprawdzic_plus do
      if sprawdz_stan(lva_CoSprawdzic_plus[i], '+') then   
      powiadomID = tonumber(lva_CoSprawdzic_plus[i]);
         powiadom(powiadomID, 10);
    fibaro:setGlobal('AlarmByMM', 'Rozbrojony');

         fibaro:debug('--- Urzadzenie naruszone - zatrzymanie ---');
         fibaro:abort();
      end;
    end;
 
fibaro:debug('---Uzbrajanie alarmu ---');
  fibaro:setGlobal('AlarmByMM', 'Uzbrajany');
    powiadom(powiadomID, 7);
  fibaro:sleep(2*1000);
  powiadom(powiadomID, 8);
    fibaro:setGlobal('AlarmByMM', 'Uzbrojony');
  fibaro:debug('---Uzbrojono alarm ---');
fibaro:sleep(30*1000);     
         
    for j = 1, # lva_CoUzbroic do
    fibaro:call(lva_CoUzbroic[j] , 'setArmed', '1');
    fibaro:debug('Uzbrajanie czujki nr ' .. lva_CoUzbroic[j]);
    end;

for z = 1, # lva_CoWylaczyc do
  fibaro:debug('Wylaczam: ' .. tostring(lva_CoWylaczyc[z]));
    fibaro:call(lva_CoWylaczyc[z], 'turnOff');
end; 
 
 
elseif  tonumber(lvn_AlarmStan) == 1 then
fibaro:debug('---Rozbrajanie alarmu ---');
     
  for j = 1, # lva_CoUzbroic do
    fibaro:call(lva_CoUzbroic[j], 'setArmed', '0');
    end; 

  powiadom(powiadomID, 9);
    fibaro:setGlobal('AlarmByMM', 'Rozbrojony');
 
end;

i sprawdzanie drzwi

--[[
%% properties
158 value
%% globals
--]]

-- zmienne
local lvn_zammek_gora_id = 275;
local lvn_zammek_dol_id = 274;
local lvn_drzwi_id = 158;
local lvn_netv_id = 136;
local lvb_zammek_gora = false;
local lvb_zammek_dol = false;
local lvs_trigger = fibaro:getSourceTrigger();
local lvt_TimeNow = os.date('%H:%M', os.time());

-- pokaz czas
fibaro:debug("---- Drzwi sprawdzenie ----");
fibaro:debug(tostring(lvt_TimeNow));
fibaro:debug("---- Start ----");
-- sprawdzamy stan zamka;
fibaro:debug('Sprawdzamy stan zamków i drzwi');
fibaro:debug('drzwi: ' .. fibaro:getValue(lvn_drzwi_id, "value"));
fibaro:debug('Zamek gora: ' .. fibaro:getValue(lvn_zammek_gora_id, "value"));
fibaro:debug('Zamek dol: ' .. fibaro:getValue(lvn_zammek_dol_id, "value"));


fibaro:debug(tostring(lvs_trigger['type']));

if lvs_trigger['type'] == "other" then
  fibaro:debug('Automatyczne sprawdzenie zamkow');
  fibaro:setGlobal("lvt_LastDoorCheck",lvt_TimeNow);
elseif lvs_trigger['type'] == "property" then
fibaro:debug("Otwarcie reczne drzwi") ;
    fibaro:sleep(1000 * 60);
  fibaro:setGlobal("lvt_LastDoorCheck",lvt_TimeNow); 
end; 

if tonumber(fibaro:getValue(lvn_zammek_gora_id, "value")) ==  0 then
  lvb_zammek_gora = false;
else 
   lvb_zammek_gora = true;
end;

if tonumber(fibaro:getValue(lvn_zammek_dol_id, "value")) ==  0 then
  lvb_zammek_dol = false;
else 
   lvb_zammek_dol = true;
end;

fibaro:debug(tostring(lvb_zammek_gora) .. tostring(lvb_zammek_dol));

if lvb_zammek_gora and lvb_zammek_dol then
  -- obydwa zamki niezamkniete
  fibaro:debug('Zamki nie ok!');
    fibaro:call(lvn_netv_id, "pressButton", "13");
    fibaro:call(154, "pressButton", "6");
  end;
--[[
else
  fibaro:debug('Zamki ok!');
  fibaro:call(lvn_netv_id, "pressButton", "18");

end;
]]--
fibaro:debug('---- END ----');

Pamiętaj o zmiennej "AlarmByMM" z 4 wartościami:
1 rozbrojony
2 naruszony
3 rozbrajany
4 uzbrojony

Oczywiście 101 % sukcesu leży po stronie Marka :)