Zapal / zgaś światła w pomieszczeniu

  • 11 Odpowiedzi
  • 7238 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

*

Offline Grzegorz

  • * 10
  • 2
    • Zobacz profil
Zapal / zgaś światła w pomieszczeniu
« dnia: Marzec 25, 2015, 09:10:48 pm »
Poniżej znajdziecie prosty kod sceny opartej na LUA, który jest dobrym początkiem zabaw z programowaniem w tym języku. Przy okazji daje banalną, ale bardzo użyteczną funkcję.

Działanie skryptu jest trywialne:
- Reaguje na potrójne kliknięcie przycisku Dimmera.
- Jeżeli świeci się chociaż jedno światło z listy, gasi je.
- Jeżeli nie świeci się ani jedno światło z listy, zapala wszystkie światła.
- Przycisk, który jest użyty do aktywacji jest ignorowany przy sprawdzaniu stanu świateł. Dzięki temu jeśli po wejściu do pomieszczenia zapalicie tylko najbliższe, potrójny klik zapali wszystkie pozostałe.

Instalacja jest dość prosta:
- Należy stworzyć scenę opartą na LUA i wkleić kod poniżej.
- W kodzie należy podmienić w dwóch miejscach ID urządzeń (w linijkach ze "sceneActivation" i w tabeli "lights_table").
- Jeżeli ostatnio robiliście upgrade do najnowszej bety (4.0x), należy zrobić miękką rekonfigurację każdego biorącego udział w scenie urządzenia.
- W każdym urządzeniu sterującym światłem należy w zakładce "Zaawansowane" uaktywnić funkcję potrójnego kliknięcia (jest na końcu listy).

Osobiście mam kilka kopii tej sceny do zapalania / gaszenia świateł, np.:
- na wysokiej klatce schodowej (ulga jak widzicie z parteru, że zostawiliście zapalone na poddaszu),
- w salonie (zastępuje klonowanie w każdym miejscu zyliona przycisków do różnych lamp i lampeczek),
- w sypialni (nie trzeba wstawać żeby przyciskiem lampki nocnej zgasić wszystko inne).

Pomimo kilku dużo bardziej zaawansowanych gadżetów, to rozwiązanie spowodowało w domu w końcu reakcję "o! w końcu do czegoś to Fibaro się przyda" ;-)

--[[
%% properties
150 sceneActivation
161 sceneActivation
170 sceneActivation
176 sceneActivation
%% globals
--]]

-- 1st floor, basement, red stairs, attic
local lights_table = {150, 161, 170, 176}

local trigger = fibaro:getSourceTrigger()
if (trigger['type'] ~= "property") then
  fibaro:debug ("Unexpected source trigger '" .. trigger['type'] .. "'")
  fibaro:abort ();
end

local switch_id = tonumber (trigger['deviceID'])
local scene = tonumber (fibaro:getValue (switch_id, "sceneActivation"))
local lights_status = 0
local light_id

if (scene == 15) then -- triple click
for light_id in ipairs(lights_table) do
if lights_table[light_id] ~= switch_id then -- skip the one related to the button pressed
lights_status = lights_status + tonumber(fibaro:getValue(lights_table[light_id], "value"))
end
end
if lights_status > 0 then
-- turn the lights off
for light_id in ipairs(lights_table) do
fibaro:call(lights_table[light_id], 'turnOff')
end
else
-- turn the lights on
for light_id in ipairs(lights_table) do
fibaro:call(lights_table[light_id], 'turnOn')
end
end
end

lights_table = nil
trigger = nil
Odp: Zapal / zgaś światła w pomieszczeniu
« Odpowiedź #1 dnia: Marzec 25, 2015, 10:41:35 pm »
No tak od czegoś trzeba zacząć.

Ja jako zawodowy automatyk (przemysłowy) podszedłem do sprawy od innej strony.
Ponieważ miałem możliwość zrobienia okablowania w mieszkaniu od nowa postanowiłem pociągnąć od klawiszy tylko skrętkę do rozdzielnicy.
Pod klawisze mam podłączone UBSy. Dzięki temu zyskuję nieograniczoną możliwość rozpoznania kombinacji wciskania klawiszy (kolejność, jednoczesność, długość itd). Wtedy dopiero są wykonywane odpowiednie akcje w systemie.

Niestety jak to w przyrodzie jest coś za coś. Jak leży mi centrala lub są opoźnienia w komunikacji Z-Wave natychmiast otrzymuję o tym komunikat : "co jest do k..... nędzy znowu się swiatło nie zapaliło " :) Głośność komunikatu wzrasta oraz dodawane są dodatkowe elementy - piiii piiiiii piiiii z częstotliwością raz w miesiącu :)

Więc muszę się przesiąść na coś co mogę w razie czego zduplikować i w razie czego podmienić centralę na klona. Bo teraz żyję w stresie, że jak walnie centrala to będę w głebokiej d.....

Na moje nieszczęście dość często wyjeżdzam do pracy na 3-4 tygodnie i jakby takie coś się zdarzyło zaraz po moim wyjeździe to pewnie nie miałbym po co wracać do domu.

Pozdrawiam

Marcin

W razie tragedii będę błagał Richa o pomoc bo on mieszka niedaleko ode mnie. Ciekawe ile by mnie skosił za serwis? :)
 
*

Offline sztywniak

  • ***** 600
  • 22
    • Zobacz profil
  • Nazwa i wersja ID: HC2 3.60/ 4.37, Vera 1.7.1018
Odp: Zapal / zgaś światła w pomieszczeniu
« Odpowiedź #2 dnia: Marzec 25, 2015, 10:44:00 pm »

W razie tragedii będę błagał Richa o pomoc bo on mieszka niedaleko ode mnie. Ciekawe ile by mnie skosił za serwis? :)
to zależy od tego jaką masz żoneczkę ;-)
*

Offline sztywniak

  • ***** 600
  • 22
    • Zobacz profil
  • Nazwa i wersja ID: HC2 3.60/ 4.37, Vera 1.7.1018
Odp: Zapal / zgaś światła w pomieszczeniu
« Odpowiedź #3 dnia: Marzec 25, 2015, 11:41:03 pm »
a tak serio to trochę "nietypowe" rozwiązanie.
Jak to dokładnie działa ?
UBS rejestruje naciśnięcie - wysyła do centrali - centrala załącza switcha ???
*

Offline marecki_0luk1

  • Administratorzy
  • ***** 366
  • 18
    • Zobacz profil
  • Nazwa i wersja ID: HC2 4.100
Odp: Zapal / zgaś światła w pomieszczeniu
« Odpowiedź #4 dnia: Marzec 26, 2015, 12:36:35 am »
sztywniak dokładnie tak :)
poniżej całość czyli one, double, triple click....

-[[
%% properties
2440 sceneActivation
%% globals
--]]

-- Device IDs that should be turned off when AllOnOff button pressed
allDevices = {1910}
allBlinds = {43, 44, 46, 47,49, 1915}


local trigger = fibaro:getSourceTrigger();
if (trigger['type'] ~= "property") then
  fibaro:debug ("Unexpected source trigger '" .. trigger['type'] .. "'");
  fibaro:abort ();
end

local id = 2440;
local scene = tonumber (fibaro:getValue (id, "sceneActivation"));

-- pojedyncze klikniecie
if (scene == 10) then

  for i = 1, # allBlinds do
    fibaro:call (allBlinds[i], "close");
  end
end

-- podwojne klikniecie
if (scene == 14) then

  for i = 1, # allDevices do
    fibaro:call (allDevices[i], "turnOn");
  end
end

-- potrojne klikniecie
if (scene == 15) then

  for i = 1, # allDevices do
    fibaro:call(1902, "pressButton", "1")
  end
end

-- pojedyncze klikniecie
if (scene == 20) then

  for i = 1, # allBlinds do
    fibaro:call (allBlinds[i], "open");
  end
end


-- podwojne klikniecie
if (scene == 24) then

  for i = 1, # allDevices do
    fibaro:call (allDevices[i], "turnOff");
  end
end

« Ostatnia zmiana: Marzec 26, 2015, 12:38:23 am wysłana przez marecki_0luk1 »
*

Offline damian

  • Moderator Globalny
  • ***** 82
  • 1
    • Zobacz profil
  • Nazwa i wersja ID: HC2
Odp: Zapal / zgaś światła w pomieszczeniu
« Odpowiedź #5 dnia: Marzec 26, 2015, 08:48:01 am »
Ja wykorzystałem "SceneActivation" na pimpku do zrobienia "PanicButton" w domofonie. Zwykły stary domofon na ścianie, miał jeden niewykorzystany przycisk - wsadziłem tam pimpka, mierzy temperaturę w salonie i reaguje na podwójne i potrójne kliknięcie - zamyka wszystkie rolety (trzy kliki), bądź je otwiera (dwa kliki). A jako że domofon wisi w centralnym punkcie domu, używane jest codziennie rano i wieczorem. :)

Miałem tylko problem z pojedynczym klikiem, załączał się nawet jak klikałem dwa i trzy razy, więc z tej opcji zrezygnowałem.
*

Offline marecki_0luk1

  • Administratorzy
  • ***** 366
  • 18
    • Zobacz profil
  • Nazwa i wersja ID: HC2 4.100
Odp: Zapal / zgaś światła w pomieszczeniu
« Odpowiedź #6 dnia: Marzec 26, 2015, 09:28:33 am »
damian zobacz sobie u mnie kod - bo ja mam w kilku miejscach pod wlacznikami pimpi wlasnie do "globalnego" sterowania i pojedyncze klikniecie dziala ok...
chociaz pewnie tak to wlasnie zrobiles :)
Odp: Zapal / zgaś światła w pomieszczeniu
« Odpowiedź #7 dnia: Marzec 26, 2015, 09:00:17 pm »
Sztywniak,

Ano wiem, że jest nietypowe:)
Podejrzewam, że 99% instalacji Fibaro opiera się na istniejącej już instalacji elektrycznej.
Ja robiąc kapitalny remont od wszystkich punktów (światła, klawisze) pociągnąłem kable do jednego miejsca.

Jak pisałem pod klawisze chwilowe podpiałem UBSy (mam ich w mieszkaniu 14 sztuk).

Sceny są odpalane na zasadzie %% properties - value. Tak więc normalnie nie działają żadne sceny (o przepraszam jest jedna scena wykonywana non stop ale ona obsługuje inne rzeczy jak na przykład zapisane z tableta zadania do wykonania)

Po odpaleniu sceny uruchamiam sobie jeszcze jedną scenę zwiększającą o 1 wartość jednej zmiennej globalnej co 100ms działającą jako timer do rozpoznawania momentu i długości wciśnięcia klawiszy - bo timer systemowy ma rozdzielczość tylko 1 sekundy.

No i trzymam scenę uruchomioną dopóki nie zobaczę puszczonych wszystkich klawiszy w jednej lokalizacji np w salonie.
No i tak skrypt zapisuje i analizuje moment i czas wciśnięcia dla wszystkich klawiszy w danej lokalizacji.

Dla przykładu mam tak:

W salonie mam ramkę z pojedynczym klawiszem i pod nim ramkę z dwoma klawiszami.

Wciśnięcie na krótko lewego klawisza (mniej niż 0,3s) powoduje zmianę stanu światła głównego na przeciwny
Wciśnięcie na dłużej lewego klawisza (więcej niż 0,3s) powoduje zmianę stanu światła nad sofą
Wciśnięcie na krótko prawego klawisza (mniej niż 0,3s) powoduje zmianę stanu światła nad stołem
Wciśnięcie na dłużej lewego klawisza (więcej niż 0,3s) powoduje zmianę stanu światła na ścianie za telewizorem
Wciśnięcie i przytrzymanie klawisza lewego i w tym samym czasie krótkie wciśnięcie prawego powoduje zmianę stanu pracy rolety nad oknem w salonie - jak jest w górze zaczynam opuszczać jak w danej chwili się opuszcza zatrzymuje się, jak jest zatrzymana to rusza w przeciwną stronę niż był poprzedni ruch, jak jest na dole to ruszam z nią do góry itd.
Wciśnięcie i przytrzymanie klawisza prawego i w tym samym czasie krótkie wciśnięcie lewego powoduje zmianę stanu pracy rolety nad drzwiami balkonowymi w salonie.
Długie wciśnięcie klawisza dużego włącza wszystkie światła w salonie,
Krótkie wciśnięcie klawisza dużego w salonie wyłącza wszystkie światła w salonie.
Jednoczesne dłuższe wciśnięcie obu klawiszy w w wyłączniku podwójnym wyłącza wszystkie światła w mieszkaniu.
Krótkie wciśnięcie klawisza lewego a potem krótkie wciśnięcie klawisza prawego włącza radio w salonie.
itd.
Wydaje się, że trudno to wszystko spamiętać ale po dwóch tygodniach używania wszystko się potem robi z automatu.
Ponieważ nie ma bardziej sensownych "manipulatorów" (czytaj łatwych w obsłudze) współpracujących z Fibaro wydało mi się sensowne zastosowanie takiego rozwiązania.

Teraz mam zapewnioną ogromną elastyczność systemu praktycznie w dowolnym pomieszczeniu mogę zrealizować dowolne sposoby reakcji systemu i nie mam konieczności włączenia danego światła jeśli kliknę danym klawiszem jak to jest w onoffach.
Gdzie nie można rozdzielić funkcji kalwisza i załączania światła. Jak klikniesz klawiszem to włączy Ci się jedno światło i dopiero odczytując ten fakt możesz coś dalej robić w systemie. Nawet nie wiesz czy światło zostało włączone z klawisza czy z komórki.

Uważam, że moje rozwiązanie jest bardzo dobre oczywiście dopóki działa centrala. Jak wróce do domu zamontuję na drzwiach szafy rozdzielczej przełączniki które będą przełączać elektrycznie sygnały z klawiszy raz do UBSów a w przypadku awarii centrali pójdą na onoffy tak, żeby mieć choć parę świateł w mieszkaniu jak walnie centrala :)

Pozdro

Marcin

« Ostatnia zmiana: Marzec 26, 2015, 09:18:45 pm wysłana przez merylion »
*

Offline viperlodz

  • Moderator Globalny
  • ***** 526
  • 14
    • Zobacz profil
  • Nazwa i wersja ID: HC2 3.600 | HC2 4.080 | HC2 4.110
Odp: Zapal / zgaś światła w pomieszczeniu
« Odpowiedź #8 dnia: Marzec 30, 2015, 10:58:13 pm »
Stwierdziłem, że fajnie byłoby mieć wszystko w jednym miejscu także wklejam najpopularniejszy kod jeśli chodzi o podwójne kliknięcie
--[[
%% properties
328 sceneActivation
%% globals
--]]
local id= 328;
local name = fibaro:getName(id)
--fibaro:debug(name);

while (true) do
  local idn = tonumber(fibaro:getValue(id, "sceneActivation"));
  if (tonumber(fibaro:getValue(id, "sceneActivation"))==16)
    then
    fibaro:debug("1 click s1 "..idn);
  elseif (tonumber(fibaro:getValue(id, "sceneActivation"))==26)
    then
    fibaro:call(23, "setValue", "0");
    elseif (tonumber(fibaro:getValue(id, "sceneActivation"))==25)
    then
    fibaro:debug("3 click s2 "..idn);
  elseif (tonumber(fibaro:getValue(id, "sceneActivation"))==15)
    then
    fibaro:debug("3 click s1 "..idn);
    fibaro:call(23, "setValue", "3");
    elseif (tonumber(fibaro:getValue(id, "sceneActivation"))==14)
    then
    fibaro:debug("2 click s1 "..idn);
    fibaro:call(7, "setValue", "50");
  elseif (tonumber(fibaro:getValue(id, "sceneActivation"))==24)
    then
    fibaro:debug("2 click s2 "..idn);
    fibaro:call(23, "setValue", "5");
      elseif (tonumber(fibaro:getValue(id, "sceneActivation"))==12)
    then
    fibaro:debug("hold click s1 "..idn);
    fibaro:call(7, "turnOff");fibaro:call(23, "turnOff");
  elseif (tonumber(fibaro:getValue(id, "sceneActivation"))==13)
    then
    fibaro:debug("release click s1 "..idn);
      elseif (tonumber(fibaro:getValue(id, "sceneActivation"))==22)
    then
    fibaro:debug("hold click s2 "..idn);
  elseif (tonumber(fibaro:getValue(id, "sceneActivation"))==23)
    then
    fibaro:debug("release click s2 "..idn);
      elseif (tonumber(fibaro:getValue(id, "sceneActivation"))==10)
    then
    fibaro:debug("change from turn off to turn on s1 "..idn);
    fibaro:call(23, "setValue", "100");
  elseif (tonumber(fibaro:getValue(id, "sceneActivation"))==11)
    then
    fibaro:debug("change from turn on to turn off s1 "..idn);
    fibaro:call(23, "turnOff");
      elseif (tonumber(fibaro:getValue(id, "sceneActivation"))==20)
    then
    fibaro:debug("change from turn off to turn on s2 "..idn);
  elseif (tonumber(fibaro:getValue(id, "sceneActivation"))==21)
    then
    fibaro:debug("change from turn on to turn off s2 "..idn);
    elseif (tonumber(fibaro:getValue(id, "sceneActivation"))==17)
    then
    fibaro:debug("up "..idn);
    elseif (tonumber(fibaro:getValue(id, "sceneActivation"))==18)
    then
    fibaro:debug("down "..idn);
    end;
  fibaro:sleep(3*1000);
  break;
end;
« Ostatnia zmiana: Marzec 30, 2015, 11:26:19 pm wysłana przez marecki_0luk1 »
*

Online arky

  • * 1
  • 0
    • Zobacz profil
  • Nazwa i wersja ID: 1
Odp: Zapal / zgaś światła w pomieszczeniu
« Odpowiedź #9 dnia: Wrzesień 05, 2015, 06:17:55 pm »
Poniżej znajdziecie prosty kod sceny opartej na LUA, który jest dobrym początkiem zabaw z programowaniem w tym języku. Przy okazji daje banalną, ale bardzo użyteczną funkcję.

Działanie skryptu jest trywialne:
- Reaguje na potrójne kliknięcie przycisku Dimmera.
- Jeżeli świeci się chociaż jedno światło z listy, gasi je.
- Jeżeli nie świeci się ani jedno światło z listy, zapala wszystkie światła.
- Przycisk, który jest użyty do aktywacji jest ignorowany przy sprawdzaniu stanu świateł. Dzięki temu jeśli po wejściu do pomieszczenia zapalicie tylko najbliższe, potrójny klik zapali wszystkie pozostałe.

Witam,
nie mogę uruchomic sceny, otrzymję: Unexpected source trigger 'other'  :(
Odp: Zapal / zgaś światła w pomieszczeniu
« Odpowiedź #10 dnia: Luty 03, 2016, 10:18:37 am »
Czy ktoś używa tego ?

Przełącznik ścienny podwójny - biały Z-Wave TZ36D
http://www.z-wave.pl/pl/p/Przelacznik-scienny-podwojny-bialy-Z-Wave-TZ36D/341

można go wykorzystać do zliczania impulsów - kliknięć ?

Odp: Zapal / zgaś światła w pomieszczeniu
« Odpowiedź #11 dnia: Grudzień 02, 2017, 04:31:13 pm »
Witam,

Po uruchomienie sceny z tego wątku otrzymuje taki sam komunikat jak kolega arky czyli Unexpected source trigger 'other' Prosiłbym o pomoc jak to rozwiązać.

Dodatkowo proszę o informacje czy możliwe jest sterowanie za pomocą tej sceny Dimerami jak i zwykłymi Switchamia ?