3 Motion Sensoren (Bewegungsmelder) an einer Lampe

Von Blockszene zu LUA wird nicht richtig übersetzt. Progge später mal was vernünftiges mit LUA, was wir auch in die Wissens-DB als Treppenlichtsteuerung übernehmen können.

Gruß :slight_smile:

Das wär ja mal voll cool, wenn DU das machen würdest :slight_smile:
In dem Lua steht ja bei der Szene am Schluss: end, 1800000
stimmt das so? sind das Sekunden?

Ja, mach ich morgen. Hatte es heute nicht geschafft.

Das ist richtig, bei 101000 wartet er 10 Sekunden. Also bei 18001000 = 1800000 :wink:

Hab es grad noch gemacht. Teste das mal bitte, dann nehme ich es auf. Du musst die MotionIDs noch anpassen. Und in den erweiterten Parametern änderst du bitte Parameter 6 auf deine Zeit, nachdem die Motions sicher anzeigen sollen. Würde 180 Sekunden vorschlagen. Hab ich gute Erfahrungen mit gemacht (Flur & Küche). Nachdem du das geändert hast, musst du den Sensor mit 3-Klicks aufwecken. Viel Spass :slight_smile:

--[[
%% properties
43 value
43 value
43 value
%% globals
--]]

-- MOTION-IDs anpassen (Auch oben im Header hinzufügen)

motionID = 43;
motionID2 = 44;
motionID3 = 44;
lightID = 33;

if (tonumber(fibaro:countScenes())>1) then
  fibaro:debug('Kill second scene!');
  fibaro:abort();
end

local motion = fibaro:getValue(motionID, 'value');
local motion2 = fibaro:getValue(motionID, 'value');
local motion3 = fibaro:getValue(motionID, 'value');

local trigger = fibaro:getSourceTrigger();

if (tonumber(trigger['deviceID'])==tonumber(motionID) or trigger['deviceID'])==tonumber(motionID2) or trigger['deviceID'])==tonumber(motionID3)) then
    if (tonumber(motion)==1 or tonumber(motion2)==1 or tonumber(motion3)==1) then
      fiber:call(lightID, “turnOn”);
      fibaro:debug('Motion detected. Light on!');
    -- no motion anymore
    elseif (tonumber(motion)==0 and tonumber(motion2)==0 and tonumber(motion3)==0) then
      fibaro:debug('No motion. Light off!')
      fiber:call(lightID, “turnOff”);
    end
  end

Es müsste dann sowas im Debug-Fenster stehen:
[DEBUG] 23:45:59: Motion detected. Light on!
[DEBUG] 23:48:45: No motion. Light off!

User1002.png

Vielen vielen Dank boomx!
Das ist echt super von Dir.

Ich hab grad ein neues Experiment am Laufen, was ganz vielversprechend aussieht.
Ich habe für jeden Bewegungsmelder eine Variable gemacht mit den Werten sicher und rueckgesetzt.
Wenn eine Bewegung bemerkt wird, geht das Licht an und die Variable des entsprechenden Melders auf rueckgesetzt.
Dann habe ich für jeden Bewegungsmelder eine weitere Szene, die die Bewegungsmelder Variable beim Wechsel auf sicher (hier kann ich ja meine gewünschte Zeit in Sekunden einstellen) auch die jeweilige Variable auf sicher setzt.
In einer Ausschaltszene sind dann die drei Bewegungsmelder-Variablen mit und verknüpft (also wenn die Melder-Variablen 1, 2 und 3), also alle auf sicher stehen, dass dann das Licht ausgeht.

Anbei meine:
Einschaltszene
Bewegungsmelder auf sicher szene
Ausschaltszene

einschalt-szene.jpg

bewegungsmelder_auf_sicher_szene.png

ausschalt_szene.png

Wie man es am Ende macht ist ja jedem selbst überlassen :wink: So hast du natürlich nur 4 Szenen anstatt einer. Du kannst dem device auch sagen, dass dieses für 30 min auf ausgelöst stehen soll. Dann brauchst du keine Variablen.

Hallo,

bin neu und lese seit stunden und probiere wie verrückt.
HC 2 mit Version 4.130.

Ich möchte mit einem Motion Eye erstmal nur eine Wall Plug schalten und bei nicht Bewegung abschalten.
Habe dazu Dein Script genommen und meine Motion IDs eingetragen.
Nur verstehe ich nicht, warum Du oben im Header 3 mal die gleiche Zahl hast?
Und dann bei motionID eine einzelne und bei motion ID2 und3 die selbe hast.
Verstehe das nicht ganz.

ich bekomme die Fehlermeldung:

[DEBUG] 06:48:08: line 27: ‘then’ expected near ‘)’ und das habe ich so drinn:

`–[[
%% properties
14 value
14 value
14 value
%% globals
–]]

– MOTION-IDs anpassen (Auch oben im Header hinzufügen)

motionID = 14;
motionID2 = 15;
motionID3 = 15;
lightID = 21;

if (tonumber(fibaro:countScenes())>1) then
fibaro:debug(‘Kill second scene!’);
fibaro:abort();
end

local motion = fibaro:getValue(motionID, ‘value’);
local motion2 = fibaro:getValue(motionID, ‘value’);
local motion3 = fibaro:getValue(motionID, ‘value’);

local trigger = fibaro:getSourceTrigger();

if (tonumber(trigger[‘deviceID’])==tonumber(motionID) or trigger[‘deviceID’])==tonumber(motionID2) or trigger[‘deviceID’])==tonumber(motionID3)) then
if (tonumber(motion)==1 or tonumber(motion2)==1 or tonumber(motion3)==1) then
fiber:call(lightID, “turnOn”);
fibaro:debug(‘Motion detected. Light on!’);
– no motion anymore
elseif (tonumber(motion)==0 and tonumber(motion2)==0 and tonumber(motion3)==0) then
fibaro:debug(‘No motion. Light off!’)
fiber:call(lightID, “turnOff”);
end
end

Das war nur ein Beispiel, die IDs musst du natürlich an deine anpassen. Der Fehler tritt auf, da es ein Fehler beim Kopieren gab.

PS: Dafür kannst du auch das Skript nutzen:

https://www.siio.de/kleine-lua-scripte-teil-5-bewegung-im-raum-erkennen/

Gruß

Hi,
mir fehlt noch das Verständnis über die IDs und über die Logik der LUA.

Letzte Frage:
muss ich hier, in dem if Bereich auch noch irgendwelche ID´s eingeben oder Teile ändern:

if (tonumber(trigger[‚deviceID‘])==tonumber(motionID) or trigger[‚deviceID‘])==tonumber(motionID2) or trigger[‚deviceID‘])==tonumber(motionID3)) then
if (tonumber(motion)==1 or tonumber(motion2)==1 or tonumber(motion3)==1) then
fiber:call(lightID, “turnOn”);
fibaro:debug(‚Motion detected. Light on!‘);

Es steht oft in den Beispielen immer nur die IDs anpassen usw.

Danke für die Antwort.
Beste Grüße
ceko

Hi,

Das kommt drauf an, wie Du die Variablen oben deklariert hast.
Wenn du zB oben motion3 gelöscht hast, musst du den ganzen Code bereinigen.

Viele Grüße Hoggle

Hallo Hoggle,

also das hier: if (tonumber(trigger[‚deviceID‘] brauch ich nicht noch mit einer device ID bestücken?

Oder reicht das die IDs zu ändern nur in dem oberen Bereich, also header und die deklaration der Variablen?

Ich gebe zu, es wirkt einfach, aber leider laufen so einigen LUA scripte nicht bei mir und ich teste und teste und verwirre mich.
Eine kleine Erklärung als topic für noobs wäre sehr hilfreich, wo man welche Variablen dann ändert, zumindest für mich.

Danke euch allen sehr für die Antworten.
Gruß
ceko

Du musst die lokalen Variablen nur oben ändern. Im Skript nicht.

Gruß

Wenn Du keine drei Motions einsetzt - hast Du mal nach einem alternativen Script geschaut, z.B.:
https://www.siio.de/die-perfekte-lichtsteuerung-mit-fibaro-lua-update-1/

https://www.siio.de/lichtsteuerung-teil-2-fibaro-tageszeiten-variable-via-lua-setzen/