Ich habe jetzt die Anlarmanlage soweit am laufen wie hier beschrieben:
https://www.siio.de/sicherheitalarm/so-aktivierst-du-deinen-alarm-mit-dem-rfid-tagreader/
Jetzt habe ich eine Frage:
Man bekommt eine Pushnachricht aufs Handy, wenn ein Sensor nicht scharf geschaltet werden kann da z. B. das Fenster noch offen ist. Da wir ab und an die Rollos unten haben aber das Fenster offen, wie kann man das einbinden:
Es soll geprüft werden, ob die Rollos beim betroffenen offenen fenster unten sind. Wenn die Rollos min. 90 % unten sind, soll der Sesnor am Fester nicht berücksichtigt werden.
Wie kann man das einbinden? Geht das?
Aktuell habe ich zum testen nur 1 Sensor eingebunden:
--[[
%% properties
131 value
%% events
%% globals
--]]
-- notwendige IDs
local sensorID = {48} -- IDs der Sensoren
local phoneID = {6} -- IDs der Handys
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()
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