Hi,
so scheint es zu funktionieren, habe es der Übersichtlichkeit halber zusammengestrichen, da ich ja nur über PresentState schalten will.
Gibt es noch einen Denkfehler?
--[[
%% properties
PresentState
%% globals
--]]
-- Szene RFID-Alarm Update 3 von Boomx angepasst
-- HIER DIE ARRAYS ANPASSEN (neue IDs können einfach hinzugefügt werden)
--local tagReader = 96 -- ID des RFID-Leser (bitte auch in dem Header ändern)
local sensorID = {297, 232, 220, 51, 22, 132, 126, 32, 180, 129, 121, 263, 226, 352, 356, } -- IDs der Sensoren
local phoneID = {158, 162} -- IDs der Handys, an die eine Push geschickt werden soll
local countID = 1000 -- Anzahl eurer devices (Muss nicht zwangsläufig geändert werden)
-- OPTIONEN
-- FUNKTIONEN FÜR AKTIONEN (z.B. TTS, LICHT AUS)
------------------------------------------------
-- Aktionen nach dem Schärfen mit Delay, bvor die Sensoren geschäft sind
function actionsbeforeArmed()
fibaro:debug('Führe eigene Funktionen vor Schärfen aus')
fibaro:call(349, "pressButton", "1");
fibaro:debug("Licht rot an");
fibaro:sleep(5000);
fibaro:call(349,"pressButton","11");
fibaro:debug("Licht rot aus");
fibaro:sleep(10000);
end
-- Aktionen nach dem endgültigen Schärfen
function actionsafterArmed()
fibaro:debug('Führe eigene Funktionen nach dem Schärfen aus')
fibaro:call(383, 'secure')
end
-- Aktionen nach dem Entschärfen
function actionsafterDisarmed()
fibaro:debug('Führe eigene Funktionen nach dem Entschärfen aus')
fibaro:call(349, "pressButton", "4");
fibaro:debug("Licht grün an");
fibaro:sleep(5000);
fibaro:call(349,"pressButton","11");
fibaro:debug("Licht grün aus");
end
-------------------------------------------------
-- OPTIONEN ENDE -- AB HIER NICHTS MEHR ÄNDERN --
-- Funktionen:
function armedcheckSensorID(array)
for j=1, countID do
if sensorID[j] ~= nil then
if (tonumber(fibaro:getValue(sensorID[j], 'armed')) == 0) then
return false
end
end
end
return true
end
Debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span"))
end
-- Start Script:
if (fibaro:getGlobal('PresentState') == 'Away') then
fibaro:debug('Alarm gestartet - Haus verlassen')
if (own_action == 1) then
actionsbeforeArmed()
end
local delay = tonumber(fibaro:getValue(sensorID[1], "armDelay"))
if (delay ~= 0) then
fibaro:debug('Arm-Delay erkannt. Arm-Delay: ' ..delay)
end
for j=1, countID do
if sensorID[j] ~= nil then
if (tonumber(fibaro:getValue(sensorID[j], 'value')) == 0) then
fibaro:call(sensorID[j], 'setArmed', '1')
else
local sensorname = fibaro:getName(sensorID[j])
local sensorroom = fibaro:getRoomNameByDeviceID(sensorID[j])
fibaro:debug('ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher. Sende Push.')
for k=1, countID do
if phoneID[k] ~= nil then
fibaro:call(phoneID[k], 'sendPush', 'ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher.')
end
end
end
end
end
fibaro:debug('Warte ' .. delay .. ' Sekunden')
delay = delay + 1
fibaro:sleep(delay*1000)
if (fibaro:getGlobal('PresentState') == 'Away') then
if (armedcheckSensorID(sensorID)) then
if (own_action == 1) then
actionsafterArmed()
end
for l=1, countID do
if phoneID[l] ~= nil then
fibaro:call(phoneID[l], 'sendPush', 'Alarmanlage SCHARF')
end
end
fibaro:debug('Alle Sensoren geschärft. Sende Push')
if (doorlock) then
fibaro:call(doorlockID, 'secure')
fibaro:debug('doorlock vorhanden, Tür wurde geschlossen!')
end
else
fibaro:debug('Es konnten nicht alle Sensoren scharf geschaltet werden')
end
else
fibaro:debug('Alarm wurde während der Delay-Time deaktiviert')
end
elseif (fibaro:getGlobal('PresentState') == 'Home') then
fibaro:debug('Welcome@Home')
for m=1, countID do
if sensorID[m] ~= nil then
fibaro:call(sensorID[m], 'setArmed', '0')
end
end
if (armedcheckSensorID(sensorID)) then
fibaro:debug('Es konnten nicht alle Sensoren entschäft werden');
for t=1, countID do
if sensorID[t] ~= nil then
if (tonumber(fibaro:getValue(sensorID[t], 'armed')) == 1) then
local sensorname = fibaro:getName(sensorID[t])
local sensorroom = fibaro:getRoomNameByDeviceID(sensorID[t])
fibaro:debug('ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' konnte nicht entschärft werden. Sende Push.')
for o=1, countID do
if phoneID[o] ~= nil then
fibaro:call(phoneID[o], 'sendPush', 'ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht entschärft.')
end
end
end
end
end
else
fibaro:debug('Alle Sensoren entschärft. Sende Push')
if (doorlock) then
fibaro:call(doorlockID, 'unsecure')
fibaro:debug('doorlock vorhanden, Tür wurde geöffnet')
end
for l=1, countID do
if phoneID[l] ~= nil then
fibaro:call(phoneID[l], 'sendPush','Alarmanlage entschärft')
end
end
if (own_action == 1) then
actionsafterDisarmed()
end
end
end
if (fibaro:getGlobal('PresentState') ~= nil) then
local PresentState = fibaro:getGlobal('PresentState')
Debug( 'green', 'Die Variable PresentState wurde gefunden. Status: ' ..PresentState)
else
Debug( 'red', 'Die Variable PresentState wurde nicht gefunden. Bitte einrichten! rfid_alarm wird nicht mehr unterstützt.')
end
local delay = tonumber(fibaro:getValue(sensorID[1], 'armDelay'))
if (delay ~= 0) then
fibaro:debug('Arm-Delay erkannt. Arm-Delay: ' ..delay)
else
fibaro:debug('Kein Arm-Delay erkannt.')
end