LUA Funktion: Farbe speichern und nach Alarm wieder setzen

Hier mal eine Alarmszene für den Fall das Wassersensor alarmiert.
Durch die Funktion kann der aktuell gesetzte Farbwert eines RGB Stripe oder einer RGB Lampe (Zipato Bulb) in einer Variable gespeichert werden,
und nach dem deaktivieren des Alarms wird die Lichtfarbe wieder gesetzt.
Könnte auch verwendet werden für eine Szene Lichtklingel: Es klingelt -> Farbe wird gespeichert -> Lampen Blinken Gelb -> vorherige Lichtfarbe wird wieder gesetzt

--[[
%% properties
468 value
615 value
%% globals
Wasser
--]]

 --------------------------------------------------
   -- Funktion aktuelle RGB Werte speichern--
   --------------------------------------------------

function color_old (deviceID, colourString)
  local RGBWTable= {}
  local i = 1

  for value in string.gmatch(colourString,"(%d+)") do
    RGBWTable[i] = value
    i = i + 1
  end
  fibaro:call(deviceID, "setColor", RGBWTable[1], RGBWTable[2], RGBWTable[3], RGBWTable[4])
end

 --------------------------------------------------
   -- Wenn Szene bereits läuft abbrechen--
   --------------------------------------------------

if (fibaro:countScenes()>1)
  then
 	fibaro:abort();
  fibaro:debug('abort');
end

 --------------------------------------------------
   -- Werte auslesen und Variablen setzen--
   --------------------------------------------------

Phone1 = (fibaro:getGlobal("PhoneChris")); -- ID Chris iPhone
Phone2 = (fibaro:getGlobal("PhonePaula"));  -- ID Paula iPhone

local volumeRocki= ( tonumber(fibaro:getValue(967, "ui.SliderVolume.value"))); -- aktuelle Lautstärke speichern
fibaro:call(967, "setSlider", "13", "99");  -- Slider für Rocki Lautstärke setzen

pendel_old = fibaro:getValue(445, "color") -- aktuelle Lichtfarbe Pendelleuchte Küche
LEDring_old = fibaro:getValue(125, "color") -- aktuelle Lichtfarbe LED Ring Wohnzimmer
Schlafzimmer_old = fibaro:getValue(536, "value") -- aktueller Zustand Schlafzimmer Lampe
Fluroben_old = fibaro:getValue(556, "value") -- aktueller Zustand Licht Flur Oben
Bad_old = fibaro:getValue(552, "value") -- aktueller Zustand Licht Bad 
Badschrank_old = fibaro:getValue(791, "value") -- aktueller Zustand Licht Badschrank
Treppeunten_old = fibaro:getValue(784, "value") -- aktueller Zustand Licht Treppe unten 

--------------------------------------------------
   -- Welcher Sensor hat ausgelöst? // Pushmitteilung und Rocki Sprache--
   --------------------------------------------------

local startSource = fibaro:getSourceTrigger()
if (startSource['deviceID'] == 615) then
    fibaro:call(Phone1, "sendPush", "ALARM - Waschmaschine Wasser erkannt !"); -- Push an Chris iPhone
    fibaro:call(Phone2, "sendPush", "ALARM - Waschmaschine Wasser erkannt !"); -- Push an Paula iPhone

  fibaro:setGlobal("RockiTTS", "http://verarscht.org/tts/Wasseralarm-bad.mp3")  -- Variable für Sprachausgabe
  elseif (startSource['deviceID'] == 468) then
    fibaro:call(Phone1, "sendPush", "ALARM - Spülmaschine Wasser erkannt !"); -- Push an Chris iPhone
    fibaro:call(Phone2, "sendPush", "ALARM - Spülmaschine Wasser erkannt !"); -- Push an Paula iPhone
 
  fibaro:setGlobal("RockiTTS", "http://verarscht.org/tts/Wasseralarm-kitchen.mp3") -- Variable für Sprachausgabe
    end 
	 fibaro:debug('Pushnachricht abgesetzt');   

if ( tonumber(fibaro:getValue(468, "value")) > 0 ) or 
( tonumber(fibaro:getValue(615, "value")) > 0 )  then
   fibaro:setGlobal("Wasser", "erkannt")
  		 fibaro:debug('Wasser erkannt - Variable gesetzt'); 
     
fibaro:call(445, "setColor", "0","0","255","255"); -- Pendelleuchte auf Blau und Licht an
fibaro:call(125, "setColor", "0","0","255","0"); -- LED Ring Blau
fibaro:call(791, "setColor", "0","0","255","0"); -- Badschrank Blau
fibaro:call(784, "setColor", "0","0","255","0"); -- LED Treppe unten Blau
  
  while (fibaro:getGlobal('Wasser') == 'erkannt') do
fibaro:call(445, "setB", "255")   -- Pendelleuchte Küche Blau an
fibaro:call(125, "setB", "255")   -- LED Ring Whz Blau an 
fibaro:call(791, "setB", "255")   -- Badschrankg Whz Blau an 
fibaro:call(784, "setB", "255")   -- LED Treppe unten Blau an 
    
   fibaro:call(536, "turnOn")     -- Schlafzimmer Lampe an
   fibaro:call(556, "turnOn")     -- Flur Oben Lampe an
   fibaro:call(552, "turnOn")	  -- Bad Lampe an
    
    fibaro:call(967, "pressButton", "31") -- Rocki spricht Wasseralarm Bad
	fibaro:sleep(3*1000);    
fibaro:call(445, "setB", "5")   -- Pendelleuchte pulsiert Blau
fibaro:call(125, "setB", "5")   -- LED Ring Whz pulsiert blau
fibaro:call(791, "setB", "5")   -- Badschrank pulsiert Blau
fibaro:call(784, "setB", "5")   -- LED Treppe pulsiert blau
    
   fibaro:call(556, "turnOff")     -- Flur Oben Lampe aus
	fibaro:sleep(4*1000);      
    -- Schleife Ende ---  
  	end
  	fibaro:debug('Wasser Alarm aufgehoben');   
  
fibaro:call(445, "setColor", "0","255","0","100"); -- Pendelleuchte grün
fibaro:call(125, "setColor", "0","255","0","0"); -- LED Ring grün 
fibaro:call(791, "setColor", "0","255","0","0"); -- Badschrank grün
fibaro:call(784, "setColor", "0","255","0","0"); -- LED Treppe unten grün   
 
	fibaro:sleep(10*1000);    
color_old(445, pendel_old) -- Pendelleuchte zurücksetzen
color_old(125, LEDring_old) -- LED Ring zurücksetzen
color_old(791, Badschrank_old) -- Badschrank zurücksetzen
color_old(784, Treppeunten_old) -- LED Treppe unten zurücksetzen

fibaro:call(536, "setValue", Schlafzimmer_old)  -- Schlafzimmer Lampe zurücksetzen
fibaro:call(556, "setValue", Fluroben_old)  -- Flur oben Lampe zurücksetzen
fibaro:call(556, "setValue", Fluroben_old)  -- Bad Lampe zurücksetzen
    
fibaro:call(552, "setSlider", "13", volumeRocki);  -- Slider für Rocki Lautstärke zurücksetzen  
	fibaro:call(967, "pressButton", "12"); -- rocki stopp drücken  
end

Funktioniert das ganze auch mit den Programmen vom RGB(W) Modul?
Also das nach dem Alarm wieder das Programm (z.B. Rainbow) aktiviert wird, das vorher gelaufen ist?

crissxcross VIELEN DANK!
Funktioniert :slight_smile: