Forum użytkowników automatyki budynkowej
Z-wave => Fibaro - skrypty itp => Wątek zaczęty przez: sztywniak w 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.
-
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))
-
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....
-
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...
-
tak, to tylko przykład dla sprawdzenia, bo szukam tego statusu.
coś mi się kojarzy jeszcze z triggerami scen. Ide szukac ;-)
-
sztywniak a może wykorzystać:
local value, modificationTime = fibaro:get(id, 'log')
tam bedziesz mial czas ostatenigo logu moze sie przydac
-
dzięki , to znam ale szukam jeszcze innej alternatywy