Ich habe das Schloss jetzt eingebaut und in Fibaro eingebunden. Klappt alles bestens
Jetzt würde ich nur gerne den Arlarm aktivieren / deaktiveren beim öffnen / schließen vom Schloss. Aktuell mache ich das mit dem einem RFID Chip und folgender Szene:
--[[
%% properties
131 value
%% events
%% globals
--]]
-- notwendige Ids
local sensorID = {60, 62, 64, 162, 48, 156, 141, 159, 56, 54, 171, 174, 169} -- IDs der Sensoren
local phoneID = {177, 179} -- IDs der Handys
local doorlockID = {183} -- 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()
fibaro:debug('Führe eigene Funktionen nach dem Schärfen aus')
end
function actionsafterDisarmed()
fibaro:debug('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
fibaro:debug('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
-- Funktion zum Versenden der Push
function sendPush(text)
if (phoneID[1] ~= nil) then
for i=1, #phoneID do
if phoneID[i] ~= nil then
fibaro:debug('Versende Push an ID ' ..phoneID[i])
fibaro:call(phoneID[i],'sendPush', text, 'alarm')
end
end
end
end
function setArmedStatus(set_status)
if set_status then
fibaro:debug('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])
fibaro:debug('ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher. Sende Push.')
sendPush('ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher.')
end
end
end
else
fibaro:debug('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
fibaro:debug('Status: ' ..response.status.. ' - Variable wurde angelegt')
else
fibaro:debug('Error: ' ..response.status.. ' - Zugriff verweigert')
end
end,
error = function(err)
fibaro:debug('[ERROR] ' .. err)
end
})
end
if (trigger['type'] == 'property') then
fibaro:debug('RFID-Szene 3.1 (Official) gestartet.')
local rfid_ID = tonumber(trigger['deviceID'])
local rfid_value = tonumber(fibaro:getValue(rfid_ID, 'value'))
if (rfid_value == 1) then
rfid_value_status = 'Away'
Debug('red', 'Status ' ..rfid_value_status.. ' gesetzt.')
setArmedStatus(true)
if (fibaro:getGlobal('PresentState') ~= nil) then
fibaro:debug('Benötigte Variable PresentState erkannt.')
fibaro:setGlobal('PresentState', 'Away')
else
fibaro:debug('Benötigte Variable PresentState NICHT erkannt. Wird erstellt.')
globalVar('PresentState', 'Away')
end
local delay = tonumber(fibaro:getValue(sensorID[1], "armDelay"))
if (delay ~= 0) then
fibaro:debug('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
sendPush('ALARMANLAGE aktiv!')
end
elseif (rfid_value == 0) then
rfid_value_status = 'Home'
Debug('green', 'Status ' ..rfid_value_status.. ' gesetzt.')
setArmedStatus(false)
if (fibaro:getGlobal('PresentState') ~= nil) then
fibaro:debug('Benötigte Variable PresentState erkannt.')
fibaro:setGlobal('PresentState', 'Home')
else
fibaro:debug('Benötigte Variable PresentState NICHT erkannt. Wird erstellt.')
globalVar('PresentState', 'Home')
end
if (armedcheckSensorID(sensorID)) then
if (own_action) then
actionsafterDisarmed()
end
sendPush('ALARMANLAGE inaktiv!')
openDoor()
end
end
else
fibaro:debug('Szene manuell gestartet. Widget-Support deaktiviert.')
fibaro:debug('Hier werden noch weitere Funktionen folgen.')
end
ID 183 ist das Türschloss. Ich habe das jetzt mal in die Szene eingetragen, aber es passiert nichts, wenn es geschlossen wird… Am liebsten würde ich es so haben, dass sich erst einmal nur der Alarm deaktiviert. Wir haben aktuell die Tür abgeschlossen wegen unserer kleinen Tochter. Nur wenn dann der Alarm automatisch eingeschaltet wird, können wir z.B. die Terrassentür nicht mehr öffnen. Deshalb erst einmal nur zum deaktivieren des Alarms.
Kann mir da jemand helfen?