Forum użytkowników automatyki budynkowej
Z-wave => Fibaro - skrypty itp => Wątek zaczęty przez: michu w Kwiecień 02, 2015, 08:34:59 am
-
Witam.
scena typu BEGINER tak więc proszę o wyrozumiałość.
założenie jest takie:
Podczas otwierania i zamykania okien otrzymuję głosowy komunikat, podczas zamknięcia ostatniego okna komunikat informujący
o tym że zamknięte są wszystkie okna. Myślę że pomysł przydatny gdy zaczyna mocno wiać, można jeszcze dodać funkcje przypominająca o zamknięciu otwartych okien z warunków pogodowych itp.
kody są umieszczone w trzech oddzielnych scenach dla poszczególnych okien
i tutaj mam pytanie do zaawansowanych userów, walczyłem troszkę czasu i nie udało mi się połączyć to w jedną scenę, proszę o podpowiedź.
--[[
%% autostart
%% properties
75 value
%% globals
--]]
-- otwarcie i zamknięcie okna w salonie
local startSource = fibaro:getSourceTrigger();
if (( tonumber(fibaro:getValue(75, "value")) > 0 ) or startSource["type"] == "other")
then
fibaro:setGlobal("Komunikat", "Otwarto okno w salonie.");
fibaro:call(95, "pressButton", "1")
elseif (( tonumber(fibaro:getValue(75, "value")) == 0 ) or startSource["type"] == "other")
then
fibaro:setGlobal("Komunikat", "Zamknięto okno w salonie.");
fibaro:call(95, "pressButton", "1")
end
-----------------------------------------------------------------------------
druga scena
--[[
%% properties
71 value
%% globals
--]]
-- otwarcie i zamknięcie okna w.....
local startSource = fibaro:getSourceTrigger();
if (( tonumber(fibaro:getValue(71, "value")) > 0 ) or startSource["type"] == "other")
then
fibaro:setGlobal("Komunikat", "Otwarto okno w.....");
fibaro:call(95, "pressButton", "1")
elseif (( tonumber(fibaro:getValue(71, "value")) == 0 ) or startSource["type"] == "other")
then
fibaro:setGlobal("Komunikat", "Zamknięto okno w.....");
fibaro:call(95, "pressButton", "1")
end
--------------------------------------------------------------------------------
trzecia scena
--[[
%% properties
67 value
75 value
71 value
%% globals
--]]
-- otwarcie i zamknięcie okna w biurze
local startSource = fibaro:getSourceTrigger();
if (( tonumber(fibaro:getValue(67, "value")) > 0 ) or startSource["type"] == "other")
then
fibaro:setGlobal("Komunikat", "Otwarto okno w biurze.");
fibaro:call(95, "pressButton", "1")
elseif (( tonumber(fibaro:getValue(67, "value")) == 0 ) or startSource["type"] == "other")
then
fibaro:setGlobal("Komunikat", "Zamknięto okno w biurze.");
fibaro:call(95, "pressButton", "1")
end
if
tonumber(fibaro:getValue(75, "value")) == 0 and
tonumber(fibaro:getValue(71, "value")) == 0 and
tonumber(fibaro:getValue(67, "value")) == 0
then
fibaro:setGlobal("Komunikat", "Wszystkie okna zamknięte.");
fibaro:call(95, "pressButton", "1")
end
-
m.kokot wrzuć swoją próbę polaczenia w jedna scenę to zobaczymy gdzie jest błąd i napisz co nie działa.
Wysłane z iPad za pomocą Tapatalk
-
próby były wielokrotne z różnymi kombinacjami ifelse if else , end pomiędzy na końcu
zawsze były problemy z niewłaściwymi komunikatami do danego okna np. otwarto okno komunikat prawidłowy a jak zamykałem to samo okno to komunikat o zamknięciu np. z innego okna. Jak podzieliłem to na 3 odrębne sceny jest Ok, przy kilku oknach to nie problem ale przy większej ilości to już niezły zbiór scen.
-
Może uda Ci sie wykorzystać coś z tej sceny. Zwróć uwagę na funkcje określenia pokoju gdzie jest okno a poza tym CountScenes i abort !
Ta scena podaje informacje , w którym pokoju jest za zimno bo jest otwarte okno zbyt długo.
--[[
%% properties
142 value
160 value
174 value
181 value
186 value
271 value
280 value
300 value
%% globals
--]]
local startSource = fibaro:getSourceTrigger()
local TrigID = tonumber(startSource['deviceID'])
local temp = tonumber(fibaro:getValue(TrigID, "value"))
local room = fibaro:getRoomNameByDeviceID(TrigID)
if fibaro:countScenes() > 1
then fibaro:debug(TrigID.." "..room.." "..temp..' ABORT'); fibaro:abort()
else fibaro:debug(TrigID.." "..room.." "..temp)
end
--min tem dla sypialni i innych pokoi oprócz tych ponizej
local mintemp = 17
if room == "Grzegorza" then mintemp = 17 end
if room == "Kuchnia" then mintemp = 16 end
if room == "Łazienka góra" then mintemp = 15 end
if room == "Gościnny" then mintemp = 15 end
if temp < mintemp
then
fibaro:debug("Niska temperatura: "..temp.." C w "..room)
fibaro:setGlobal("gadaj", "Niska temperatura: "..temp.." w "..room)
fibaro:call(318, "pressButton", "1")
fibaro:call(119, "turnOn");
fibaro:call(idr, "sendPush", "Niska temperatura: "..temp.." C w "..room)
fibaro:call(idp, "sendPush", "Niska temperatura: "..temp.." C w "..room)
fibaro:sleep(900*1000) --poczekaj min 15 minut przed następnym komunikatem
end
fibaro:debug('END')
-
A tu masz jeszcze scenę, która sprawdza czy jakieś okno/drzwi z listy jest otwarte i ustawia zm. globalną. Uruchamiałem ją co 10 min z ogólnego harmonogramu:
--[[
%% properties
%% globals
--]]
windows = {22, 140, 146, 298, 184, 227, 240, 110, 263, 294}
fibaro:setGlobal("OtwarteOkno", "0")
for i = 1, #windows do
local winname = fibaro:getName(windows[i]);
if tonumber(fibaro:getValue(windows[i], "value")) > 0
then
fibaro:debug("Otwarte "..winname)
fibaro:call(idr, "sendPush", "Otwarte "..winname)
fibaro:setGlobal("gadaj", "Uwaga,, Otwarte "..winname)
fibaro:call(318, "pressButton", "1")
fibaro:setGlobal("OtwarteOkno", "1")
end
end
fibaro:sleep(1000)
if tonumber(fibaro:getGlobalValue("OtwarteOkno")) == 1
then fibaro:startScene(121) --gong alarmowy
end