Mit Motion Sensor das Hue Plugin An oder AUs schalten

Hallo Chris,

am elegantesten ist es wenn du mit Arrays arbeitest:

--[[
%% properties
XX value
%% globals
--]]

local motion = XX;
local hues = {x,y,z};

local HUElight = tonumber(fibaro:getValue(hue, "ui.onOff.value"))

  
if tonumber(fibaro:getValue(motion, "value")) > 0 then

  	if (HUElight ~= 0) then 
    	 for i, v in ipairs(hues) do
         fibaro:call(hues[i], 'turnOff')
         end
      fibaro:debug("Beleuchtung aus");
 	else 
    	 for i, v in ipairs(hues) do
         fibaro:call(hues[i], 'turnOn');
         end
      fibaro:debug("Beleuchtung an");
       end
end

Moin,

der neue Lua Code will nicht so ganz klappen. Debug zeigt folgendes an:

[DEBUG] 08:15:19: line 115: attempt to concatenate local ‘deviceId’ (a table value)

Habe folgendes eingetragen:

--[[
%% properties
126 value
%% globals
--]]

local motion = 126;
local hues = {123,124};

Noch für mich zum Verständnis:

for i, v in ipairs(hues) do
         fibaro:call(hues[i],

“i” bezieht sich auf die Hues[i] und das “v” wahrscheinlich auf Value bzw. der “ui.onoff.value” oder?

Gruß

Hi,

du musst noch eine Variable hue bestimmen, bei der der Status ausgelesen wird:

local HUElight = tonumber(fibaro:getValue(hue, "ui.onOff.value"))

Hier bricht das Skript ab, da die Variable hue nicht definiert ist.

Die Werte i & v beziehen sich auf nichts, diese sind abhänging von den ipairs(hues). Da könnte auch a & b stehen, wäre egal.

Gruß

Sorry, war ein Flüchtigkeitsfehler… Wie boomx geschrieben hat, hatte ich vergessen die HUElight zu definieren.

Es gibt zwei Optionen:

1. eine zusätzliche variable:
wo nur eine hue abgefragt wird (Zeile 8 - huetocheck)

--[[
%% properties
XX value
%% globals
--]]

local motion = XX;
local huetocheck = YY
local hues = {x,y,z};

local HUElight = tonumber(fibaro:getValue(huetocheck, "ui.onOff.value"))

  
if tonumber(fibaro:getValue(motion, "value")) > 0 then

  	if (HUElight ~= 0) then 
    	 for i, v in ipairs(hues) do
         fibaro:call(hues[i], 'turnOff')
         end
      fibaro:debug("Beleuchtung aus");
 	else 
    	 for i, v in ipairs(hues) do
         fibaro:call(hues[i], 'turnOn');
         end
      fibaro:debug("Beleuchtung an");
       end
end

oder 2. per Funktion:
In der alle hues aus dem Array abgefragt werden, ob diese an oder aus sind.

--[[
%% properties
XX value
%% globals
--]]

local motion = XX;
local hues = {x,y,z};

  
---- ### checkLights Funktion ### ---- 
function checkLights(array)
  	
	for j=1, #hues do
	status = tonumber(fibaro:getValue(hues, "ui.onOff.value"))
	
		if status == "0" then
 		lightsOff = true;
    		elseif 
		status == "1" then
      		lightsOff = false; break
	  	end
   	end
end

--------------- ### Code ### ----------------------

if tonumber(fibaro:getValue(motion, "value")) > 0 then
checkLights();

  	if (lightsOff == false) then

    		for i, v in ipairs(hues) do
        	fibaro:call(hues[i], 'turnOff')
        	end
      		fibaro:debug("Beleuchtung aus");

 		else 
    		for i, v in ipairs(hues) do
        	fibaro:call(hues[i], 'turnOn');
        	end
      		fibaro:debug("Beleuchtung an");
       end
end

WICHTIG: Ich habe keinen der o.g. Codes bisher getestet.

Ok, den Aufbau beider Skripte denke ich habe ich verstanden :slight_smile:
Werde übers Wochenende mal beide Testen und Rückmeldung geben.

Danke Euch

Gerade beide getestet. Skript eins funktioniert , werde ich auch benutzen, war sowieso vom Aufbau mein Fav.
Skript zwei schmeißt er mir einen Fehler im Debug aus, genau den selben den ich weiter oben gepostet habe…

Aber ihr habt mir sehr geholfen und es funktioniert ja jetzt ! Vielen Vielen Dank und ein schönes Wochenende :slight_smile:

ps. nächster Step bei mir am WE, Sonos Commander mit einbinden