Jump to content

Welcome to Smart Home Forum by FIBARO

Dear Guest,

 

as you can notice parts of Smart Home Forum by FIBARO is not available for you. You have to register in order to view all content and post in our community. Don't worry! Registration is a simple free process that requires minimal information for you to sign up. Become a part of of Smart Home Forum by FIBARO by creating an account.

 

As a member you can:

  •     Start new topics and reply to others
  •     Follow topics and users to get email updates
  •     Get your own profile page and make new friends
  •     Send personal messages
  •     ... and learn a lot about our system!

 

Regards,

Smart Home Forum by FIBARO Team


  • 0

Notyfikacja - Alarm Panel


codeshmastah

Question

Witam,

 

chciałem zdefiniować notyfikacje, która jest wysyłana via PUSH podczas gdy Alarm jest uzbrojony.
Zadaniem tej notyfikacji jest poinformowanie mnie o wykrytym ruchu przez którąkolwiek z uzbrojonych czujek ruchu, gdy zostanie aktywowana.

Czy mogę w panelu notyfikacji pobrać nazwę czujnika który zgłosił 'breach' ?

Docelowo tekst wysylany na telefon powinien mowic: WYKRYTO RUCH NA CZUJNIKU xxxx

 

I tu pytanie, czy ten xxx można jakoś globalnie pobrać?

Please login or register to see this attachment.

Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

wszystko sie da zrobić z Fibaro, tylko ludzka wyobraźnia wyznacza granicę :)

 

Jesli zrobisz scene w lua, ktora sprawdza czy jakis sensor zostal wyzwolony (i oczywiscie czy byl alarm aktywowany, zeby tylko wtedy cos wysylac a nie ciagle), to mozesz odpytac ktory sensor byl zrodlem (fibaro:getSourceTrigger), odczytac jego nazwe i pomieszczenie i wyslac przy pomocy lua push (fibaro:call(xx, “sendPush”, “sensor” .. id .. "w pokoju" .. roomid .. "zostal wyzwolony"))

Link to comment
Share on other sites

  • 0
Guest vandi

Dopinam się do tematu bo zagadnienie bardzo podobne.

 

Jak w jednym mailu umieścić informację o naruszeniu czujek?

Z jednym naruszeniem  temat jest prosty

Ale jak wysłać maila z informacją o paru naruszeniach?

 

Wstawiam mój kod roboczy. Oczywiście jest do bani, bo wysyła tyle maili ile jest naruszeń. Ale wstawiam. Tyle dałem radę zrobić

 

local powiadomieniaMail= {2, 224, 84, 225 }
local czujnikiID = {212, 262, 1494, 1495, 1496, 1498, 1499, 1508, 1509, 1510, 1511, 1512, 1513, 1540, 1541}

urzadzNar ={}

for i,j in pairs(czujnikiID) do
            if ( tonumber(fibaro:getValue(j, "value")) > 0 )    
            then
                  urzadzNar i = j
            end
        end
                for i,j in pairs (urzadzNar) do
                for i,j in ipairs(powiadomieniaMail) do
                fibaro:call(j, "sendEmail", "Fibaro. Alarm ", "Alarm nie został uzbrojony. Naruszone: "    fibaro:getName(j).."  -  "..fibaro:getRoomNameByDeviceID(j))
                fibaro:debug("Naruszone: "fibaro:getName(j).."  -  "..fibaro:getRoomNameByDeviceID(j))
            end

Edited by vandi
Link to comment
Share on other sites

  • 0

Jeśli na zasadzie zdarzenia to czujki nigdy  nie są naruszane idealnie w tym samym czasie. Wtedy zrobiłbym to na zasadzie wysyłania gdy naruszona jest przynajmniej jedna i załączam stan innych, W takim przypadku w pętli for nie call...sendemail tylko string_a=string_a.. fibaro:getName(j).."  -  "..fibaro:getRoomNameByDeviceID(j))

a poza pętlą call...sendmail i reset string_a

Ale i tak za chwilę przyjdzie kolejny email jak potencjalny intruz się przemieści.

 

Można dodać też opóźnienie wysyłania tak aby po wystąpieniu naruszenia jednej czujki czekał i agregować dane np przez 30 sek i wysyłał zbiorówkę. Dla przechowywania stanów poszczególnych czujek użyłbym struktury json np. zmienna_stany = '{cz1stan:1, cz1czas:, cz2stan.... itd.}' można to trzymać w zmiennej local lub globalnej aby mieć podgląd na ostatni stan. json bo nie trzeba tworzyć osobnych zmiennych zależnie od ilości czujników. a zmienna_stany może się sama tworzyć na bazie czujnikiID

potem jT = json.decode(zmienna_stany)

if  jT.cz1stan == 1 and jTcz1time <....

to tak na szybko co przyszło mi do głowy, bo niestety chwilowo nie ma czasu skrobnąć kodu.

Ja miałem prostszą sytuację bo email i push wysyłam kiedy system alarmowy (prawdziwy nie HC) wysyła sygnał próby startu  odliczania czasu na uzbrojenie. Wtedy HC sprawdza stan wszystkich czujek na ten konkretny moment w oknach i wysyła zbiorówkę oraz komunikat na SONOS co nie jest zamknięte. Czyli budowa stringu w pętli a poza nią wysyłka emaila.

 

Link to comment
Share on other sites

  • 0
Guest vandi

Nie sprecyzowałem..

Mail ma być wysyłany w momencie uzbrajania .

Trzykrotne naciśnięcie switcha 2 przy drzwiach wyjściowych, wywołuje scenę:

--[[
%% properties
%% weather
%% events
%% globals
--]]
fibaro:debug("sceneInstance: "..fibaro:countScenes())
if fibaro:countScenes() > 1 then 
fibaro:abort() 
end
local a = 0

local czujnikiAll = {212, 262, 1494, 1495, 1496, 1498, 1499, 1508, 1509, 1510, 1511, 1512, 1513, 1540, 1541}
local roletyall = {74,76,78}
local syrena = 1788
local lampaWiatrID = 260
local drzwiWej = 70
local startSource = fibaro:getSourceTrigger();

--------------------------- Uzbrajanie ------------------------------------  
if startSource["type"] == "other" 
    
    then
        fibaro:call(syrena, "turnOn")
        fibaro:sleep(100)
        fibaro:call(syrena, "turnOff")
        fibaro:sleep(100)
        for i,j in ipairs(roletyall) do
            fibaro:call(j, "close") 
        end
        fibaro:sleep(10*1000)
        if (tonumber(fibaro:getValue(drzwiWej, "value")) > 0) 
          then 
            while (tonumber(fibaro:getValue(drzwiWej, "value")) > 0) do
                fibaro:sleep(5*1000)
            end
        end
        for i,j in ipairs(czujnikiAll) do
        fibaro:call(j, "setArmed", "1");
        end
        fibaro:setGlobal("alarm", "1")
        while a<2 do
            fibaro:call(syrena, "turnOn")
            fibaro:sleep(100)
            fibaro:call(syrena, "turnOff")
            fibaro:sleep(100)
            a=a+1
        end
    fibaro:sleep(2000)
     fibaro:call(lampaWiatrID, "turnOff")
     end

 
brakuje drugiej części

jeżeli któraś z czujek naruszona to nie uzbrajaj

i wyślij maile z informacją które czujniki są naruszone

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

 

 

czyli

string_a=string_a.. fibaro:getName(j).."  -  "..fibaro:getRoomNameByDeviceID(j))

a poza pętlą call...sendmail i reset string_a

 

dzięki.. pokombinuję

Edited by vandi
Link to comment
Share on other sites

  • 0
Guest vandi

Ponieważ jakoś nie wychodziło mi z Twoją sugestią @

Please login or register to see this link.

 poszperałem trochę w dokumentacji Lua

I rozwiązanie znalazłem

Funkcja table.concat łączy pozycje tabeli

I teraz działa. Wysyła w jednym mailu nazwy wszystkich naruszonych czujników.

 

if startSource["type"] == "other" 

    then
        for i,j in pairs(czujnikiID) do
            if ( tonumber(fibaro:getValue(j, "value")) > 0 )    
            then
              table.insert(urzadzNar, j)
            end
        end
              for i,j in ipairs (urzadzNar) do
              lista = fibaro:getName(j)
             end
           fibaro:call(2, "sendEmail", "Fibaro. Alarm ", "Alarm nie został uzbrojony. Naruszone: "  ..table.concat(lista, ", " ))
 

 

Link to comment
Share on other sites

  • 0

Tak Twoje zdecydowanie prostsze, zapomniałem na śmierć o table. . A przypomniałem sobie że jakiś czas temu podobna sprawa była omawiana jako przykład pisania skryptów

Może przyda Ci się tam omówione rozwiązanie

 

Edited by drboss
  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...