Lichtschaltung mit 2 Bewegungsmelder

Liebe Gemeinde ich brauche eure Hilfe.

Ich schalte mein Wandlicht mit einem Bewegungsmelder ab einem gewissen Luxwert.
Die müsste der Sript aussehen, wenn ich 2 BM verwenden möchte?

--[[
%% properties
243 value -- ID Bewegungsmelder
245 value -- ID Lux Sensor
230 value -- ID Wandlicht
%% globals
--]]
-- VARIABLEN (Bewegungsmelder muss oben unter %% properties aufgeführt sein)
local scene = 129
local motion = 243
local sensor = 245
local switch = 230
-- Lösche doppelte Szene(n)
if (fibaro:countScenes()>1) then
fibaro:abort();
end
-- SCHALTE LICHT EIN & AUS
if (tonumber(fibaro:getValue(motion, "value")) > 0 )
and (tonumber(fibaro:getValue(sensor, "value")) < 50 )
and (tonumber(fibaro:getValue(switch, "value"))) < 1 then
fibaro:call(switch, "turnOn");
fibaro:debug("Schalte Licht ein");
end
-- Verzögerung in Sekunden nach der letzten erkannten Bewegung, bevor das Licht ausgeschaltet wird
if (tonumber(fibaro:getValue(switch, "value"))) > 0 then
local starttimer = 60;
local timer = (starttimer);
fibaro:debug("Starte Timer");

repeat
fibaro:sleep(1000);
-- Schalte Licht aus, wenn Schalter manuell betätigt wird und warte 10 Sekunden, um ein
-- versehentliches (erneutes) Aktivieren der Szene und verhindern
if (tonumber(fibaro:getValue(switch, "value"))) < 1 then
timer=1;
fibaro:call(switch, "turnOff");
fibaro:sleep(10000);
break
end
timer=timer-1;
-- Timer zurücksetzen, wenn neue Bewegung erkannt wird innherhalb der Verzögerungszeit
if (tonumber(fibaro:getValue(motion, "value"))) > 0
then timer=starttimer;
fibaro:debug("Resete Time, Bewegung erkannt bzw. Motionsensor sendet noch nicht (vgl. Parameter 6)");
end
until (timer<1)
-- Schalte Licht aus, wenn Timer vollständig abgelaufen ist
fibaro:call(switch, "turnOff");
fibaro:debug("Timer abgelaufen/Schalte Licht aus");
fibaro:killScenes(scene);
end

–[[
%% properties
243 value – ID Bewegungsmelder
… value – ID des 2.Bewegungsmelder
245 value – ID Lux Sensor
230 value – ID Wandlicht
%% globals
–]]
– VARIABLEN (Bewegungsmelder muss oben unter %% properties aufgeführt sein)
local scene = 129
local motion = 243
local motion1 = … – ID des 2. BW
local sensor = 245
local switch = 230
– Lösche doppelte Szene(n)
if (fibaro:countScenes()>1) then
fibaro:abort();
end
– SCHALTE LICHT EIN & AUS
if (tonumber(fibaro:getValue(motion, “value”)) > 0 )
or (tonumber(fibaro:getValue(motion1, “value”)) > 0 )
and (tonumber(fibaro:getValue(sensor, “value”)) < 50 )
and (tonumber(fibaro:getValue(switch, “value”))) < 1 then
fibaro:call(switch, “turnOn”);
fibaro:debug(“Schalte Licht ein”);
end
– Verzögerung in Sekunden nach der letzten erkannten Bewegung, bevor das Licht ausgeschaltet wird
if (tonumber(fibaro:getValue(switch, “value”))) > 0 then
local starttimer = 60;
local timer = (starttimer);
fibaro:debug(“Starte Timer”);

repeat
fibaro:sleep(1000);
– Schalte Licht aus, wenn Schalter manuell betätigt wird und warte 10 Sekunden, um ein
– versehentliches (erneutes) Aktivieren der Szene und verhindern
if (tonumber(fibaro:getValue(switch, “value”))) < 1 then
timer=1;
fibaro:call(switch, “turnOff”);
fibaro:sleep(10000);
break
end
timer=timer-1;
– Timer zurücksetzen, wenn neue Bewegung erkannt wird innherhalb der Verzögerungszeit
if (tonumber(fibaro:getValue(motion, “value”)) > 0 )
or (tonumber(fibaro:getValue(motion1, “value”)) > 0 )
then timer=starttimer;
fibaro:debug(“Resete Time, Bewegung erkannt bzw. Motionsensor sendet noch nicht (vgl. Parameter 6)”);
end
until (timer<1)
– Schalte Licht aus, wenn Timer vollständig abgelaufen ist
fibaro:call(switch, “turnOff”);
fibaro:debug(“Timer abgelaufen/Schalte Licht aus”);
fibaro:killScenes(scene);
end

Ich denke so könnte es gehen. Ich sehe gerade, dass alle Anführungszeichen fasch angezeigt weden.
Kannst du mir bitte schreiben wie ich einen Code richtig anzeigen kann, bekomme das einfach nicht hin.

script kopieren und beim Einfügen oben auf code klicken - einfügen und danach wieder code klicken.

Lieber karo - danke für deinen Tipp.
Das hab ich auch schon ausprobiert - funktioniert aber leider nicht ganz richtig.
Sobald ich den zweiten Bewegungsmelder mir or hinzufüge, ist dem ersten BM die Helligkeit egal und er schaltet bei jeder Bewegung.

– SCHALTE LICHT EIN & AUS
if (tonumber(fibaro:getValue(sensor, “value”)) < 50 )
and (tonumber(fibaro:getValue(motion, “value”)) > 0 )
or (tonumber(fibaro:getValue(motion1, "value")) &gt; 0 ) and (tonumber(fibaro:getValue(switch, "value"))) &lt; 1 then fibaro:call(switch, "turnOn"); fibaro:debug("Schalte Licht ein"); end

Also bei mir funktioniert das nicht. Ich habe auf code geklickt dann eingefügt und wieder auf code geklickt.
Jetzt sieht es so aus. Was mache ich falsch??
Probiere mal die Helligkeitsabfrage zuerst zu machen und dann die Melder.

jetzt ist es gleich wie vorher nur anders herum.


--[[
%% properties
243 value
118 value
245 value
230 value
%% globals
--]]
-- VARIABLEN (Bewegungsmelder muss oben unter %% properties aufgeführt sein)
local scene = 129
local motion = 243
local motion1 = 118
local sensor = 245
local switch = 230
-- Lösche doppelte Szene(n)
if (fibaro:countScenes()>1) then
fibaro:abort();
end
-- SCHALTE LICHT EIN & AUS
if (tonumber(fibaro:getValue(sensor, "value")) < 50 )
and (tonumber(fibaro:getValue(motion, "value")) > 0 )
or (tonumber(fibaro:getValue(motion1, "value")) > 0 )
and (tonumber(fibaro:getValue(switch, "value"))) < 1 then
fibaro:call(switch, "turnOn");
fibaro:debug("Schalte Licht ein");
end

Nehme mal oben in den “%% properties” den switch die 230 raus.

Hab einige Varianten ausprobiert - so funktioniert es!


-- SCHALTE LICHT EIN & AUS
if (tonumber(fibaro:getValue(sensor, "value")) < 50 )
and (tonumber(fibaro:getValue(motion, "value")) > 0 )
or (tonumber(fibaro:getValue(sensor, "value")) < 50 )
and (tonumber(fibaro:getValue(motion1, "value")) > 0 )
and (tonumber(fibaro:getValue(switch, "value"))) < 1 then
fibaro:call(switch, "turnOn");
fibaro:debug("Schalte Licht ein");
end

Nehme mal den switch raus, und mache es alles wie vorher. Ich denke der switch ist der Übeltäter, der triggert ständig mit.

Leider immer noch das gleiche Problem.


--[[
%% properties
243 value
118 value
245 value
%% globals
--]]
-- VARIABLEN (Bewegungsmelder muss oben unter %% properties aufgeführt
sein)
local scene = 133
local motion = 243
local motion1 = 118
local sensor = 245
local switch = 230
-- Lösche doppelte Szene(n)
if (fibaro:countScenes()>1) then
fibaro:abort();
end
-- SCHALTE LICHT EIN & AUS
if (tonumber(fibaro:getValue(sensor, "value")) < 50 )
and (tonumber(fibaro:getValue(motion, "value")) > 0 )
or (tonumber(fibaro:getValue(motion1, "value")) > 0 )
and (tonumber(fibaro:getValue(switch, "value"))) < 1 then
fibaro:call(switch, "turnOn");
fibaro:debug("Schalte Licht ein");
end

Hi Krema,

ich glaube da fehlt einfach nur eine 2. Klammer. Kannst du evtl. mal folgendes probieren?
So wie du es aktuell geschrieben hattest hat er nur verglichen “Wenn Helligkeit < 50 UND Motion ist ausgelöst ODER nur Motion 1 schalte Licht ein”

-- SCHALTE LICHT EIN & AUS
if (tonumber(fibaro:getValue(sensor, "value")) < 50 )
and ( (tonumber(fibaro:getValue(motion, "value")) > 0 )
or (tonumber(fibaro:getValue(motion1, "value")) > 0 ) )
and (tonumber(fibaro:getValue(switch, "value"))) < 1 then
fibaro:call(switch, "turnOn");
fibaro:debug("Schalte Licht ein");
end

Gruß Oli

Danke für den Tipp.
Mit dem setzen der beiden Klammern funktioniert der Skript perfekt!