Das Skript habe ich von hier aus dem Forum. Es kann viel mehr als ich brauche, hab mich allerdings noch nicht getraut die für mich unnötigen Teile rauszulöschen. Sollte ich vielleicht gleich mit der Änderung kombinieren, aber ich trau mich nicht wirklich da es gerade so gut läuft
Hier noch das Skript so wie es jetzt ist:
--[[
%% properties
128 value
%% events
%% globals
--]]
-- Löst bei den eingestellten Kontakten eine Aktivierung der
-- Tür und Fenstersensoren aus (Scharf/Unscharf)
-- notwendige IDs
local sensorID = {30,113,99} -- IDs der Sensoren
local doorlockID = {} -- IDs der doorlocks
-- zusätzliche Optionen
local own_action = false -- eigene Aktionen ausführen; Funktionen müssen befüllt werden
local disarmed_bug = false -- Firmware Bug umgehen
-- eigene Funktionen
function actionsafterArmed()
Debug('green','Führe eigene Funktionen nach dem Schärfen aus')
end
function actionsafterDisarmed()
Debug('green','Führe eigene Funktionen nach dem Entschärfen aus')
end
-- AB HIER NICHTS MEHR ÄNDERN
local trigger = fibaro:getSourceTrigger()
local rfid_value_status = ''
Debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span"))
end
function armedcheckSensorID(array)
for j=1, #sensorID do
if sensorID[j] ~= nil then
if (tonumber(fibaro:getValue(sensorID[j], 'armed')) ~= 0) then
return false
end
end
end
return true
end
-- Funktion für die Öffnung der Tür
function openDoor()
if (doorlockID[0] ~= nil) then
Debug('yellow','Türschlösser werden geöffnet.')
for j=0, #doorlockID do
if doorlockID[j] ~= nil then
fibaro:call(doorlockID[j],'unsecure')
end
end
end
end
function setArmedStatus(set_status)
if set_status then
Debug('green','Sensoren werden scharf geschaltet.')
for k=1, #sensorID do
if sensorID[k] ~= nil then
if (tonumber(fibaro:getValue(sensorID[k], 'value')) == 0) then
fibaro:call(sensorID[k], 'setArmed', '1')
else
local sensorname = fibaro:getName(sensorID[k])
local sensorroom = fibaro:getRoomNameByDeviceID(sensorID[k])
Debug('red','ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher. Sende Push.')
fibaro:setGlobal('PushOver',"HC2-Alarm,ACHTUNG: " .. sensorname .. " im Raum: " .. sensorroom .. " nicht sicher.",1,siren)
end
end
end
else
Debug('green','Sensoren werden entschärft.')
for j=1, #sensorID do
if sensorID[j] ~= nil then
if (disarmed_bug) then
setArmed(sensorID[j])
else
fibaro:call(sensorID[j], 'setArmed', '0')
end
end
end
end
end
function setArmed(deviceId)
local dev = api.get('/devices/' .. deviceId)
dev.properties.armed = false
api.put('/devices/' .. deviceId, dev)
end
-- Funktion zum Anlegen einer Globalen Variablen
function globalVar(var,val)
local http = net.HTTPClient()
http:request("http://127.0.0.1:11111/api/globalVariables", {
options = {
method = 'POST',
headers = {},
data = '{"name":"'..var..'","value":"'..val..'"}',
timeout = 10000
},
success = function(response)
local result = response.data;
if response.status == 200 or response.status == 201 then
Debug('green','Status: ' ..response.status.. ' - Variable wurde angelegt')
else
Debug('red','Error: ' ..response.status.. ' - Zugriff verweigert')
end
end,
error = function(err)
Debug('red','[ERROR] ' .. err)
end
})
end
if (trigger['type'] == 'property') then
Debug("grey",(os.date("%A %d %B %Y")))
local rfid_ID = tonumber(trigger['deviceID'])
local rfid_value = tonumber(fibaro:getValue(rfid_ID, 'value'))
if (rfid_value == 0) then
rfid_value_status = 'Away'
Debug('green', 'Türe zugesperrt - Status ' ..rfid_value_status.. ' gesetzt.')
setArmedStatus(true)
if (fibaro:getGlobal('PresentState') ~= nil) then
--Debug('green','Benötigte Variable PresentState erkannt.')
fibaro:setGlobal('PresentState', 'Away')
else
Debug('yellow','Benötigte Variable PresentState NICHT erkannt. Wird erstellt.')
globalVar('PresentState', 'Away')
end
local delay = tonumber(fibaro:getValue(sensorID[1], "armDelay"))
if (delay ~= 0) then
Debug('green','Arm-Delay erkannt. Arm-Delay: ' ..delay)
delay = delay + 1
fibaro:sleep(delay*1000)
end
if (not armedcheckSensorID(sensorID)) then
if (own_action) then
actionsafterArmed()
end
fibaro:setGlobal('PushOver',"Haustüre abgeschlossen,Alle Sensoren scharf,-1,none")
end
elseif (rfid_value == 1) then
rfid_value_status = 'Home'
Debug('green', 'Türe aufgesperrt - Status ' ..rfid_value_status.. ' gesetzt.')
setArmedStatus(false)
if (fibaro:getGlobal('PresentState') ~= nil) then
--Debug('green','Benötigte Variable PresentState erkannt.')
fibaro:setGlobal('PresentState', 'Home')
else
Debug('yellow','Benötigte Variable PresentState NICHT erkannt. Wird erstellt.')
globalVar('PresentState', 'Home')
end
if (armedcheckSensorID(sensorID)) then
if (own_action) then
actionsafterDisarmed()
end
fibaro:setGlobal('PushOver',"Haustüre geöffnet,Alarm deaktiviert,-1,none")
end
end
else
Debug('green','Szene manuell gestartet. Widget-Support deaktiviert.')
Debug('green','Hier werden noch weitere Funktionen folgen.')
end