Widzę, że nikt bardziej obeznany się jeszcze nie pofatygował by pomóc, więc ja spróbuję.
Niestety nie posiadam żadnej czujki ruchu w domu, więc nie bardzo wiem jak zrobić wyzwalacz... Z tego co widzę masz HCL, więc mam nadzieję, że LUA działa tak samo jak w HC2.
No to próbujemy... trochę na około, bo właśnie te moje drobne braki wiedzy...
Zrób scenę blokową, która uruchamia się na czujkę ruchu i niech wykonuje absolutnie cokolwiek i przerób na LUA (musi mieć akcję, bo inaczej się nie przekształci prawidłowo)
Jak już przekształcisz, to skasuj wszystko oprócz fragmentu od wyzwalaczy, czyli tej części:
--[[
%% properties
%% weather
%% events
%% globals
--]]
Tę część zostaw tak, jak się wygeneruje, nie kasuj przypadkiem linii, których tu nie widzisz, to one są najważniejsze!
Dodatkowo dopisz do tej sekcji jeszcze jedną linię:
%% killOtherInstances
Spowoduje ona przerwanie wykonywania innych instancji tej samej sceny. Później wyjaśnię dlaczego to konieczne.
I jedziemy z właściwym kodem:
local brightnessSensorID = xxx; -- zamiast xxx wpisz id sensora światła
local brightnessLevel = tonumber(fibaro:getValue(brightnessSensorID, "value"));
local lightID = xxx; -- zamiast xxx wpisz id światła, którym chcesz sterować
if (brightnessLevel > xxx) then -- zamiast xxx wpisz wartość graniczną, jaka Ci pasuje
-- jeśli będzie jaśniej niż wartość graniczna, to przerwie działanie tej sceny,
fibaro:abort();
end
fibaro:call(lightID, "turnOn");
fibaro:sleep(120000); -- 120 000 to 2 minuty podane w milisekundach
fibaro:call(lightID, "turnOff");
Zabijanie instancji sprawi, że gdy scena "śpi" i ktoś przejdzie, to wtedy stara instancja zostanie zabita i nigdy nie dojdzie do miejsca, gdzie by się znów "obudziła" i zgasiła światło. Tę akcję przejmuje świeżo utworzona instancja.
Widzę tylko jeden potencjalny problem... Jeśli zapalenie światła sprawi, że miniemy wartość graniczną i wtedy ktoś przejdzie... to światło już nie zgaśnie
Najprostszym rozwiązaniem będzie utworzenie drugiej sceny... ta może być zupełnie pozbawiona wyzwalaczy, bo będzie uruchamiana tylko z pierwszej. A to kod (bardzo krótki) drugiej sceny:
local lightID = xxx; -- zamiast xxx wpisz id światła, którym chcesz sterować
fibaro:call(lightID, "turnOn");
fibaro:sleep(120000); -- 120 000 to 2 minuty podane w milisekundach
fibaro:call(lightID, "turnOff");
I modyfikujemy pierwszą:
local brightnessSensorID = xxx; -- zamiast xxx wpisz id sensora światła
local brightnessLevel = tonumber(fibaro:getValue(brightnessSensorID, "value"));
local lightID = xxx; -- zamiast xxx wpisz id światła, którym chcesz sterować
local isLightOn = tonumber(fibaro:getValue(brightnessSensorID, "value"));
if (brightnessLevel > xxx or isLightOn == 0) then -- zamiast xxx wpisz wartość graniczną, jaka Ci pasuje
-- jeśli będzie jaśniej niż wartość graniczna, to przerwie działanie tej sceny,
-- ale tylko gdy światło jest zgaszone... przy zapalonym odświeży licznik bez względu na to jak jest jasno.
fibaro:abort();
end
local turnOffSceneID = xxx; -- zamiast xxx wpisz id drugiej sceny
fibaro:killScenes(turnOffSceneID); -- to zabije tamten licznik
fibaro:startScene(turnOffSceneID); -- to uruchomi nowy licznik
Nie modyfikuj wyzwalaczy w pierwszej scenie, tak nadal jest dobrze.
Mam nadzieję, że po kilkunastu edycjach nie przegapiłem już żadnej sytuacji brzegowej...
Trochę tutorialowo to napisałem, mam nadzieję, że się nie pogubisz