LUA Script: Bei Bewegung indirektes und anschließend Haupt-Licht

Hey Ho,

habe vor kurzen ein Script geschrieben was erst das Indirekte-Licht und anschließend das Haupt-Licht anschaltet.
Wir benutzen es z.b. für die Küche wo erst die Küchenzeile per LED beleuchtet wird und wenn man sich länger im Raum aufhält auf das Hautlicht angeschaltet wird.
Eignet sich auch für diverse andere Räume wo man sich nicht lange aufhält, bzw. nur durchgeht und dann erstmal nur die Indirekte-Beleuchtung ansteuern möchte.
<pre class=“brush: applescript; gutter: true; first-line: 1; highlight: []; html-script: false”>–[[
%% properties
58 value
%% globals
–]]

– Lichtsteuerung—

local sensorId = 58 --ID of Sensor
local lightId = 61 --ID of Light
local lightled = 74 – ID of Led
local lux = 60 – ID of Luxsensor
local bewegung = 1;

local zeit = os.time()

if fibaro:countScenes() > 1 or tonumber(fibaro:getValue(sensorId, "value")) == 0
then
fibaro:abort()
end

if (tonumber(fibaro:getValue(lux, "value")) < 30)
then
fibaro:call(lightled, "turnOn");
fibaro:debug('LED an');

repeat
local Sensor = (tonumber(fibaro:getValue(sensorId, "value")) > 0);

if (Sensor)
  then
   bewegung = bewegung + 1;
   fibaro:debug(&#039;Bewegung&#039; ..bewegung);
  elseif os.time() - zeit &gt; 60
    then
    fibaro:call(lightled, &quot;turnOff&quot;);
    fibaro:debug(&#039;Keine Bewegung&#039; ..bewegung);
    fibaro:killScenes(9);
 end 
 fibaro:sleep(10000);

until (bewegung >= 7)

fibaro:call(lightId, &quot;turnOn&quot;) 
fibaro:debug(&#039;Licht an&#039;);
fibaro:sleep(10000)
fibaro:call(lightled, &quot;turnOff&quot;);

while true do 
fibaro:debug(&#039;Schleife gestartet&#039;);
    if os.time() - zeit &gt; 180 
      then     
      fibaro:call(lightId, &quot;turnOff&quot;); 
      fibaro:debug(&#039;Licht aus&#039;);
      fibaro:abort() 
      break 
    end 

    if tonumber(fibaro:getValue(sensorId, &quot;value&quot;)) &gt; 0 then 
       zeit = os.time() 
    end 
fibaro:sleep(2000) 
end

end
Wie immer freue ich mich über Feedbacks :slight_smile:

läuft top!
An welcher Stelle definiere:

  • wann das Hauptlicht eingeschalten wird?
  • wie lange das indirekte Licht anbleibt?

Hey Chris,

die Zeit der indirekten Beleuchtung kannst du hier bestimmen

until (bewegung >= 7)

Bewegungsmelder muss als ausgelöst erkannt werden und das 7 mal, dann schaltet das Hauptlicht an.
Sollte das nicht der Fall sein und 60 sek vergehen wir die indirekte Beleuchtung ausgeschaltet und das Hauptlicht nicht aktiviert.
Mit den Werten kannst du die Umschaltung anpassen, verzögern oder verkürzen, je nach bedarf.

Ist das der Fall, wird das Hauptlicht angeschaltet und die indirekte Beleuchtung aus, den Wert für die Abschaltung wenn keine Bewegung
kannst du hier ändern.

if os.time() - zeit > 180

in Sekunden.

Gruß Alex

oh danke!
Ich hatte Mist eingebaut, deswegen hat es bei mir nicht funktioniert.
Bei folgender Variable:

local bewegung = 1; 

dachte ich, das wäre die ID der Szene und habe es geändert. Dabei ist es der Zählwert.

Allerdings steht in Zeile 39:

        fibaro:killScenes(9);

Ist 9 die ID deiner Szene?

Könnte man doch ersetzen mit der allgemein:

fibaro:abort()

Daniel hat mir das Script mal so zusammengeschraubt :smiley: Danke Daniel

--[[                             
%% properties
210 value
%% globals
--]]
 
-- Lichtsteuerung—
 
local sensorId = 210 --ID of Sensor
local lightId = 132 --ID of Light
local lightled = 184 -- ID of Led
local lux = 212 -- ID of Luxsensor
local bewegung = 1;
 
 
fibaro:debug('start');
if fibaro:countScenes() > 1
   then
   fibaro:abort()
   fibaro:debug('abort');
 end
fibaro:debug('start');
if (tonumber(fibaro:getValue(lux, "value")) < 30) then
    fibaro:call(lightled, "turnOn");
    fibaro:debug('LED an');
        local zeit = os.time();
   repeat  
      if (tonumber(fibaro:getValue(sensorId, "value")) > 0) then  
        bewegung = bewegung + 1;
        fibaro:debug('Bewegung' ..bewegung);
      elseif os.time() - zeit > 10 then
        fibaro:call(lightled, "turnOff");
        fibaro:debug('Keine Bewegung' ..bewegung);
        fibaro:abort();
      end
   fibaro:sleep(10000); -- Sleep 10 Sekunden
   until (bewegung >= 3) -- Faktor Sekunden x 10
        fibaro:call(lightId, "turnOn")
    fibaro:debug('Licht an');
    fibaro:sleep(10000)
        zeit = os.time()
    while true do
        fibaro:debug('Schleife gestartet');
        if os.time() - zeit > 10 then -- wenn X Sekunden keine Bewegung schalte Licht aus  
                fibaro:call(lightId, "turnOff");
                fibaro:debug('Licht aus');
                fibaro:call(lightled, "turnOff");
                fibaro:abort()
                break
        end
        if tonumber(fibaro:getValue(sensorId, "value")) > 0 then
           zeit = os.time()
        end
    fibaro:sleep(2000)
    end
end
fibaro:debug('ende');

Hey, ich habe noch einmal alle Einstellungen in den Kopf gerückt und etwas angepasst. Bitte testen und meckern :wink:
Die Idee ist übrigens super, danke Alex!

--[[                             
%% properties
49 value
%% globals
--]]
 
-- Lichtsteuerung—
local sensorId = 49 --ID of Sensor
local lightId = 6 --ID of Light
local lightled = 39 -- ID of Led
local lux = 51 -- ID of Luxsensor

local luxgrenze = 30 --wenn lux kleiner als X, dann szene auslösen
local zeitled = 10 --wie lange nur leds bis licht zugeschalten
local zeitlicht = 10 --wie lange licht anbehalten, wenn keine bewegung (led und gesamt)

fibaro:debug('start1');
if fibaro:countScenes() > 1 then
  fibaro:debug('abort');
  fibaro:abort();
end
if (tonumber(fibaro:getValue(lux, "value")) < luxgrenze) then
  fibaro:call(lightled, "turnOn");
  fibaro:debug('LED an'); 
  local zeit = os.time();
  local bewegung = 1;
  while (zeitled >= bewegung) do
    if (tonumber(fibaro:getValue(sensorId, "value")) > 0) then  
      bewegung = bewegung + 1;
      zeit = os.time();
    elseif os.time() - zeit > zeitlicht then
      fibaro:call(lightled, "turnOff");
      fibaro:debug('Keine Bewegung' ..bewegung);
      fibaro:abort();
    end
  fibaro:sleep(1000);
  end
  fibaro:call(lightId, "turnOn")
  fibaro:debug('Licht an');
  zeit = os.time()
  while os.time() - zeit < zeitlicht do
    if tonumber(fibaro:getValue(sensorId, "value")) > 0 then
      zeit = os.time()
    end
  fibaro:sleep(1000)
  end
  fibaro:call(lightId, "turnOff");
  fibaro:call(lightled, "turnOff");
  fibaro:debug('Licht aus');
end
fibaro:abort()

Hey Daniel,

danke für das Feintunning :slight_smile:

Hi Daniel,

erstmal vielen Dank für das Script, läuft super…bis auf eins.
Habe im Übergang von Indirekt auf Direktes Licht noch das ausschalten des Indirekten hinzugefügt.

THX :slight_smile:

<pre class=“brush: applescript; gutter: true; first-line: 1; highlight: []; html-script: false”>

--[[                            
%% properties
58 value
%% globals
--]]
  
-- Lichtsteuerung—
local sensorId = 58 --ID of Sensor
local lightId = 61--ID of Light
local lightled = 74 -- ID of Led
local lux = 60 -- ID of Luxsensor
 
local luxgrenze = 25 --wenn lux kleiner als X, dann szene auslösen
local zeitled = 45 --wie lange nur leds bis licht zugeschalten
local zeitlicht = 120 --wie lange licht anbehalten, wenn keine bewegung (led und gesamt)
 
fibaro:debug(&#039;start1&#039;);
if fibaro:countScenes() > 1 then
  fibaro:debug(&#039;abort&#039;);
  fibaro:abort();
end
if (tonumber(fibaro:getValue(lux, &quot;value&quot;)) < luxgrenze) then
  fibaro:call(lightled, &quot;turnOn&quot;);
  fibaro:debug(&#039;LED an&#039;);
  local zeit = os.time();
  local bewegung = 1;
  while (zeitled >= bewegung) do
    if (tonumber(fibaro:getValue(sensorId, &quot;value&quot;)) > 0) then 
      bewegung = bewegung + 1;
      zeit = os.time();
    elseif os.time() - zeit > zeitlicht then
      fibaro:call(lightled, &quot;turnOff&quot;);
      fibaro:debug(&#039;Keine Bewegung&#039; ..bewegung);
      fibaro:abort();
    end
  fibaro:sleep(1000);
  end
  fibaro:call(lightId, &quot;turnOn&quot;)
  fibaro:call(lightled, &quot;turnOff&quot;)
  fibaro:debug(&#039;Licht an&#039;);
  zeit = os.time()
  while os.time() - zeit < zeitlicht do
    if tonumber(fibaro:getValue(sensorId, &quot;value&quot;)) > 0 then
      zeit = os.time()
    end
  fibaro:sleep(1000)
  end
  fibaro:call(lightId, &quot;turnOff&quot;);
  fibaro:call(lightled, &quot;turnOff&quot;);
  fibaro:debug(&#039;Licht aus&#039;);
end
fibaro:abort()</pre>