Forum użytkowników automatyki budynkowej

Z-wave => Fibaro - sceny => Wątek zaczęty przez: peterhi w Sierpień 15, 2015, 06:38:04 pm

Tytuł: RGBW - powiadomienie i powrot do poprzedniego ustawienia - Solved
Wiadomość wysłana przez: peterhi w Sierpień 15, 2015, 06:38:04 pm
Witam, mam problem ze scena, ktora mialaby uruchamiac listwe LED gdy dostaje powiadomienie z centralki na TV.  Zalozenie jest aby LED zaswiecila sie na dany kolor (np. green-powiadomienia, red-ostrzezenia lub alarmy,) przez 1s gdy system wysyla wiadomosc na ekran TV. Po zaswieceniu LED wraca do poprzedniego stanu (np. OFF lub swieci wybrany wczesniej kolor). Zerknijcie na kod czy jest wszystko git, albo moze znacie prostsze komendy do osiagniacia takiego efektu.

To jest moja scena:

--[[
%% properties
60 value
--]]
 
local startSource = fibaro:getSourceTrigger();
local ledState =  fibaro:getValue(90, "value");
local ledColor =  fibaro:getValue(90, "color" lub "lastColorSet");
fibaro.debug(ledState);
fibaro:debug(ledColor);
 
if
 
tonumber(fibaro:getValue(60, "value")) > 0;
and
tonumber(fibaro:getValue(90, "value")) == 0;
then
fibaro:call(90, "setG", "255");
        fibaro:sleep(1*1000)
        fibaro:call(90, "turnoff")
elseif
( tonumber(fibaro:getValue(60, "value")) > 0 )
and
( tonumber(fibaro:getValue(90, "value")) > 0 )
then
        fibaro:call(90, "setG", "255");
        fibaro:sleep(1*1000);
 
local RGBTable= {};
local i = 1;
for value in string.gmatch(ledColor,"(%d+)") do 
    RGBTable = value;
    i = i + 1;
end
 
fibaro:debug('R:'..RGBTable[1]);
fibaro:debug('G:'..RGBTable[2]);
fibaro:debug('B:'..RGBTable[3]);
 
fibaro:call(90, "setColor", RGBTable[1], RGBTable[2], RGBTable[3])
Tytuł: Odp: RGBW - powiadomienie i powrot do poprzedniego ustawienia.
Wiadomość wysłana przez: marecki_0luk1 w Sierpień 17, 2015, 08:52:49 pm
A może dopisz co nie działa :-)


Wysłane z iPad za pomocą Tapatalk
Tytuł: Odp: RGBW - powiadomienie i powrot do poprzedniego ustawienia.
Wiadomość wysłana przez: peterhi w Sierpień 19, 2015, 05:34:07 am
W scenie bylo kilka bledow, ktore poprawilem. Dalej jednak mam problem z pobieraniem poprzednich ustawien.
Narazie ustawilem na sztywno jeden kolor, ktory uzywam w salonie.  Chialbym jednak aby scena byla bardziej uniwersalna, do wykorzystania w innych miejscach i by sama pobierala ustawienia.
Teraz wyglada to tak:

--[[
%% properties
23 value
%% globals
--]]

local startSource = fibaro:getSourceTrigger();
if
 ( tonumber(fibaro:getValue(23, "value")) > 0 ) -- MotionSensor wykryje ruch
and
 ( tonumber(fibaro:getValue(90, "value")) == 0 ) -- LED-y sa wylaczone
then
fibaro:call(90, "setG", "255");
fibaro:sleep(300)
fibaro:call(90, "turnOff");
elseif
( tonumber(fibaro:getValue(23, "value")) > 0 ) -- MotionSensor wykryje ruch
and
( tonumber(fibaro:getValue(90, "value")) > 0 ) -- LED-y sa wlaczone
then
   
    fibaro:call(90, "setG", "255");
fibaro:sleep(300)
  fibaro:call(90, "setColor", "0" , "0" , "0" , "0")
  fibaro:sleep(200)
    fibaro:call(90, "setColor", "124","50","34","0")
end


Tytuł: Odp: RGBW - powiadomienie i powrot do poprzedniego ustawienia.
Wiadomość wysłana przez: marecki_0luk1 w Sierpień 19, 2015, 11:16:26 am
peterhi to czego Ci brakuje to:
fibaro:getValue(90, "lastColorSet")

Zrob tak:
1) jesli ledy wlaczone,
2) zapisz do zmiennej wynik getValue [LastColorSet]
3) wykonaj mrugniecie czy co tam chcesz
4) ustaw kolory ktore zapisales w zmiennej
Tytuł: Odp: RGBW - powiadomienie i powrot do poprzedniego ustawienia.
Wiadomość wysłana przez: Andrzej.M w Październik 06, 2015, 07:47:03 pm
Czy udało się zrobić tą scenę? :)
Tytuł: Odp: RGBW - powiadomienie i powrot do poprzedniego ustawienia.
Wiadomość wysłana przez: peterhi w Listopad 08, 2016, 11:47:45 pm
Sorry za dluga nieobecnosc... problem rozwiazany, dzieki marecki_0luk1 za naprowadzenie. Udalo mi sie rozwiazac problem bez uzycia zmiennej globalnej, tylko local. Od teraz uzywam tasmyLED na scianie i za TV do sygnalizowania zdarzen (np: 1x zielony gdy ktos jest w korytarzu, lub 3x zielony gdy skonczy sie pranie, lub 10x czerwony gdy alarm lub zalanie). Po zasygnalizowaniu zdarzenia tasmaLED wraca do poprzednio ustawionego koloru.

Czesc kodu odpowiedzialna za powrot do poprzedniego koloru:
--pobierz ostatnie ustawienie koloru
local colorSet = fibaro:getValue(90, "lastColorSet")
fibaro:debug(colorSet)

--miejsce na akcje
fibaro:call(90, "setColor", "0", "255", "0", "0")
fibaro:sleep(500)

--ustaw poprzedni kolor
local RGBWTable= {};
local i = 1;

for value in string.gmatch(colorSet,"(%d+)") do     
   RGBWTable[i] = value;
   i = i + 1;
end

fibaro:debug('R:'..RGBWTable[1]);
fibaro:debug('G:'..RGBWTable[2]);
fibaro:debug('B:'..RGBWTable[3]);
fibaro:debug('W:'..RGBWTable[4]);

fibaro:call(90, "setColor", RGBWTable[1], RGBWTable[2], RGBWTable[3], RGBWTable[4]);


Przykladowy kod, ktory daje znac gdy ktos otworzy drzwi wejsciowe i wejdzie do korytarza:
--[[
%% properties
23 value
--]]

if (fibaro:countScenes() > 1) or
  fibaro:getValue(23, "value") == 0
  then
    fibaro:debug("Scena wywolana kilkukrotnie lub czujka zmienila stan z 1 na 0")
    fibaro:abort()
end

if
 ( tonumber(fibaro:getValue(23, "value")) > 0 )
and
 ( tonumber(fibaro:getValue(90, "value")) == 0 )
then
    fibaro:setGlobal("text", "FIBARO:  %0A%0AMotion Detected in Hall - Light ON")
    fibaro:call(76, "pressButton", "1")
    fibaro:setGlobal("koditext", "Motion Detected in Hall - Light ON");
    fibaro:call(150, "pressButton", "2");
fibaro:call(90, "setG", "255")
fibaro:sleep(300)
fibaro:call(90, "turnOff")
elseif
 ( tonumber(fibaro:getValue(23, "value")) > 0 )
and
 ( tonumber(fibaro:getValue(90, "value")) > 0 )
then
    --get last color
    local colorSet = fibaro:getValue(90, "lastColorSet")
    fibaro:debug(colorSet)
    fibaro:setGlobal("text", "FIBARO:  %0A%0A[Eng] Motion Detected in Hall - Light ON")
    fibaro:call(76, "pressButton", "1")
    fibaro:setGlobal("koditext", "Motion Detected in Hall - Light ON");
    fibaro:call(150, "pressButton", "2");
   
--start Info Sequence
    fibaro:call(90, "setG", "255");
    fibaro:sleep(300)
 
--set old color
local RGBWTable= {};
local i = 1;

for value in string.gmatch(colorSet,"(%d+)") do     
   RGBWTable[i] = value;
   i = i + 1;
end

fibaro:debug('R:'..RGBWTable[1]);
fibaro:debug('G:'..RGBWTable[2]);
fibaro:debug('B:'..RGBWTable[3]);
fibaro:debug('W:'..RGBWTable[4]);

fibaro:call(90, "setColor", RGBWTable[1], RGBWTable[2], RGBWTable[3], RGBWTable[4]);

end