Forum użytkowników automatyki budynkowej
Z-wave => Fibaro - skrypty itp => Wątek zaczęty przez: Thomson w Listopad 07, 2016, 10:16:05 am
-
Witam Panowie,
mam problem z ustawieniem w bloczkach sceny, która będzie włączała światło na ruch, ale światło nie może się włączyć jeśeli jest powyżej 200 lx i nie może się włączać między godziną 19:00-7:00, dzieci śpią w tych godzinach. No i oczywiście światło jeśli włączone wyłącza się po 5 min bezczynności.
Macie pomysł jak to ogarnąć?
-
Mialem identyczny problem z lampa w salonie, rozwiazalem to za pomoca 2 scen. Na bloczkach niestety nie mam pojecia jak to zrobic, ale jesli masz HC2 to moge przeslac moje sceny.
-
To już będzie rozbudowana scena, gdzie będzie kilka warunków, taką scenę można zrealizować, ale tylko w LUA.
-
Przydałby się dział zleceń na tym forum.
-
Witam Panowie,
mam problem z ustawieniem w bloczkach sceny, która będzie włączała światło na ruch, ale światło nie może się włączyć jeśeli jest powyżej 200 lx i nie może się włączać między godziną 19:00-7:00, dzieci śpią w tych godzinach. No i oczywiście światło jeśli włączone wyłącza się po 5 min bezczynności.
Macie pomysł jak to ogarnąć?
Można zrobić to na bloczkach:
Utwórz zmienna predefiniowane np. 7-19
Ruch- naruszony i światło dzieci- off i lux-<200 i zmienna 7-19-on to światło dzieci- on-300s
Jako wyzwalacz zaznacz tylko czujnik ruchu.
-
witam - mozesz podesłac taką scene w LUA.
Pozdrawiam
Piotr Br
-
tak mam hc2. Próbowałem to robić w bloczkach, ale FGMS nie zaczęto raportuje luxy :/
-
tak mam hc2. Próbowałem to robić w bloczkach, ale FGMS nie zaczęto raportuje luxy :/
No to zmień i będzie raportować nawet co 1 lux.
Wysłane z mojego SM-G928F przy użyciu Tapatalka
-
owszem mogę ale o ile szybciej będzie pożerać baterie...
-
No to czujnik przewodowy.
Wysłane z mojego SM-G928F przy użyciu Tapatalka
-
Macie Panowie coś w LUA, co mogło by mi pomóc?
Zrobiłem tylko najprostszą scenę, która tylko wyłącza światło jeśli czujnik jest nie naruszony przez 300s i wciąż mam komunikat
"przekroczona limit instancji"
już nie wspominając, że maży mi się to co co pisałem na początku posta...ale nie wiem jak się za to zabrać :/
-
Ja mam rozwiazanie za pomoca 2 scen, jak ktos ogarnia to mozna spiac w jedna scene.
Czujka od swiatla ustawiona na wysylanie raportu przy zmianie o 20lux(parametr 40), bateria 2 lata.
Scena pierwsza wlacza swiatlo na 10 min po wykryciu ruchu, gdy wykryje ponownie ruch zaczyna odlicznie od poczatku:
--[[
%% properties
42 value
--]]
if (fibaro:countScenes() > 1) or
fibaro:getValue(42, "value") == 0
then
fibaro:debug("Scena wywolana kilkukrotnie lub czujka zmienila stan z 1 na 0")
fibaro:abort()
end
local delay = 600;
local startSource = fibaro:getSourceTriggerType();
fibaro:debug("wywolane przez ".. startSource)
if
tonumber(fibaro:getValue(42, "value")) > 0
then
fibaro:call(88, "turnOn");
fibaro:debug("Action: turnON")
end
if
( tonumber(fibaro:getValue(88, "value")) > 0 )
then
local turnOffTime = os.time() + delay
while turnOffTime > os.time() do
if tonumber(fibaro:getValue(42, "value")) > 0
then turnOffTime = os.time() + delay
end
fibaro:debug("zwłoka: "..tostring(turnOffTime - os.time()))
fibaro:sleep(30000)
end
fibaro:call(88, "turnOff");
fibaro:debug("Action: turnOFF")
end
druga scena uruchamia sie co 10 min, wlacza pierwsza scene gdy swiatlo spada ponizej 200 LUX:
--[[
%% autostart
--]]
local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
local lightSensor = tonumber(fibaro:getValue(44, "value"));
fibaro:debug("Brightness: "..lightSensor.."lux")
if
lightSensor > 200 and
fibaro:isSceneEnabled(50) == true
then
fibaro:debug("Swiatlo wiecej niz 200lux, scena i lampa OFF");
fibaro:setSceneEnabled(50, false);
fibaro:call(88, "turnOff");
elseif
lightSensor > 200 and
fibaro:isSceneEnabled(50) == false
then
fibaro:call(88, "turnOff")
fibaro:debug("Swiatlo wiecej niz 200lux i scena nieaktywna - Lampa OFF")
elseif
lightSensor < 200 and
fibaro:isSceneEnabled(50) == false
then
fibaro:debug("Swiatlo mniej niz 200lux, scena i lampa ON");
fibaro:setSceneEnabled(50, true);
fibaro:startScene(50);
elseif
lightSensor < 200 and
fibaro:isSceneEnabled(50) == true
then
fibaro:debug("Swiatlo mniej jak 200lux i scena aktywna - nic nie robie")
end
setTimeout(tempFunc, 600000)
end
if (sourceTrigger["type"] == "autostart") then
tempFunc()
end
-
Dzięki za pomoc Panowie.
Posklejałem sceny mam teraz coś takiego. Jadnak chciałbym ją jeszcze bardziej doskonalić, gdzie należy ustawić, by światło było na 30%
--[[
%% properties
47 value
65 value
%% globals
--]]
fibaro:debug("SCENE START --------------------------")
fibaro:debug("sceneInstance: "..fibaro:countScenes())
if fibaro:countScenes() > 1 then
fibaro:debug("SCENE ABORT --------------------------")
fibaro:abort()
end
local sensorID = 47
local lightID = 65
local lumenID = 62
local delay = 600
local lumen = 80
local timeStart = '10:30'
local timeStop = '19:30'
function toMinutes(czasHHMM)
local a
if type(czasHHMM) == "string" then
a = tonumber(string.sub(czasHHMM, 1, 2)) * 60 + tonumber(string.sub(czasHHMM, 4, 5))
else
a = tonumber(czasHHMM.hour) * 60 + tonumber(czasHHMM.min)
end
return a
end
local minStart = toMinutes(timeStart)
local minStop = toMinutes(timeStop)
local minNow = toMinutes(os.date("*t"))
local sensorMoved = (tonumber(fibaro:getValue(sensorID, "value")) > 0)
local isLightOn = (tonumber(fibaro:getValue(lightID, "value")) > 0)
fibaro:debug("isLightOn: "..tostring(isLightOn))
fibaro:debug("sensorMoved: "..tostring(sensorMoved))
local isTime
if (minStop >= minStart)
then
if (minNow >= minStart) and (minNow <= minStop)
then isTime = true else isTime = false
end
elseif (minStop <= minStart)
then
if (minNow <= minStart) and (minNow >= minStop)
then isTime = false else isTime = true
end
end
fibaro:debug("isTime: "..tostring(isTime))
local isDark
if tonumber(fibaro:getValue(lumenID, "value")) < lumen
then
isDark = true
else
isDark = false
end
fibaro:debug("isDark: "..tostring(isDark))
if sensorMoved and isDark and isTime
then fibaro:call(lightID, "turnOn")
fibaro:debug("Action: turnOn")
end
if isLightOn then
local turnOffTime = os.time() + delay
while turnOffTime > os.time() do
if tonumber(fibaro:getValue(sensorID, "value")) > 0
then turnOffTime = os.time() + delay
end
fibaro:debug("zwłoka: "..tostring(turnOffTime - os.time()))
fibaro:sleep(5000)
end
fibaro:call(lightID, "turnOff")
fibaro:debug("Action: turnOff")
end
fibaro:debug("SCENE STOP")
-
Musisz zmienic jedna linijke gdzie masz
fibaro:call(lightID, "turnOn")
na
fibaro:call(lightID, "setValue", "30")
-
Dzięki :)
a wiesz może czy mogę wpisać po przecinku by dwie czujki ruchu były na nasłuch ruchu?
ponieważ w scenie mam tylko jedną
-
a mała podpowiedź gdzie wpisać by te 30% było po godzinie 20
-
Witam,
Nie w tak napisanej scenie.
Jaki miałby być cel tego - jezeli jedna z czujek naruszona czy jak obie naruszone?
Bo do tego trzeba by odpwiednio przerobić jedną linię programu.
Jest jeszcze jedno pytanie - jak ma być liczone naswietlenie (w tej chwili, jest to brane z jendej czujki) - czy zostawiamy to jak jest?
Pozdrawiam
Piotr Br
-
Czy jesteś Piotrem z miasta Łodzi ;)?
Lux był by pobierany z jednej czujki.
Światło, by sie zapalało gdyby naruszenie było na jednej z 2-ch
-
dodaj jeszcze jedna zmienna SensorMoved2 z ID drugiej czujki i zmien kod
if sensorMoved and isDark and isTime
then fibaro:call(lightID, "turnOn")
fibaro:debug("Action: turnOn")
end
na taki... raczej powinno byc dobrze
if (sensorMoved
or sensorMoved2)
and isDark
and isTime
then fibaro:call(lightID, "setValue", "30")
fibaro:debug("Action: Light 30%")
end
-
dziękuje sprawdzę :)
-
Czy jesteś Piotrem z miasta Łodzi ;)?
Lux był by pobierany z jednej czujki.
Światło, by sie zapalało gdyby naruszenie było na jednej z 2-ch
Witam, Nie z Gdyni jestem :)
Pozdrawiam
Piotr Br
-
Panowie pojawił sie inny problem.
Kiedy ktoś wyłączy światło wyłącznikiem, a czas zwłoki jest cały czas odliczanie to światło się nie włączy. Ponieważ sprawdzanie jest tylko na samym początku.
Pomoglibyście mi to zmodyfikować?
-
Panowie możecie mi pomóc w modyfikacji sceny?
teraz wystarczy, że zostanie wyłączone światło kontaktem, a za minutę będzie ruch w pokoju i światło się nie włączy, ponieważ program ma odliczenie i wie, że światło jest włączone, a nie jest :)