Cześć wszystkim!
Jestem nowy na forum i nowy w temacie LUA. Walczę i szukam po forum od dłuższego czasu. Wiele problemów już rozwiązałem, ale ten zalazł mi konkretnie za skórę i potrzebuję pomocy ?
Mam scenę, która ma działać zależnie od obecności w biurze. 3 czujniki po naruszeniu zaczynają odliczać czas i jeśli zostaną naruszone ponownie, odliczają od początku. Jeśli odliczą do zera to wyłączają światła i inne rzeczy. Oznacza to, że nikogo w biurze już nie ma. Kolejne naruszenie któregoś z czujnika wywołuje efekt odwrotny, czyli wszystko się włącza.
Jest jednak jeden wyjątek, którym jest jeden z laptopów, którego nie obejmuje żaden czujnik. Jest on podpięty przez wallpluga i daje informację o zużyciu energii ~10W. Niestety nie umiem ustawić, aby po wyłączeniu laptopa scena zaczynała odliczać czas. Cały czas, bez względu na to czy jest on włączony czy nie, licznik stoi na maksymalnej wartości i nie zaczyna odliczania w dół. Zaczyna to odliczanie dopiero gdy zmieniłem wartość z "power" na "value" i dałem > 0 czyli włączony wallplug.
Na ten moment działa to w ten sposób, czyli wnioskuję, że pozostałe elementy sceny są poprawne.
Mimo wszystko nie zadowala rozwiązanie, w którym trzeba wyłączyć wallplug, żeby licznik zaczynał odliczać obecność w biurze.
Pomocy, kod poniżej
--[[
%% autostart
%% properties
70 value
657 value
694 value
775 value
%% events
%% globals
--]]
--funkcje
local czujnikbiuro = (tonumber(fibaro:getValue(70, "value")) > 0);
local czujnikwejscie = (tonumber(fibaro:getValue(657, "value")) > 0);
local czujnikmagazyn = (tonumber(fibaro:getValue(694, "value")) > 0);
local delay = 600
--włączanie zmiennej PRACA = ON
if czujnikbiuro or
czujnikwejscie or
czujnikmagazyn
then
fibaro:setGlobal("PRACA", "ON");
fibaro:debug("Witaj w salonie Fibaro");
end
--uruchamianie pracy
if
fibaro:getGlobalValue("PRACA") == "ON"
then
fibaro:call(46, "open");
fibaro:debug("Zasłona została otwarta");
fibaro:startScene(349);
fibaro:debug("Muzyka gra przez głośnik Sonos");
fibaro:startScene(530);
fibaro:debug("Automatyczne działanie ekspozycji LED włączone");
fibaro:call(16, "turnOn");
fibaro:call(15, "turnOn");
fibaro:call(17, "turnOn");
fibaro:debug("Profile LED nad stołem zostały włączone");
fibaro:call(376, "setValue", "70");
fibaro:debug("AmstLED ustawiony na 70 procent");
fibaro:call(177, "turnOn");
fibaro:debug("Telewizor włączony");
fibaro:call(420, "turnOn");
fibaro:debug("Lampa nad TV włączona");
end
--utrzymywanie stanu włączonego przez 10min bezruchu
if fibaro:getGlobalValue("PRACA") == "ON"
then
local
turnOffTime = os.time() + delay
while
turnOffTime > os.time() do
if (tonumber(fibaro:getValue(657, "value"))) > 0 or
(tonumber(fibaro:getValue(694, "value"))) > 0 or
(tonumber(fibaro:getValue(70, "value"))) > 0 or
(tonumber(fibaro:getValue(775, "value"))) > 0
then
turnOffTime = os.time() + delay
end
fibaro:debug("zwłoka: "..tostring(turnOffTime - os.time()))
fibaro:sleep(5000)
end
end
--wyłączanie pracy po 10min bezruchu
fibaro:call(46, "close");
fibaro:call(16, "turnOff");
fibaro:call(15, "turnOff");
fibaro:call(17, "turnOff");
fibaro:call(681, "turnOff");
fibaro:call(376, "turnOff");
fibaro:call(177, "turnOff");
fibaro:startScene(352);
fibaro:debug("Do widzenia");