Advertisement
Guest User

RFID Alarmanlage Daniel

a guest
Oct 3rd, 2016
248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.37 KB | None | 0 0
  1. --[[
  2. %% properties
  3. 177 value
  4. %% events
  5. %% globals
  6. --]]
  7.  
  8. -- notwendige IDs
  9. local sensorID = {9, 35, 119, 122, 125, 128, 131, 134, 137, 140, 143, 146} -- IDs der Sensoren
  10. local phoneID = {25} -- IDs der Handys
  11. local doorlockID = {} -- IDs der doorlocks
  12.  
  13. -- zusätzliche Optionen
  14. local own_action = true -- eigene Aktionen ausführen; Funktionen müssen befüllt werden
  15. local disarmed_bug = false -- Firmware Bug umgehen
  16.  
  17. -- eigene Funktionen
  18. function actionsafterArmed()
  19.   fibaro:debug('Führe eigene Funktionen nach dem Schärfen aus')
  20.   fibaro:call(25, 'sendPush', "ALARMANLAGE aktiv!")
  21. end
  22.  
  23. function actionsafterDisarmed()
  24.   fibaro:debug('Führe eigene Funktionen nach dem Entschärfen aus')
  25. end
  26.  
  27. -- AB HIER NICHTS MEHR ÄNDERN
  28. local trigger = fibaro:getSourceTrigger()
  29. local rfid_value_status = ''
  30.  
  31. Debug = function ( color, message )
  32.   fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span"))
  33. end
  34.  
  35. function armedcheckSensorID(array)
  36.   for j=1, #sensorID do
  37.     if sensorID[j] ~= nil then
  38.       if (tonumber(fibaro:getValue(sensorID[j], 'armed')) ~= 0) then
  39.           return false
  40.       end
  41.     end
  42.   end
  43.   return true
  44. end
  45.  
  46. -- Funktion für die Öffnung der Tür
  47. function openDoor()
  48.     if (doorlockID[0] ~= nil) then
  49.     fibaro:debug('Türschlösser werden geöffnet.')
  50.     for j=0, #doorlockID do
  51.      if doorlockID[j] ~= nil then
  52.        fibaro:call(doorlockID[j],'unsecure')
  53.      end
  54.     end
  55.   end
  56.  end
  57.  
  58. -- Funktion zum Versenden der Push
  59. function sendPush(text)
  60.  if (phoneID[1] ~= nil) then
  61.   for i=1, #phoneID do
  62.      if phoneID[i] ~= nil then
  63.        fibaro:debug('Versende Push an ID ' ..phoneID[i])
  64.        fibaro:call(phoneID[i],'sendPush', text, 'alarm')
  65.      end
  66.   end
  67.  end
  68. end
  69.  
  70. function setArmedStatus(set_status)
  71.   if set_status then
  72.     fibaro:debug('Sensoren werden scharf geschaltet.')
  73.     for k=1, #sensorID do
  74.      if sensorID[k] ~= nil then
  75.       if (tonumber(fibaro:getValue(sensorID[k], 'value')) == 0) then
  76.        fibaro:call(sensorID[k], 'setArmed', '1')
  77.       else
  78.        local sensorname = fibaro:getName(sensorID[k])
  79.        local sensorroom = fibaro:getRoomNameByDeviceID(sensorID[k])
  80.        fibaro:debug('ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher. Sende Push.')
  81.        sendPush('ACHTUNG: ' .. sensorname .. ' im Raum: ' .. sensorroom .. ' nicht sicher.')
  82.       end
  83.      end
  84.      end
  85.   else
  86.     fibaro:debug('Sensoren werden entschärft.')
  87.     for j=1, #sensorID do
  88.      if sensorID[j] ~= nil then
  89.       if (disarmed_bug) then
  90.        setArmed(sensorID[j])
  91.       else
  92.        fibaro:call(sensorID[j], 'setArmed', '0')
  93.       end
  94.      end
  95.     end
  96.   end
  97. end
  98.  
  99. function setArmed(deviceId)
  100.   local dev = api.get('/devices/' .. deviceId)
  101.   dev.properties.armed = false
  102.   api.put('/devices/' .. deviceId, dev)
  103. end
  104.  
  105. -- Funktion zum Anlegen einer Globalen Variablen
  106. function globalVar(var,val)
  107.   local http = net.HTTPClient()
  108.   http:request("http://127.0.0.1:11111/api/globalVariables", {
  109.     options = {
  110.     method = 'POST',
  111.     headers = {},
  112.     data = '{"name":"'..var..'","value":"'..val..'"}',
  113.     timeout = 10000
  114.   },
  115.   success = function(response)
  116.             local result = response.data;
  117.             if response.status == 200 or response.status == 201 then
  118.               fibaro:debug('Status: ' ..response.status.. ' - Variable wurde angelegt')
  119.             else
  120.               fibaro:debug('Error: ' ..response.status.. ' - Zugriff verweigert')
  121.             end
  122.             end,
  123.   error = function(err)
  124.           fibaro:debug('[ERROR] ' .. err)
  125.           end
  126.   })
  127. end
  128.  
  129. if (trigger['type'] == 'property') then
  130.  fibaro:debug('RFID-Szene 3.2 (Official) gestartet.')
  131.  local rfid_ID = tonumber(trigger['deviceID'])
  132.  local rfid_value = tonumber(fibaro:getValue(rfid_ID, 'value'))
  133.   if (rfid_value == 1) then
  134.     rfid_value_status = 'Away'
  135.     Debug('red', 'Status ' ..rfid_value_status.. ' gesetzt.')
  136.     setArmedStatus(true)
  137.     if (fibaro:getGlobal('PresentState') ~= nil) then
  138.      fibaro:debug('Benötigte Variable PresentState erkannt.')
  139.      fibaro:setGlobal('PresentState', 'Away')
  140.     else
  141.      fibaro:debug('Benötigte Variable PresentState NICHT erkannt. Wird erstellt.')
  142.      globalVar('PresentState', 'Away')
  143.     end
  144.     local delay = tonumber(fibaro:getValue(sensorID[1], "armDelay"))
  145.       if (delay ~= 0) then
  146.        fibaro:debug('Arm-Delay erkannt. Arm-Delay: ' ..delay)
  147.        delay = delay + 1
  148.        fibaro:sleep(delay*1000)
  149.       end
  150.     if (not armedcheckSensorID(sensorID)) then
  151.       if (own_action) then
  152.         actionsafterArmed()
  153.       end
  154.       sendPush('ALARMANLAGE aktiv!')
  155.     end
  156.   elseif (rfid_value == 0) then
  157.     rfid_value_status = 'Home'
  158.     Debug('green', 'Status ' ..rfid_value_status.. ' gesetzt.')
  159.     setArmedStatus(false)
  160.     if (fibaro:getGlobal('PresentState') ~= nil) then
  161.      fibaro:debug('Benötigte Variable PresentState erkannt.')
  162.      fibaro:setGlobal('PresentState', 'Home')
  163.     else
  164.      fibaro:debug('Benötigte Variable PresentState NICHT erkannt. Wird erstellt.')
  165.      globalVar('PresentState', 'Home')
  166.     end
  167.      if (own_action) then
  168.        actionsafterDisarmed()
  169.      end
  170.      sendPush('ALARMANLAGE inaktiv!')
  171.      openDoor()
  172.   end
  173. else
  174.     fibaro:debug('Szene manuell gestartet. Widget-Support deaktiviert.')
  175.     fibaro:debug('Hier werden noch weitere Funktionen folgen.')
  176. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement