Forum użytkowników automatyki budynkowej
Z-wave => Fibaro - skrypty itp => Wątek zaczęty przez: Pokemon w Luty 18, 2017, 06:45:22 pm
-
Witam
Chciałem utworzyć scenę która sprawdza obecność w domu . Skopiowałem kod z forum fibaro napisany przez kolegę TRAKTOR69
https://forum.fibaro.com/index.php?/topic/16652-baza-podstawowych-skrypt%C3%B3w-w-praktyce-poradnik/
który wygląda jak poniżej lecz pojawia mi się następujący błąd jak w załączniku
--[[
%% autostart
%% properties
%% globals
--]]
-- Functions -----------------------------------------------------------------
function maximum (a)
local mi -- maximum key
local m = 1 -- maximum value
for i,val in pairs(a) do
val = a
if val > m then
mi = i
m = val
end
end
return mi
end
------------------------------------------------------------------------------
while true do
delay = 30 * 60 -- zwłoka
maxId = 300 -- maksymana ilośc wszystkich urządzeń
motionSensors = {} -- deklaracja tablicy w którą wpszemy Id sensora i czas jego naruszenia
for i = 1, maxId, 1 do
if fibaro:getType(i) == "motion_sensor" -- jeżeli typ urzadzenia to sensor ruchu
then
motionSensors = fibaro:getModificationTime(i,"value") -- to ustaw klucz tabeli jako id i wartosc jako czas naruszenia
end
end
lastMotionID = maximum(motionSensors)
lastMotionTime = motionSensors[lastMotionID]
fibaro:debug("Ostatnie naruszenie (Id - czas): "..lastMotionID.." - "..os.date("%H:%M", lastMotionTime))
now = os.time()
fibaro:debug("Teraz jest: "..os.date("%H:%M",now))
fibaro:debug( "Od ostatniego naruszenia minęło: "..math.floor((now-lastMotionTime)/60).."min. i "..( (now-lastMotionTime)-math.floor((now-lastMotionTime)/60)*60 ).." sek.")
if (now-lastMotionTime) > delay
then
fibaro:setGlobal("anybodyHome", "0")
fibaro:debug("Ustawiam anybodyHome na wartość 0")
else
fibaro:setGlobal("anybodyHome", "1")
fibaro:debug("Ustawiam anybodyHome na wartość 1")
fibaro:debug("---------------------------------------------------")
end
fibaro:sleep(60 * 1000)
end
-
Na forum Fibaro na pewno znalazłeś rozwiązanie ;)
Nie mniej jednak wstawiam delikatnie poprawioną wersję tamtego skryptu.
Skrypt zamiast za każdym razem wyszukiwać które z urządzeń to czujniki ruchu, pobiera listę ze zmiennej tablicowej "Id"
W załączniki malutkie VD. małe ale przydatne :)
Pozdrawiam
--[[
%% autostart
--]]
if fibaro:countScenes() > 1 then fibaro:abort() end
local id = {
1493,14,94,1512,1511,22,1508,
}
local opoznienie = 60*60
local czujnikiRuchu = {}
function maximum (a)local mi; local m = 1; for i,val in pairs(a) do val = a[i]; if val > m then mi = i; m = val end end return mi end
function tikTak()
for i, j in pairs (id) do
czujnikiRuchu[j] = fibaro:getModificationTime(j,'value')
end
nazwaOstNarUrz = fibaro:getName(maximum(czujnikiRuchu))
czasOstNaruszenia = czujnikiRuchu[maximum(czujnikiRuchu)]
print('Ostatnie naruszenie (Nazwa - czas): '..nazwaOstNarUrz..' - '..os.date('%H:%M', czasOstNaruszenia))
teraz = os.time()
print('Teraz jest: '..os.date('%x',teraz))
print('Od ostatniego naruszenia minęło: '..math.floor((teraz-czasOstNaruszenia)/60)..'min. i '..( (teraz-czasOstNaruszenia)-math.floor((teraz-czasOstNaruszenia)/60)*60 )..' sek.')
if (teraz-czasOstNaruszenia) > opoznienie then
fibaro:setGlobal('anybodyHome', '0')
print('Ustawiam anybodyHome na wartość 0')
print('---------------------------------------------------')
else
fibaro:setGlobal('anybodyHome', nazwaOstNarUrz ..' ' .. os.date('%H:%M', czasOstNaruszenia) )
end
setTimeout(tikTak, 60*1000) end
if fibaro:getSourceTrigger()['type'] == 'autostart' then tikTak() end
-
Wielkie dzięki za pomoc wygląda na to że wszystko działa OK.
Jutro posprawdzam to na scenkach.
-
Super Działa przy okazji też skorzystałem :) :)
-
To chyba kwestia filozofii :)
Pierwotna wersja sceny jest bardziej "automatyczna", bo nie trzeba dopisywać ID nowych MSów, ewentualnie zmieniać usuniętych/dodanych z nowym ID.
Zdaje się też że nie obciąża jakoś bardzo centrali, stąd ja zostaje przy swoim. Wygoda :)
-
Tak zgadza się, lecz ten skrypt nie działa jak wcześniej pisałem. Jeżeli masz poprawiony i u ciebie działa to proszę podeślij go to sprawdzę.
-
ja mam to oczywiście z Innego Forum bo tu Ci nikt bez $$$ nie pomoże :) - albo mnie w prywatnej wiadomości o "trolowanie" oskarża - a prawda w oczy kole :) więc u mnie są dwie rzeczy
VD masz w załączniku i scena
tu proszę kod : - zauważyłem tylko ze lepiej i nie zacina sie jak jest VD i scena w tym samym pokoju:
w pozycji local ID - podstawiasz swoje numery urządzeń które mają być sprawdzane
Jest jeszcze z I N N E G O - forum fajny darmowy VD pokazu jacy wszystkie ( przepraszam Scena ) wszystkie numerki ID uradzeń i scen i powiadomień i numerów Użytkowników dla sprawniejszego poruszania się.
--[[
%% autostart
--]]
if fibaro:countScenes() > 1 then fibaro:abort() end
local id = {
154,17,320,322,100,298,300,242,233,
}
local opoznienie = 60*60
local czujnikiRuchu = {}
function maximum (a)local mi; local m = 1; for i,val in pairs(a) do val = a; if val > m then mi = i; m = val end end return mi end
function tikTak()
for i, j in pairs (id) do
czujnikiRuchu[j] = fibaro:getModificationTime(j,'value')
end
nazwaOstNarUrz = fibaro:getName(maximum(czujnikiRuchu))
czasOstNaruszenia = czujnikiRuchu[maximum(czujnikiRuchu)]
print('Ostatnie naruszenie (Nazwa - czas): '..nazwaOstNarUrz..' - '..os.date('%H:%M', czasOstNaruszenia))
teraz = os.time()
print('Teraz jest: '..os.date('%x',teraz))
print('Od ostatniego naruszenia minęło: '..math.floor((teraz-czasOstNaruszenia)/60)..'min. i '..( (teraz-czasOstNaruszenia)-math.floor((teraz-czasOstNaruszenia)/60)*60 )..' sek.')
if (teraz-czasOstNaruszenia) > opoznienie then
fibaro:setGlobal('anybodyHome', '0')
print('Ustawiam anybodyHome na wartość 0')
print('---------------------------------------------------')
else
fibaro:setGlobal('anybodyHome', nazwaOstNarUrz ..' ' .. os.date('%H:%M', czasOstNaruszenia) )
end
setTimeout(tikTak, 60*1000) end
if fibaro:getSourceTrigger()['type'] == 'autostart' then tikTak() end
UWAGA
SCENA I VD oczywiście są z innego forum więc nie mogę zgodnie z regulaminem wskazać linka i bezpośredniego autora bo spowoduje do oburzenie. Zaznaczam iż nie jest to także mojego autorstwa