Ich möchte das 2 Lampen bei Bewegung angehen. Es geht aber nur die “local switch = 836 – ID des Relay Switches” an. Die “local switch = 785 – ID des Relay Switches” bleibt dunkel.
--[[
%% properties
748 value
%% globals
--]]
-- VARIABLEN (Bewegungsmelder muss oben unter %% properties aufgeführt sein)
local scene = 114 -- ID dieser Szene
local motion = 748 -- ID des Bewegungssensors
local switch = 785 -- ID des Relay Switches
local switch = 836 -- ID des Relay Switches
-- 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(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 = 15;
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 zu 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
Ich verwende das Rauchalarm-Skript von Dir, nur finde ich da keinen Anhaltspunkt zu meinem Problem.
--[[
%% properties
136 value
779 value
140 value
576 value
180 value
170 value
192 value
174 value
%% globals
--]]
local sireneID = 77 -- ID der Sirene
local handyID = 646 -- ID des Handys
local handyID2 = 632 -- ID des Handys
local trigger = fibaro:getSourceTrigger()
local smokeID = tonumber(trigger['deviceID'])
local smoke = tonumber(fibaro:getValue(smokeID, "value"))
if (smoke == 1) then
local room = fibaro:getRoomNameByDeviceID(smokeID)
fibaro:debug('Rauch im Raum: ' .. room .. ' erkannt.')
fibaro:call(sireneID, 'turnOn')
fibaro:call(handyID, 'sendPush', 'ACHTUNG! Rauch im Raum: ' .. room .. ' erkannt!', 'smoke')
else
fibaro:debug('Kein Rauch erkannt. Fehlalarm');
end
local switch = {836, 785} -- ID des Relay Switches
for j=1, 10 do --max 10 Leuchten, ansonsten erhöhen
if switch[j] ~= nil then
fibaro:call(switch[j], "turnOn");
fibaro:debug("Schalte "..switch[j] .." ein");
end
end
Vielen Dank für die Hife. Die Lampen gehen nun bei Bewegung an aber nicht mehr aus.
[DEBUG] 17:27:46: Schalte 836 ein
[DEBUG] 17:27:46: Schalte 785 ein
[DEBUG] 17:27:46: line 111: attempt to concatenate local 'deviceId' (a table value)
for j=1, 10 do --max 10 Leuchten, ansonsten erhöhen
if switch[j] ~= nil then
fibaro:call(switch[j], "turnOff");
fibaro:debug("Schalte "..switch[j] .." aus");
end
end
Die Variable nur einmal befüllen. (Ganz am Anfang wo sie mal war)
das ist jetzt nicht ganz so elegant, aber mach es doch so wie in deinem Beispiel vom 8.10.
local handyID = 646 – ID des Handys
local handyID2 = 632 – ID des Handys
local switch = 785 – ID des Relay Switches
local switch = 836 – ID des Relay Switches
hiermit weist du der Variablen “switch” erst den Wert 785 zu, dann überschreibst du ihn mit dem Wert 836 - also wird auch nur 836 geschaltet.
Benne den 2. Switch z.b. switch2 und schalte dann switch und switch2.
Wenn du jetzt 10 Switche hättest wäre ein array schon angebrachter, aber so…
Vielen Dank, aber nun wird wieder nur eine Lampe geschalten:
--[[
%% properties
748 value
%% globals
--]]
-- VARIABLEN (Bewegungsmelder muss oben unter %% properties aufgeführt sein)
local scene = 114 -- ID dieser Szene
local motion = 748 -- ID des Bewegungssensors
local switch1 = 785 -- ID des Relay Switches
local switch = 836 -- ID des Relay Switches
-- 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(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 = 15;
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 zu 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
Zeile 9 löschen!
Zeile 10 durch: local switch = {836, 785} – ID des Relay Switches
ersetzen.
17 & 18 durch:
for j=1, 10 do --max 10 Leuchten, ansonsten erhöhen
if switch[j] ~= nil then
fibaro:call(switch[j], "turnOn");
fibaro:debug("Schalte "..switch[j] .." ein");
end
end
ersetzen.
31 durch:
for j=1, 10 do --max 10 Leuchten, ansonsten erhöhen
if switch[j] ~= nil then
fibaro:call(switch[j], "turnOff");
fibaro:debug("Schalte "..switch[j] .." aus");
end
end
ersetzen
43 & 44 durch:
for j=1, 10 do --max 10 Leuchten, ansonsten erhöhen
if switch[j] ~= nil then
fibaro:call(switch[j], "turnOff");
fibaro:debug("Schalte "..switch[j] .." aus");
end
end
--[[
%% properties
748 value
%% globals
--]]
-- VARIABLEN (Bewegungsmelder muss oben unter %% properties aufgeführt sein)
local scene = 114 -- ID dieser Szene
local motion = 748 -- ID des Bewegungssensors
local switch1 = 785 -- ID des Relay Switches
local switch = 836 -- ID des Relay Switches
-- 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(switch, "value"))) < 1 then
fibaro:call(switch1, "turnOn");
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 = 15;
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 zu verhindern
if (tonumber(fibaro:getValue(switch, "value"))) < 1 then
timer=1;
fibaro:call(switch1, "turnOff");
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(switch1, "turnOff");
fibaro:call(switch, "turnOff");
fibaro:debug("Timer abgelaufen/Schalte Licht aus");
fibaro:killScenes(scene);
end