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.
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")) > 0 ) and (tonumber(fibaro:getValue(switch, "value"))) < 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.
--[[
%% 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
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
--[[
%% 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
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