RGBW - powiadomienie i powrot do poprzedniego ustawienia - Solved

  • 5 Odpowiedzi
  • 4554 Wyświetleń

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

*

Offline peterhi

  • * 8
  • 1
  • Nazwa i wersja ID: HC2 v4.100
RGBW - powiadomienie i powrot do poprzedniego ustawienia - Solved
« dnia: 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])
« Ostatnia zmiana: Listopad 19, 2016, 02:33:47 am wysłana przez peterhi »
*

Offline marecki_0luk1

  • Administratorzy
  • ***** 430
  • 26
  • Nazwa i wersja ID: HC3 5.070.42 / HC2 4.600
Odp: RGBW - powiadomienie i powrot do poprzedniego ustawienia.
« Odpowiedź #1 dnia: Sierpień 17, 2015, 08:52:49 pm »
A może dopisz co nie działa :-)


Wysłane z iPad za pomocą Tapatalk
*

Offline peterhi

  • * 8
  • 1
  • Nazwa i wersja ID: HC2 v4.100
Odp: RGBW - powiadomienie i powrot do poprzedniego ustawienia.
« Odpowiedź #2 dnia: 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


*

Offline marecki_0luk1

  • Administratorzy
  • ***** 430
  • 26
  • Nazwa i wersja ID: HC3 5.070.42 / HC2 4.600
Odp: RGBW - powiadomienie i powrot do poprzedniego ustawienia.
« Odpowiedź #3 dnia: 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
Odp: RGBW - powiadomienie i powrot do poprzedniego ustawienia.
« Odpowiedź #4 dnia: Październik 06, 2015, 07:47:03 pm »
Czy udało się zrobić tą scenę? :)
*

Offline peterhi

  • * 8
  • 1
  • Nazwa i wersja ID: HC2 v4.100
Odp: RGBW - powiadomienie i powrot do poprzedniego ustawienia.
« Odpowiedź #5 dnia: 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