Forum użytkowników automatyki budynkowej
Z-wave => Fibaro - sceny => Wątek zaczęty przez: v41n w Lipiec 18, 2016, 12:36:33 pm
-
Witam,
Szukałem, ale nigdzie nie ma konkretnego wytłumaczenia. Nawet support fibaro nie odpowiada na te pytania.
Co to są instancje? Po co są? i dlaczego następuje przekroczenie limitu instancji?
Czy jest ktoś w stanie to szczegółowo wytłumaczyć?
Jeszcze mi się nie udało zrobić sceny, która by nie przekroczyła limitu.
Jako przykład załączam zdjęcie prostej sceny, która informuje o rozbrojeniu alarmu na podstawie stanu wszystkich czujek.
Jak jest to gdzieś wyjaśnione, ale ja nie znalazłem, to proszę o link i skasowanie tematu.
Piotrek
-
Witaj.
Ponieważ to Twój pierwszy wpis na forum rozumiem, że nie chodzi o definicję słownikową instancji tylko praktyczne znaczenie tego pojęcia na HC2. Dlatego podaję Ci link do naszego dawnego forum gdzie zostawiliśmy trochę potu a konkretnie do rewelacyjnego poradnika kolegi Traktor 69 (jak to przeczyta to pozdrawiamy serdecznie i zapraszamy do nas) a zwłaszcza część 11.003 Zrób sobie kilka testów w/g jego wzoru i poczytaj temat dokładnie a będziesz oświecony praktycznie na wieki.
http://forum.fibaro.com/index.php?/topic/16652-baza-podstawowych-skrypt%C3%B3w-w-praktyce-poradnik/ (http://forum.fibaro.com/index.php?/topic/16652-baza-podstawowych-skrypt%C3%B3w-w-praktyce-poradnik/)
-
Witam,
Ok. Przeczytałem 50 razy podany wątek. Zmodyfikowałem scenę. Żeby sprawdzić co się dzieje wprowadziłem debug. Ale nadal wyskakuje mi błąd instancji. I nie mam pojęcia dlaczego ...
Poniżej podaję kod. Bardzo BARDZO proszę na podanym przykładzie wytłumaczyć mi dlaczego następuje przekroczenie instancji.
--[[
%% properties
964 armed
965 armed
967 armed
966 armed
968 armed
969 armed
988 armed
989 armed
%% events
%% globals
--]]
fibaro:debug("sceneInstance: "..fibaro:countScenes())
fibaro:debug("SCENE START --------------------------")
fibaro:debug("sceneInstance: "..fibaro:countScenes())
if fibaro:countScenes() > 1 then
fibaro:debug("SCENE ABORT --------------------------")
fibaro:abort()
end
if (( tonumber(fibaro:getValue(964, "armed")) > 0 ) and ( tonumber(fibaro:getValue(965, "armed")) > 0 ) and ( tonumber(fibaro:getValue(967, "armed")) > 0 ) and ( tonumber(fibaro:getValue(966, "armed")) > 0 ) and ( tonumber(fibaro:getValue(968, "armed")) > 0 ) and ( tonumber(fibaro:getValue(969, "armed")) > 0 ) and ( tonumber(fibaro:getValue(988, "armed")) > 0 ) and ( tonumber(fibaro:getValue(989, "armed")) > 0 )) then
fibaro:call(58, "sendDefinedPushNotification", "94");
end
Debug:
[DEBUG] 23:02:08: sceneInstance: 1
[DEBUG] 23:02:08: SCENE START --------------------------
[DEBUG] 23:02:08: sceneInstance: 1
[DEBUG] 23:02:10: sceneInstance: 1
[DEBUG] 23:02:10: SCENE START --------------------------
[DEBUG] 23:02:10: sceneInstance: 1
[DEBUG] 23:02:15: sceneInstance: 1
[DEBUG] 23:02:15: SCENE START --------------------------
[DEBUG] 23:02:15: sceneInstance: 1
[DEBUG] 23:02:17: sceneInstance: 1
[DEBUG] 23:02:17: SCENE START --------------------------
[DEBUG] 23:02:17: sceneInstance: 1
-
Uzbrajaasz pewnie wszystkie w jednym momencie w takim wypadku zawsze wyskoczy błąd instancji.
Tu jest miejsce co wchodzi do sceny.
964 armed
965 armed
967 armed
966 armed
968 armed
969 armed
988 armed
989 armed
-
Uzbrajam albo w jednym momencie albo każdą osobno w ostępach 5 sekundowych.
Dodam, że debug pokazuje tylko jedną instancję bo ustawieniach sceny ustawiłem tylko jedną.
Czyli nie ma możliwości, żeby nie pokazywało błędu instancji?
-
Po lekturze i uwagach przerobiłem kod i działa. Nie powoduje przekroczenia instancji. Dzięki za pomoc.
Niektóre linijki mogą być zbędne bo sobie testowałem. Jutro zoptymalizuje.
--[[
%% properties
964 armed
%% events
%% globals
--]]
local czas = os.time()
fibaro:debug("sceneInstance: "..fibaro:countScenes())
fibaro:debug("SCENE START --------------------------")
fibaro:debug("sceneInstance: "..fibaro:countScenes())
if fibaro:countScenes() > 1 then
fibaro:debug("SCENE ABORT --------------------------")
fibaro:abort()
fibaro:killScenes(45)
end
fibaro:debug("Start")
if tonumber(fibaro:getValue(964, "armed")) > 0 then
while true do
if os.time() - czas > 60 then
fibaro:debug("Upłynął czas")
fibaro:call(964, "setArmed", 0)
break
end
if ( tonumber(fibaro:getValue(965, "armed")) > 0 ) and ( tonumber(fibaro:getValue(967, "armed")) > 0 ) and ( tonumber(fibaro:getValue(966, "armed")) > 0 ) and ( tonumber(fibaro:getValue(968, "armed")) > 0 ) and ( tonumber(fibaro:getValue(969, "armed")) > 0 ) and ( tonumber(fibaro:getValue(988, "armed")) > 0 ) and ( tonumber(fibaro:getValue(989, "armed")) > 0 ) then
fibaro:call(58, "sendDefinedPushNotification", "94");
fibaro:call(46, "sendDefinedPushNotification", "94");
break
end
end
end
if tonumber(fibaro:getValue(964, "armed")) == 0 then
while true do
if os.time() - czas > 60 then
fibaro:debug("Upłynął czas")
break
end
if ( tonumber(fibaro:getValue(965, "armed")) == 0 ) and ( tonumber(fibaro:getValue(967, "armed")) == 0 ) and ( tonumber(fibaro:getValue(966, "armed")) == 0 ) and ( tonumber(fibaro:getValue(968, "armed")) == 0 ) and ( tonumber(fibaro:getValue(969, "armed")) == 0 ) and ( tonumber(fibaro:getValue(988, "armed")) == 0 ) and ( tonumber(fibaro:getValue(989, "armed")) == 0 ) then
fibaro:call(58, "sendDefinedPushNotification", "95");
fibaro:call(46, "sendDefinedPushNotification", "95");
break
end
end
end
fibaro:debug("Koniec")