Kultowa scena budzenia umarlaków

  • 28 Odpowiedzi
  • 13146 Wyświetleń

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

*

Offline richo

  • Moderator Globalny
  • ***** 146
  • 6
  • Nazwa i wersja ID: Indigo 6/HC 4.037
Kultowa scena budzenia umarlaków
« dnia: 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)

richo
*

Offline richo

  • Moderator Globalny
  • ***** 146
  • 6
  • Nazwa i wersja ID: Indigo 6/HC 4.037
Dodatek do budzenia umarlaków - generator listy urządzeń w odpowiednim formacie
« Odpowiedź #1 dnia: 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)
richo
Odp: Kultowa scena budzenia umarlaków
« Odpowiedź #2 dnia: 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
*

Offline wiesiekr

  • ** 86
  • 4
  • Nazwa i wersja ID: HC2. HCL
Odp: Kultowa scena budzenia umarlaków
« Odpowiedź #3 dnia: 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.
*

Offline damian

  • Moderator Globalny
  • ***** 82
  • 1
  • Nazwa i wersja ID: HC2
Odp: Kultowa scena budzenia umarlaków
« Odpowiedź #4 dnia: 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!
*

Offline viperlodz

  • Moderator Globalny
  • ***** 838
  • 23
  • Nazwa i wersja ID: HC3 / HC2/ HC3L / Yubii
Odp: Kultowa scena budzenia umarlaków
« Odpowiedź #5 dnia: 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;)
*

Offline richo

  • Moderator Globalny
  • ***** 146
  • 6
  • Nazwa i wersja ID: Indigo 6/HC 4.037
Odp: Kultowa scena budzenia umarlaków
« Odpowiedź #6 dnia: 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?
richo
*

Offline wiesiekr

  • ** 86
  • 4
  • Nazwa i wersja ID: HC2. HCL
Odp: Kultowa scena budzenia umarlaków
« Odpowiedź #7 dnia: Kwiecień 28, 2015, 10:24:14 pm »
Pokazuje następujący błąd
*

Offline richo

  • Moderator Globalny
  • ***** 146
  • 6
  • Nazwa i wersja ID: Indigo 6/HC 4.037
Odp: Kultowa scena budzenia umarlaków
« Odpowiedź #8 dnia: 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
richo
*

Offline wiesiekr

  • ** 86
  • 4
  • Nazwa i wersja ID: HC2. HCL
Odp: Kultowa scena budzenia umarlaków
« Odpowiedź #9 dnia: 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
*

Offline sztywniak

  • ***** 601
  • 23
  • Nazwa i wersja ID: HC2 3.60/ 4.37, Vera 1.7.1018
Odp: Kultowa scena budzenia umarlaków
« Odpowiedź #10 dnia: 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)
*

Offline richo

  • Moderator Globalny
  • ***** 146
  • 6
  • Nazwa i wersja ID: Indigo 6/HC 4.037
Odp: Kultowa scena budzenia umarlaków
« Odpowiedź #11 dnia: 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
richo
*

Offline wiesiekr

  • ** 86
  • 4
  • Nazwa i wersja ID: HC2. HCL
Odp: Kultowa scena budzenia umarlaków
« Odpowiedź #12 dnia: Maj 15, 2015, 06:21:23 am »
Dziękuje za pomoc scena działa ok.
*

Offline GrzegorzW

  • ** 48
  • 0
  • Nazwa i wersja ID: HC2 4
Odp: Kultowa scena budzenia umarlaków
« Odpowiedź #13 dnia: 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?
Grzegorz
*

Offline GrzegorzW

  • ** 48
  • 0
  • Nazwa i wersja ID: HC2 4
Odp: Dodatek do budzenia umarlaków - generator listy urządzeń w odpowiednim formacie
« Odpowiedź #14 dnia: 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?
Grzegorz