Funkcja włączająca z kontrolą poprawności wykonania

  • 6 Odpowiedzi
  • 4709 Wyświetleń

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

*

Offline sztywniak

  • ***** 601
  • 23
  • Nazwa i wersja ID: HC2 3.60/ 4.37, Vera 1.7.1018
Funkcja włączająca z kontrolą poprawności wykonania
« dnia: Marzec 30, 2015, 06:15:59 pm »
hejka
Rzeźbię tak od paru dni żeby jakoś zwalczyć problem martwiących się urządzeń, wymyślając coraz to inne skrypty
function wlacz(id)
  if fibaro:getValue(id, "dead")=="0" then
  fibaro:call(id, "turnOn")
  fibaro:sleep(1000)
  log=fibaro:getValue(id, "log")
  fibaro:debug(log)
      if tonumber(fibaro:getValue(id, "value")) > 0 then
        return 1
      else
        return 0
      end
    else
    fibaro:debug("budzenie")
    fibaro:call(1, "wakeUpDeadDevice",id)
      if fibaro:getValue(id, "dead")=="0" then
      fibaro:call(id, "turnOn")
      fibaro:sleep(1000)
      log=fibaro:getValue(id, "log")
      fibaro:debug(log)
         if tonumber(fibaro:getValue(id, "value")) > 0 then
           return 1
         else
           return 0
         end
      else
      return 0
      end
     end
end
wlacz(581)
taki przykładzik mały, na próbę.
ktoś kojarzy sposób na sprawdzenie statusu wykonania polecenia fibaro:call ???
w tym przykładzie sprawdzam po treści log-a ale to jest bezsensu bo ta treść pojawia się w różnym czasie od wykonania polecenia.



*

Offline richo

  • Moderator Globalny
  • ***** 146
  • 6
  • Nazwa i wersja ID: Indigo 6/HC 4.037
Odp: Funkcja włączająca z kontrolą poprawności wykonania
« Odpowiedź #1 dnia: Marzec 30, 2015, 08:46:33 pm »
Ja swego czasu stworzyłem taki skrypt, który odpalałem zawsze gdy musiałem przełączyć jednocześnie kilka urządzeń np zamknąć wszystkie rolety czy przygasic światła:


function call(id, action) --action is any string that fibaro:call() accepts
  local OK = "Transfer_was_OK"
  local dev = id..' '..fibaro:getName(id)
  local set = 0
  local val = tonumber(fibaro:getValue(id, "value"))
 
  if action == "turnOn" or action == "open" then set = 1
    elseif action == "turnOff" or action == "close" then set = 0
    else fibaro:debug('wrong action parameter'); return
  end
  --do the action if neccesary
  if  (set == 0 and val > 0) or (set == 1 and val == 0) then
    fibaro:call(id, action);
      fibaro:sleep(1000)
      log = fibaro:getValue(id, "log")
      if log == OK then
      fibaro:debug('COMM OK '..dev.." is "..action); return true
    else
      fibaro:debug('COMM ERROR '..dev.." may not "..action);
      fibaro:wakeUpDeadDevice(id);
    fibaro:sleep(2000);
      fibaro:call(id, action)
      fibaro:sleep(1000)
      log = fibaro:getValue(id, "log")
      if log == OK then fibaro:debug('COMM OK '..dev.." is "..action); return true
    else return false
        end
      end
    end
  return true
end

fibaro:debug('start')
--this is the code you enter where you want to execute confirmed call action
local ok = true
local list = {4} --list of devices ID's
for i = 1, #list do ok = call(list[i], "turnOn") and ok end
if ok == false
  then fibaro:debug('Comm Error - repeating actions')
  fibaro:sleep(10000)
  ok = true
  for i = 1, #list do ok = call(list[i], "turnOn") and ok end
end

fibaro:debug('END '..tostring(ok))
richo
*

Offline sztywniak

  • ***** 601
  • 23
  • Nazwa i wersja ID: HC2 3.60/ 4.37, Vera 1.7.1018
Odp: Funkcja włączająca z kontrolą poprawności wykonania
« Odpowiedź #2 dnia: Marzec 30, 2015, 09:01:28 pm »
właśnie o Tobie myślałem gdy to pisałem.
Rysiu może pamiętasz ale jak to kiedyś razem rozczajaliśmy to znalazłem jakiś myk , który pokazywał status.
To z logiem jest niewiarygodne, bo czas wyświetlenia zależy od zbyt wielu rzeczy i w momencie pytania może komunikatu jeszcze nie być lub już nie być
kurde za dużo postów napisałem na forum i nie mogę znaleźć, a może to na mailu było....
*

Offline richo

  • Moderator Globalny
  • ***** 146
  • 6
  • Nazwa i wersja ID: Indigo 6/HC 4.037
Odp: Funkcja włączająca z kontrolą poprawności wykonania
« Odpowiedź #3 dnia: Marzec 30, 2015, 09:09:22 pm »
Tym gdzieś raczej bawiliśmy się na majlach. Jeżeli chodzi o log to potem dodałem jeszcze jedno przełączenie i sprawdzenie logu jeżeli po 1 sek i pierwszym logu nie było odpowiedzi "Transfer_was_OK", które zwykle pojawia się po1-2 sek jeśli nastąpiło poprawne przełączenie.

PS
W Twoim kodzie nie widzę sprawdzania logu tylko jego drukowanie...
richo
*

Offline sztywniak

  • ***** 601
  • 23
  • Nazwa i wersja ID: HC2 3.60/ 4.37, Vera 1.7.1018
Odp: Funkcja włączająca z kontrolą poprawności wykonania
« Odpowiedź #4 dnia: Marzec 30, 2015, 09:20:11 pm »
tak, to tylko przykład dla sprawdzenia, bo szukam tego statusu.
coś mi się kojarzy jeszcze z triggerami scen. Ide szukac ;-)
*

Offline marecki_0luk1

  • Administratorzy
  • ***** 430
  • 26
  • Nazwa i wersja ID: HC3 5.070.42 / HC2 4.600
Odp: Funkcja włączająca z kontrolą poprawności wykonania
« Odpowiedź #5 dnia: Kwiecień 01, 2015, 10:22:26 pm »
sztywniak a może wykorzystać:
local value, modificationTime = fibaro:get(id, 'log')tam bedziesz mial czas ostatenigo logu moze sie przydac
*

Offline sztywniak

  • ***** 601
  • 23
  • Nazwa i wersja ID: HC2 3.60/ 4.37, Vera 1.7.1018
Odp: Funkcja włączająca z kontrolą poprawności wykonania
« Odpowiedź #6 dnia: Kwiecień 01, 2015, 10:39:36 pm »
dzięki , to znam ale szukam jeszcze innej alternatywy