Forum użytkowników automatyki budynkowej

Z-wave => Fibaro - sceny => Wątek zaczęty przez: richo w Marzec 24, 2015, 11:36:23 pm

Tytuł: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: richo w Marzec 24, 2015, 11:36:23 pm
Stworzona w 1 wersji przez Meryliona (który mam nadzieję do nas wkrótce dołaczy) i potem udoskonalana przeze mnie.

--[[
%% properties
4 dead
5 dead
6 dead
8 dead
9 dead
13 dead
16 dead
18 dead
22 dead
29 dead
33 dead
34 dead
35 dead
36 dead
37 dead
38 dead
39 dead
40 dead
43 dead
46 dead
52 dead
62 dead
65 dead
76 dead
77 dead
78 dead
89 dead
92 dead
95 dead
100 dead
101 dead
107 dead
110 dead
114 dead
117 dead
120 dead
127 dead
128 dead
135 dead
140 dead
146 dead
158 dead
164 dead
169 dead
172 dead
176 dead
180 dead
184 dead
187 dead
191 dead
192 dead
200 dead
205 dead
224 dead
227 dead
231 dead
234 dead
237 dead
238 dead
239 dead
240 dead
241 dead
247 dead
262 dead
269 dead
278 dead
281 dead
294 dead
298 dead
308 dead
313 dead
319 dead
324 dead
330 dead
331 dead
334 dead
335 dead
336 dead
337 dead
338 dead
339 dead
340 dead
341 dead
342 dead
343 dead
%% globals
--]]

-- powyzej wylistowane wszystkie ID urzadzen

-- ponizej powtorzone numery ID urzadzen do sprawdzania czy sa martwe
local ID = {4,5,6,8,9,13,16,18,22,29,33,34,35,36,37,38,39,40,43,46,52,62,65,76,77,78,89,92,95,100,101,107,110,114,117,120,127,128,135,140,146,158,164,169,172,176,180,184,187,191,192,200,205,224,227,231,234,237,238,239,240,241,247,262,269,278,281,294,298,308,313,319,324,330,331,334,335,336,337,338,339,340,341,342,343}
local Dead = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
local StartDead = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
local DeadTime = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}

local trigger = fibaro:getSourceTrigger()
local TriggerID = tonumber(trigger['deviceID'])
--local Value, ModificationTime, Petla, PetlaCzasStart, nrdead  = 0,0,0,0,0
local Value = 0
local ModificationTime = 0
local Petla = 0
local PetlaCzasStart = 0
local SprawdzanieStatusuNotOK = true
local Awaria = false
local Raport = ""
local DeadList = ""
local nrdead = 0

fibaro:setGlobal("nrdead", "0")
fibaro:call(223, "pressButton", "1")  --HC2 send nr dead thinkspeak

--fibaro:debug(StartDead[1]..DeadTime[1])
--fibaro:debug(Value..ModificationTime..Petla..PetlaCzasStart..nrdead)
--fibaro:debug('start'..#ID..#Dead..#StartDead..#DeadTime)

--if TriggerID ~= nil then fibaro:debug('trigger ID='..TriggerID) else fibaro:debug('trigger type='..trigger.type) end

-- jesli scena jezeli juz dziala skoncz scene
if tonumber(fibaro:countScenes()) > 1
  then fibaro:abort()  end

PetlaCzasStart = os.time()

-- program glowny zapetlony w petli while

while SprawdzanieStatusuNotOK and (os.time() - PetlaCzasStart) < 3000 do

-- ustaw zeby zakonczyc petle while w nastepnym kroku

  SprawdzanieStatusuNotOK = false

-- sprawdzanie stanu wszystkich ID

  fibaro:sleep(5000)
   
  for Petla = 1 , #ID do

-- jezeli czujnik martwy a w tabeli oznaczony jako zywy obudz 1 raz
    Value , ModificationTime = fibaro:get(ID[Petla],'dead')
     
    if fibaro:get(ID[Petla],'dead') == '1' and Dead[Petla] == 0
      then
      local name = fibaro:getName(ID[Petla]).. ' ' .. fibaro:getRoomNameByDeviceID(ID[Petla])
      --fibaro:debug('Dead: '..ID[Petla].." "..name);
      fibaro:setGlobal("deadlist", ID[Petla])
      fibaro:setGlobal("deadname", name)
      --fibaro:call(302, "pressButton", "6") --update log mysql
      nrdead = nrdead + 1
      DeadList = DeadList..ID[Petla].."\n"
      Dead[Petla] = 1
      DeadTime[Petla] = os.time()
      StartDead[Petla] = ModificationTime
      fibaro:wakeUpDeadDevice(ID[Petla])
      end

-- jezeli po minucie po pierwszej probie ciagle jest martwy sprobuj 2 raz

    if fibaro:get(ID[Petla],'dead') == '1' and Dead[Petla] == 1 and
      (os.time() - DeadTime[Petla]) > 60
      then
      Dead[Petla] = 2
      DeadTime[Petla] = os.time()
      fibaro:wakeUpDeadDevice(ID[Petla])     
      end

-- jezeli po minucie po drugiej probie ciagle jest martwy sprobuj 3 raz

    if fibaro:get(ID[Petla],'dead') == '1' and Dead[Petla] == 2 and
      (os.time() - DeadTime[Petla]) > 60
      then
      Dead[Petla] = 3
      DeadTime[Petla] = os.time()
      fibaro:wakeUpDeadDevice(ID[Petla])     
      end

-- jezelipo minucie po trzeciej probie ciagle martwy raportuj status 4

    if fibaro:get(ID[Petla],'dead') == '1' and Dead[Petla] == 3 and
      (os.time() - DeadTime[Petla]) > 60
      then
      Dead[Petla] = 4
      end

-- jezeli byl martwy a wrocil do zywych czekaj dwie minuty i raportuj jako ozywiony

    if fibaro:get(ID[Petla],'dead') == '0' and Dead[Petla] > 0 and
      (os.time() -  ModificationTime) > 120 and Dead[Petla] < 10
      then
      Dead[Petla] = Dead[Petla] + 10
      DeadTime[Petla] = ModificationTime - StartDead[Petla]
      end
   
    if fibaro:get(ID[Petla],'dead') == '1' and Dead[Petla] > 10
      then
      Dead[Petla] = 0
      end

-- jezeli jakikolwiek czujnik jest w trakcie ozywiania ustaw flage do petli while

    if Dead[Petla] > 0 and Dead[Petla] < 4
      then
      SprawdzanieStatusuNotOK = true
      end
    end
  end

-- Raport z czynnosci

if (os.time() - PetlaCzasStart) > 2990
  then
  Raport = Raport .. ' TRAGEDIA JAKAS!!!! 15 minut budzenia umarlakow!!! \n\n'
  end

for Petla = 1 , #ID do
  Value , ModificationTime = fibaro:get(ID[Petla],'dead')
  local name = fibaro:getName(ID[Petla]).. ' ' .. fibaro:getRoomNameByDeviceID(ID[Petla])
  if Dead[Petla] == 4
    then
    Awaria = true
    Raport = Raport..' AWARIA!!! Prawdziwa padlina ID : '..ID[Petla]..name..'\n'
    end
  if Dead[Petla] > 10
    then
    Raport = Raport ..' Obudzony : '..ID[Petla]..' '..name
    .. ' po ' .. tostring(Dead[Petla] - 10) ..' probie, czas smierci: '..tostring(DeadTime[Petla])..' s\n'
    Dead[Petla] = 0
    end
  if (os.time() - ModificationTime) < 6000 and Dead[Petla] < 10
    then
    --Raport = Raport..' Obudzenie : '..tostring(ID[Petla])..' '..name ..' nastapilo '..tostring(os.time() - ModificationTime)..' s temu \n'
    end
  end
 
if Awaria
  then
  --fibaro:call(idr,'sendPush','UMARLAKI - PRZECZYTAJ MEJLA')
  end

if string.len(Raport) > 0 and nrdead > 2 then
fibaro:call(2,"sendEmail","Raport budzenia umarlakow", Raport)
end

fibaro:setGlobal("nrdead", tostring(nrdead))
--fibaro:setGlobal("deadlist", DeadList)
fibaro:call(223, "pressButton", "1")  --HC2 send nr dead thinkspeak

fibaro:debug('END '..TriggerID..':'..Raport)

Tytuł: Dodatek do budzenia umarlaków - generator listy urządzeń w odpowiednim formacie
Wiadomość wysłana przez: richo w Marzec 24, 2015, 11:38:35 pm
Też stworzona prze kolegę z forum ale nie pamiętam już kogo...

--[[
%% properties

%% globals
--]]

local maxNodeID = 550
local nazwa
local spis = ''
local licznik = 0
local lista_ID = ''
local lista_pusta = ''
local lista_full = ''

for i = 0, maxNodeID do
 
  nazwa = fibaro:getName(i)
  if nazwa ~= '' and tonumber(fibaro:getValue(i, "parentID")) == 1
    then
        --inkrementacje
      fibaro:debug("urzadzenie = "..i..", czyli "..nazwa)    -- debug testowy
    spis = spis .. tostring(i) .. ' ' .. 'dead\n'
        licznik = licznik + 1
        lista_ID = lista_ID .. tostring(i) .. ','
        lista_pusta = lista_pusta .. '0,'
    end
 
  end

-- uciecie ostatniego przecinka
lista_ID = string.sub(lista_ID, 1, -2)
lista_pusta = string.sub(lista_pusta, 1, -2)

-- montaz ostatniej listy
lista_full = "local ID = {" .. lista_ID .. "}"
lista_full = lista_full .. "\n" .. "local Dead = {" .. lista_pusta .. "}"
lista_full = lista_full .. "\n" .. "local Dead = {" .. lista_pusta .. "}"
lista_full = lista_full .. "\n" .. "local DeadTime = {" .. lista_pusta .. "}"

-- wysylka listy na maila
fibaro:call(2, "sendEmail", "Lista properties", spis)
fibaro:call(2, "sendEmail", "Lista ID", lista_ID)
fibaro:call(2, "sendEmail", "Lista pusta", lista_pusta)
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: merylion w Marzec 25, 2015, 10:22:06 pm
He he,

Teraz to już jest więcej Twojego kodu niż mojego:)

Ale niestety scena jest nadal konieczna do prawidłowego działania Fibaro i pewnie tak już zostanie na wieki wieków Amen :)

Marcin
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: wiesiekr w Kwiecień 28, 2015, 04:35:20 pm
Czy komuś działa ta scena "Stworzona w 1 wersji przez Meryliona (Który mam Nadzieje do Nas wkrótce dołączy) i potem udoskonalana przeze Mnie." u mnie ciągle wywal błąd. Poprosiłem support o sprawdzenie i w odpowiedzi otrzymałem: 
Zweryfikowałem kod i problem wynika z różnych długości wektorów, proszę skontaktować się z osobą, która jest autorem skryptu, aby dostosowała go do istniejącej instalacji. Niestety nie zapewniamy kompleksowego pisania tak obszernych i specyficznych dla konkretnego systemu scen.
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: damian w Kwiecień 28, 2015, 06:20:39 pm
Czy komuś działa ta scena "Stworzona w 1 wersji przez Meryliona (Który mam Nadzieje do Nas wkrótce dołączy) i potem udoskonalana przeze Mnie." u mnie ciągle wywal błąd. Poprosiłem support o sprawdzenie i w odpowiedzi otrzymałem: 
Zweryfikowałem kod i problem wynika z różnych długości wektorów, proszę skontaktować się z osobą, która jest autorem skryptu, aby dostosowała go do istniejącej instalacji. Niestety nie zapewniamy kompleksowego pisania tak obszernych i specyficznych dla konkretnego systemu scen.
Przetłumaczę na "nasz":
Cytuj
nie ogarniamy fibaro aż tak bardzo, żeby móc wspierać tak zaawansowane skrypty - nie mamy pojęcia o co kaman we własnych produktach, a co dopiero w nie naszych skryptach!
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: viperlodz w Kwiecień 28, 2015, 08:47:32 pm
Czy komuś działa ta scena "Stworzona w 1 wersji przez Meryliona (Który mam Nadzieje do Nas wkrótce dołączy) i potem udoskonalana przeze Mnie." u mnie ciągle wywal błąd. Poprosiłem support o sprawdzenie i w odpowiedzi otrzymałem: 
Zweryfikowałem kod i problem wynika z różnych długości wektorów, proszę skontaktować się z osobą, która jest autorem skryptu, aby dostosowała go do istniejącej instalacji. Niestety nie zapewniamy kompleksowego pisania tak obszernych i specyficznych dla konkretnego systemu scen.
Przetłumaczę na "nasz":
Cytuj
nie ogarniamy fibaro aż tak bardzo, żeby móc wspierać tak zaawansowane skrypty - nie mamy pojęcia o co kaman we własnych produktach, a co dopiero w nie naszych skryptach!
Tłumaczenie bardzo dobre:) Czekam na odpowiedź odnośnie RS232. Obstawiam, że będzie podobna;)
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: richo w Kwiecień 28, 2015, 08:58:05 pm
Czy komuś działa ta scena "Stworzona w 1 wersji przez Meryliona (Który mam Nadzieje do Nas wkrótce dołączy) i potem udoskonalana przeze Mnie." u mnie ciągle wywal błąd. Poprosiłem support o sprawdzenie i w odpowiedzi otrzymałem: 
Zweryfikowałem kod i problem wynika z różnych długości wektorów, proszę skontaktować się z osobą, która jest autorem skryptu, aby dostosowała go do istniejącej instalacji. Niestety nie zapewniamy kompleksowego pisania tak obszernych i specyficznych dla konkretnego systemu scen.

Jaki konkretnie błąd Ci wywala?
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: wiesiekr w Kwiecień 28, 2015, 10:24:14 pm
Pokazuje następujący błąd
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: richo w Kwiecień 29, 2015, 07:59:04 am
Wygeneruj jeszcze raz listę urządzeń przy pomocy drugiej sceny podanej na tej stronie i podmień odpowiednio listy na początku sceny.


Sent using Tapatalk
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: wiesiekr w Kwiecień 29, 2015, 09:26:17 pm
richo miałeś rację miałem błąd w numeracji urządzeń, poprawiłem ale teraz wyskakuje błąd na końcu skryptu
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: sztywniak w Kwiecień 29, 2015, 10:02:19 pm
nie mam gdzie tego sprawdzić ale na moje oko problem jest z łączeniem typów
spróbuj tę linie zmienić na :
fibaro:debug('END '..tostring(TriggerID)..':'..Raport)
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: richo w Kwiecień 29, 2015, 10:18:04 pm
Jeżeli puszczasz scenę z ręki to zawsze wywali ten błąd bo TriggerID ustawia się na początku na podstawie ID urządzenia, które było martwe. Aktywuj scenę i zostaw. Po pewnym czasie logu zobaczysz czy działa.


Sent using Tapatalk
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: wiesiekr w Maj 15, 2015, 06:21:23 am
Dziękuje za pomoc scena działa ok.
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: GrzegorzW w Listopad 19, 2016, 09:20:31 am
Jak działa skrypt (generator listy urządzeń) bo u mnie po uruchomieniu sceny z tym skryptem nic sie nie dzieje. Czy coś trzeba zmienić w tym skrypcie?
Tytuł: Odp: Dodatek do budzenia umarlaków - generator listy urządzeń w odpowiednim formacie
Wiadomość wysłana przez: GrzegorzW w Listopad 19, 2016, 09:21:33 am
Też stworzona prze kolegę z forum ale nie pamiętam już kogo...

--[[
%% properties

%% globals
--]]

local maxNodeID = 550
local nazwa
local spis = ''
local licznik = 0
local lista_ID = ''
local lista_pusta = ''
local lista_full = ''

for i = 0, maxNodeID do
 
  nazwa = fibaro:getName(i)
  if nazwa ~= '' and tonumber(fibaro:getValue(i, "parentID")) == 1
    then
        --inkrementacje
      fibaro:debug("urzadzenie = "..i..", czyli "..nazwa)    -- debug testowy
    spis = spis .. tostring(i) .. ' ' .. 'dead\n'
        licznik = licznik + 1
        lista_ID = lista_ID .. tostring(i) .. ','
        lista_pusta = lista_pusta .. '0,'
    end
 
  end

-- uciecie ostatniego przecinka
lista_ID = string.sub(lista_ID, 1, -2)
lista_pusta = string.sub(lista_pusta, 1, -2)

-- montaz ostatniej listy
lista_full = "local ID = {" .. lista_ID .. "}"
lista_full = lista_full .. "\n" .. "local Dead = {" .. lista_pusta .. "}"
lista_full = lista_full .. "\n" .. "local Dead = {" .. lista_pusta .. "}"
lista_full = lista_full .. "\n" .. "local DeadTime = {" .. lista_pusta .. "}"

-- wysylka listy na maila
fibaro:call(2, "sendEmail", "Lista properties", spis)
fibaro:call(2, "sendEmail", "Lista ID", lista_ID)
fibaro:call(2, "sendEmail", "Lista pusta", lista_pusta)

Jak działa skrypt (generator listy urządzeń) bo u mnie po uruchomieniu sceny z tym skryptem nic sie nie dzieje. Czy coś trzeba zmienić w tym skrypcie?
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: GrzegorzW w Listopad 19, 2016, 11:11:00 am
Pomoże ktoś rozwiązać problem?

Czciałem otrzymać listę wszsytkich ID urządzeń, W tym celu wykonałem scenę z kodem:

--[[
%% properties

%% globals
--]]

local maxNodeID = 550
local nazwa
local spis = ''
local licznik = 0
local lista_ID = ''
local lista_pusta = ''
local lista_full = ''

for i = 0, maxNodeID do
 
  nazwa = fibaro:getName(i)
  if nazwa ~= '' and tonumber(fibaro:getValue(i, "parentID")) == 1
    then
        --inkrementacje
      fibaro:debug("urzadzenie = "..i..", czyli "..nazwa)    -- debug testowy
       spis = spis .. tostring(i) .. ' ' .. 'dead\n'
        licznik = licznik + 1
        lista_ID = lista_ID .. tostring(i) .. ','
        lista_pusta = lista_pusta .. '0,'
    end
 
  end

-- uciecie ostatniego przecinka
lista_ID = string.sub(lista_ID, 1, -2)
lista_pusta = string.sub(lista_pusta, 1, -2)

-- montaz ostatniej listy
lista_full = "local ID = {" .. lista_ID .. "}"
lista_full = lista_full .. "\n" .. "local Dead = {" .. lista_pusta .. "}"
lista_full = lista_full .. "\n" .. "local Dead = {" .. lista_pusta .. "}"
lista_full = lista_full .. "\n" .. "local DeadTime = {" .. lista_pusta .. "}"

-- wysylka listy na maila
fibaro:call(2, "sendEmail", "Lista properties", spis)
fibaro:call(2, "sendEmail", "Lista ID", lista_ID)
fibaro:call(2, "sendEmail", "Lista pusta", lista_pusta)

Niczego w scenie nie zmieniałem, dokładnie przekopiowałem taką jaka jest i nie otrzymałem żadnej informacji. W czym jest problem?

Kolejna sprawa to scena z budzeniem umarlaków. Scenę także przekopiowałem i zmieniłem tylko ID urządzenia. Sprawdzam to tylko na jednym urządzeniu ID 110. Gdzie jeszcze muszę wprowadzić zmiany?

Czy ktoś może sprawdzić co jest problemem?

--[[
%% properties
110 dead
%% globals
--]]

-- powyzej wylistowane wszystkie ID urzadzen

-- ponizej powtorzone numery ID urzadzen do sprawdzania czy sa martwe
local ID = {110}
local Dead = {0}
local StartDead = {0}
local DeadTime = {0}

local trigger = fibaro:getSourceTrigger()
local TriggerID = tonumber(trigger['deviceID'])
--local Value, ModificationTime, Petla, PetlaCzasStart, nrdead  = 0,0,0,0,0
local Value = 0
local ModificationTime = 0
local Petla = 0
local PetlaCzasStart = 0
local SprawdzanieStatusuNotOK = true
local Awaria = false
local Raport = ""
local DeadList = ""
local nrdead = 0

fibaro:setGlobal("nrdead", "0")
fibaro:call(223, "pressButton", "1")  --HC2 send nr dead thinkspeak

--fibaro:debug(StartDead[1]..DeadTime[1])
--fibaro:debug(Value..ModificationTime..Petla..PetlaCzasStart..nrdead)
--fibaro:debug('start'..#ID..#Dead..#StartDead..#DeadTime)

--if TriggerID ~= nil then fibaro:debug('trigger ID='..TriggerID) else fibaro:debug('trigger type='..trigger.type) end

-- jesli scena jezeli juz dziala skoncz scene
if tonumber(fibaro:countScenes()) > 1
  then fibaro:abort()  end

PetlaCzasStart = os.time()

-- program glowny zapetlony w petli while

while SprawdzanieStatusuNotOK and (os.time() - PetlaCzasStart) < 3000 do

-- ustaw zeby zakonczyc petle while w nastepnym kroku

  SprawdzanieStatusuNotOK = false

-- sprawdzanie stanu wszystkich ID

  fibaro:sleep(5000)
   
  for Petla = 1 , #ID do

-- jezeli czujnik martwy a w tabeli oznaczony jako zywy obudz 1 raz
    Value , ModificationTime = fibaro:get(ID[Petla],'dead')
     
    if fibaro:get(ID[Petla],'dead') == '1' and Dead[Petla] == 0
      then
      local name = fibaro:getName(ID[Petla]).. ' ' .. fibaro:getRoomNameByDeviceID(ID[Petla])
        --fibaro:debug('Dead: '..ID[Petla].." "..name);
      fibaro:setGlobal("deadlist", ID[Petla])
      fibaro:setGlobal("deadname", name)
      --fibaro:call(302, "pressButton", "6") --update log mysql
      nrdead = nrdead + 1
      DeadList = DeadList..ID[Petla].."\n"
      Dead[Petla] = 1
      DeadTime[Petla] = os.time()
      StartDead[Petla] = ModificationTime
      fibaro:wakeUpDeadDevice(ID[Petla])
      end

-- jezeli po minucie po pierwszej probie ciagle jest martwy sprobuj 2 raz

    if fibaro:get(ID[Petla],'dead') == '1' and Dead[Petla] == 1 and
      (os.time() - DeadTime[Petla]) > 60
      then
      Dead[Petla] = 2
      DeadTime[Petla] = os.time()
      fibaro:wakeUpDeadDevice(ID[Petla])     
      end

-- jezeli po minucie po drugiej probie ciagle jest martwy sprobuj 3 raz

    if fibaro:get(ID[Petla],'dead') == '1' and Dead[Petla] == 2 and
      (os.time() - DeadTime[Petla]) > 60
      then
      Dead[Petla] = 3
      DeadTime[Petla] = os.time()
      fibaro:wakeUpDeadDevice(ID[Petla])     
      end

-- jezelipo minucie po trzeciej probie ciagle martwy raportuj status 4

    if fibaro:get(ID[Petla],'dead') == '1' and Dead[Petla] == 3 and
      (os.time() - DeadTime[Petla]) > 60
      then
      Dead[Petla] = 4
      end

-- jezeli byl martwy a wrocil do zywych czekaj dwie minuty i raportuj jako ozywiony

    if fibaro:get(ID[Petla],'dead') == '0' and Dead[Petla] > 0 and
      (os.time() -  ModificationTime) > 120 and Dead[Petla] < 10
      then
      Dead[Petla] = Dead[Petla] + 10
      DeadTime[Petla] = ModificationTime - StartDead[Petla]
      end
   
    if fibaro:get(ID[Petla],'dead') == '1' and Dead[Petla] > 10
      then
      Dead[Petla] = 0
      end

-- jezeli jakikolwiek czujnik jest w trakcie ozywiania ustaw flage do petli while

    if Dead[Petla] > 0 and Dead[Petla] < 4
      then
      SprawdzanieStatusuNotOK = true
      end
    end
  end

-- Raport z czynnosci

if (os.time() - PetlaCzasStart) > 2990
  then
  Raport = Raport .. ' TRAGEDIA JAKAS!!!! 15 minut budzenia umarlakow!!! \n\n'
  end

for Petla = 1 , #ID do
  Value , ModificationTime = fibaro:get(ID[Petla],'dead')
  local name = fibaro:getName(ID[Petla]).. ' ' .. fibaro:getRoomNameByDeviceID(ID[Petla])
  if Dead[Petla] == 4
    then
    Awaria = true
    Raport = Raport..' AWARIA!!! Prawdziwa padlina ID : '..ID[Petla]..name..'\n'
    end
  if Dead[Petla] > 10
    then
    Raport = Raport ..' Obudzony : '..ID[Petla]..' '..name
    .. ' po ' .. tostring(Dead[Petla] - 10) ..' probie, czas smierci: '..tostring(DeadTime[Petla])..' s\n'
    Dead[Petla] = 0
    end
  if (os.time() - ModificationTime) < 6000 and Dead[Petla] < 10
    then
    --Raport = Raport..' Obudzenie : '..tostring(ID[Petla])..' '..name ..' nastapilo '..tostring(os.time() - ModificationTime)..' s temu \n'
    end
  end
 
if Awaria
  then
  --fibaro:call(idr,'sendPush','UMARLAKI - PRZECZYTAJ MEJLA')
  end

if string.len(Raport) > 0 and nrdead > 2 then
   fibaro:call(2,"sendEmail","Raport budzenia umarlakow", Raport)
end

fibaro:setGlobal("nrdead", tostring(nrdead))
--fibaro:setGlobal("deadlist", DeadList)
fibaro:call(223, "pressButton", "1")  --HC2 send nr dead thinkspeak

fibaro:debug('END '..TriggerID..':'..Raport)
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: GrzegorzW w Listopad 25, 2016, 04:33:11 pm
Widac nikt mic nie wie? Nikt nie posiada dzialajacego skryptu?
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: iBambusek w Listopad 25, 2016, 06:31:08 pm
Czy ludziska zaglądają tu jeszcze? Czy nikt nie chce się podzielić wiedzą???
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: Piotr B w Listopad 25, 2016, 10:00:25 pm
Witam,

Jakis konkretny cel posiadania listy urządzeń?

Jak by co jest fajny programik HC2 Toolkit - daje właśnie takie resultaty :)

Pozdrawiam

Piotr Br

PS - napisz na priva to podeślę
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: Lesław w Listopad 26, 2016, 08:14:10 am
Także tego...
Strasznie się pokomplikowała ta scena :)

Podrzucam dla potomności scenę budzenia umarlaków by support:
Ona jest "oszczędna" dla procka centralki ale każdy ją sobie może zrobić pod siebie :)

--[[
%% autostart
%% properties
%% globals
--]]

NB_DEVICES = 300

function wakeupDeadNodes()
    fibaro:debug('Wakeup dead nodes.')

    -- Check all devices
    for i = 1, NB_DEVICES do
        local status = fibaro:getValue(i, 'dead');
        if status >= "1" then
            fibaro:debug(i..': DEAD');
            fibaro:wakeUpDeadDevice(i)
            fibaro:sleep(5000) --check again in 5 sec
            status = fibaro:getValue(i, 'dead');
            if status >= "1" then
                fibaro:debug(i..': Really dead')
            else
                fibaro:debug(i..': Now OK')
            end
        end
    end

end

local sourceTrigger = fibaro:getSourceTrigger();
if (sourceTrigger["type"] == "autostart") then
    while true do
        fibaro:debug('Scene automatically called.')

        local currentDate = os.date("*t");

        -- Wakeup nodes only Monday-Saturday from 10:00 to 11:00
        if ((currentDate.wday >= 2 and currentDate.wday <= 7) and (currentDate.hour >= 10 and currentDate.hour <= 11 ))
        then
            fibaro:debug('Nodes automatically waked up.')
            wakeupDeadNodes()
        end

        fibaro:sleep(30*60000); -- Run every 30 minutes
    end
else

    local currentDate = os.date("*t");
    local startSource = fibaro:getSourceTrigger();
    if (startSource["type"] == "other")
    then
        wakeupDeadNodes()
    end

end

 
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: GrzegorzW w Listopad 26, 2016, 08:39:41 am
podaj gdzzie i jakie zmiany ze swojej strony musze wpisac w skrypt?
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: GrzegorzW w Listopad 26, 2016, 10:40:03 am
Wkleiłem Twój skrypt i mam taki komunikat. Co to oznacza?
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: Lesław w Listopad 26, 2016, 02:38:56 pm
Podmień tą linię:
Cytuj
if status ~= nil and status >= "1" then

Zauważ że ta scena działa tylko od 10.00 do 11.00 do poniedziałku do Soboty.
Jeśli Ci to nie wystarczy, to pogrzeb w części, która za  te godziny odpowiada:
Cytuj
       -- Wakeup nodes only Monday-Saturday from 10:00 to 11:00
        if ((currentDate.wday >= 2 and currentDate.wday <= 7) and (currentDate.hour >= 10 and currentDate.hour <= 11 ))

LUA - zacznij drążyć i uczyć się. Ja sam nie jestem programistą ale coś tam ogarniam. Trochę czasu to zajęło.

Choć zawsze jest krótsza droga. Wysyłasz zlecenie, a w odpowiedzi dostajesz kod i fakturę :)
Tu bardzo dużo ludzi pomaga ale raczej nikt za Ciebie pracy domowej nie odrobi.

Pozdro
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: GrzegorzW w Listopad 26, 2016, 02:59:13 pm
dzieki wielkie za pomoc. chetnie bym sie nauczyl ale czasu brak. gdzie sie zdobywa lub zglasza ze zleceniem odnosnie pisania
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: GrzegorzW w Listopad 26, 2016, 03:05:28 pm
to mam wstawic w miejsce ktorej lini?
if status ~= nil and status >= "1" then
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: GrzegorzW w Listopad 26, 2016, 03:38:56 pm
Podmień tą linię:
Cytuj
if status ~= nil and status >= "1" then

Zauważ że ta scena działa tylko od 10.00 do 11.00 do poniedziałku do Soboty.
Jeśli Ci to nie wystarczy, to pogrzeb w części, która za  te godziny odpowiada:
Cytuj
       -- Wakeup nodes only Monday-Saturday from 10:00 to 11:00
        if ((currentDate.wday >= 2 and currentDate.wday <= 7) and (currentDate.hour >= 10 and currentDate.hour <= 11 ))

LUA - zacznij drążyć i uczyć się. Ja sam nie jestem programistą ale coś tam ogarniam. Trochę czasu to zajęło.

Choć zawsze jest krótsza droga. Wysyłasz zlecenie, a w odpowiedzi dostajesz kod i fakturę :)
Tu bardzo dużo ludzi pomaga ale raczej nikt za Ciebie pracy domowej nie odrobi.

Pozdro


Dzięki wielkie. Już działa. Podaeślij mi namiar na tych co mówisz że piszą w LUA na zlecenie.
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: iBambusek w Listopad 26, 2016, 05:30:57 pm
U mnie po wkelejeniu tej sceny pojawia sie cos takiego

:
[DEBUG] 17:29:42: Wakeup dead nodes.
[DEBUG] 17:29:42: line 21: attempt to compare string with nil

Co muszę zmienić?
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: GrzegorzW w Listopad 26, 2016, 06:11:34 pm
Zamień tą linie na wpis:
if status ~= nil and status >= "1" then
Tytuł: Odp: Kultowa scena budzenia umarlaków
Wiadomość wysłana przez: wiesiekr w Luty 04, 2017, 03:26:13 pm
Witam.
Potrzebuje pomocy, co jest nie tak w mojej scenie że w Debug pokazuje błąd w lini 196. Co oznaczają cyfry po czasie w debug.