Kultowa scena budzenia umarlaków

  • 28 Odpowiedzi
  • 13182 Wyświetleń

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

*

Offline GrzegorzW

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

Offline GrzegorzW

  • ** 48
  • 0
  • Nazwa i wersja ID: HC2 4
Odp: Kultowa scena budzenia umarlaków
« Odpowiedź #16 dnia: Listopad 25, 2016, 04:33:11 pm »
Widac nikt mic nie wie? Nikt nie posiada dzialajacego skryptu?
Grzegorz
Odp: Kultowa scena budzenia umarlaków
« Odpowiedź #17 dnia: Listopad 25, 2016, 06:31:08 pm »
Czy ludziska zaglądają tu jeszcze? Czy nikt nie chce się podzielić wiedzą???
*

Offline Piotr B

  • ** 64
  • 0
Odp: Kultowa scena budzenia umarlaków
« Odpowiedź #18 dnia: 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ę
*

Offline Lesław

  • ** 40
  • 1
  • Nazwa i wersja ID: HC2 4.550
Odp: Kultowa scena budzenia umarlaków
« Odpowiedź #19 dnia: 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

 
*

Offline GrzegorzW

  • ** 48
  • 0
  • Nazwa i wersja ID: HC2 4
Odp: Kultowa scena budzenia umarlaków
« Odpowiedź #20 dnia: Listopad 26, 2016, 08:39:41 am »
podaj gdzzie i jakie zmiany ze swojej strony musze wpisac w skrypt?
Grzegorz
*

Offline GrzegorzW

  • ** 48
  • 0
  • Nazwa i wersja ID: HC2 4
Odp: Kultowa scena budzenia umarlaków
« Odpowiedź #21 dnia: Listopad 26, 2016, 10:40:03 am »
Wkleiłem Twój skrypt i mam taki komunikat. Co to oznacza?
Grzegorz
*

Offline Lesław

  • ** 40
  • 1
  • Nazwa i wersja ID: HC2 4.550
Odp: Kultowa scena budzenia umarlaków
« Odpowiedź #22 dnia: 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
*

Offline GrzegorzW

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

Offline GrzegorzW

  • ** 48
  • 0
  • Nazwa i wersja ID: HC2 4
Odp: Kultowa scena budzenia umarlaków
« Odpowiedź #24 dnia: Listopad 26, 2016, 03:05:28 pm »
to mam wstawic w miejsce ktorej lini?
if status ~= nil and status >= "1" then
Grzegorz
*

Offline GrzegorzW

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

Offline GrzegorzW

  • ** 48
  • 0
  • Nazwa i wersja ID: HC2 4
Odp: Kultowa scena budzenia umarlaków
« Odpowiedź #27 dnia: Listopad 26, 2016, 06:11:34 pm »
Zamień tą linie na wpis:
if status ~= nil and status >= "1" then
Grzegorz
*

Offline wiesiekr

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