fork download
  1. -- Constants
  2. local ALARM_INPUT = 6 -- Шлейф для тревоги
  3.  
  4. local INPUT_STATE = {
  5. OFF = 0,
  6. ON = 1
  7. }
  8.  
  9. -- Simple logger implementation
  10. local logger = {
  11. debug = function(msg) print("[DEBUG] " .. tostring(msg)) end,
  12. info = function(msg) print("[INFO] " .. tostring(msg)) end,
  13. warning = function(msg) print("[WARNING] " .. tostring(msg)) end,
  14. error = function(msg) print("[ERROR] " .. tostring(msg)) end
  15. }
  16.  
  17. -- AccessControl class definition
  18. local AccessControl = {}
  19. AccessControl.__index = AccessControl
  20.  
  21. -- Utility function to read controller token
  22. function AccessControl:read_controller_token()
  23. local success, token = pcall(function()
  24. -- Попытка чтения токена из системной конфигурации
  25. -- Предполагается, что токен хранится в конфигурации контроллера
  26. return pacs.get_controller_token() -- Предполагаемый метод API
  27. end)
  28.  
  29. if not success then
  30. logger.error("Ошибка при чтении токена контроллера: " .. tostring(token))
  31. return nil
  32. end
  33.  
  34. if not token then
  35. logger.warning("Токен контроллера не найден, используется значение по умолчанию: 1")
  36. return 1
  37. end
  38.  
  39. logger.info("Успешно получен токен контроллера: " .. tostring(token))
  40. return token
  41. end
  42.  
  43. -- Constructor
  44. function AccessControl:create()
  45. local instance = {}
  46. setmetatable(instance, AccessControl)
  47. instance.access_point = nil -- Будет установлено при инициализации
  48. return instance
  49. end
  50.  
  51. -- Initialization
  52. function AccessControl:init()
  53. logger.debug(">> Инициализация системы контроля доступа...")
  54.  
  55. -- Получаем токен контроллера
  56. self.access_point = self:read_controller_token()
  57.  
  58. if not self.access_point then
  59. logger.error("!!! Критическая ошибка: Не удалось инициализировать токен контроллера !!!")
  60. return false
  61. end
  62.  
  63. -- Добавляем слушателя событий
  64. -- Simulate fec API for testing
  65. _G.fec = _G.fec or {
  66. add_listener = function(name, listener)
  67. logger.info("Добавлен слушатель: " .. name)
  68. end,
  69. TYPE = {
  70. RADIAL_INPUT = "RADIAL_INPUT"
  71. }
  72. }
  73.  
  74. -- Simulate pacs API for testing
  75. _G.pacs = _G.pacs or {
  76. block = function(point)
  77. logger.info("Блокировка точки доступа: " .. tostring(point))
  78. end,
  79. unblock = function(point)
  80. logger.info("Разблокировка точки доступа: " .. tostring(point))
  81. end,
  82. get_controller_token = function()
  83. return 2 -- Simulated token value
  84. end
  85. }
  86.  
  87. fec.add_listener("access_control", self)
  88.  
  89. logger.info("Инициализация завершена. Активная точка доступа: " .. tostring(self.access_point))
  90. return true
  91. end
  92.  
  93. -- Alarm handler
  94. function AccessControl:on_alarm_triggered()
  95. logger.error("!!! Тревога в шлейфе #6 !!! Блокировка точки доступа " .. tostring(self.access_point))
  96.  
  97. local success, error = pcall(function()
  98. pacs.block(self.access_point)
  99. end)
  100.  
  101. if not success then
  102. logger.error("Ошибка при блокировке точки доступа: " .. tostring(error))
  103. end
  104. end
  105.  
  106. -- FEC object processor
  107. function AccessControl:process_fec_object(object)
  108. if object.type == fec.TYPE.RADIAL_INPUT and object.id == ALARM_INPUT then
  109. local state = object.state
  110. if state == INPUT_STATE.ON then
  111. self:on_alarm_triggered()
  112. else
  113. logger.info("Тревога снята в шлейфе #6")
  114. local success, error = pcall(function()
  115. pacs.unblock(self.access_point)
  116. end)
  117.  
  118. if not success then
  119. logger.error("Ошибка при разблокировке точки доступа: " .. tostring(error))
  120. end
  121. end
  122. end
  123. end
  124.  
  125. -- FEC object change handler
  126. function AccessControl:on_fec_object_changed(panel, object)
  127. if panel == 0 then
  128. self:process_fec_object(object)
  129. end
  130. end
  131.  
  132. -- System initialization
  133. local function initialize_system()
  134. local accessControl = AccessControl:create()
  135. local init_success = accessControl:init()
  136.  
  137. if init_success then
  138. logger.info("=== Система контроля доступа успешно инициализирована ===")
  139. else
  140. logger.error("=== Ошибка инициализации системы контроля доступа ===")
  141. end
  142.  
  143. return accessControl
  144. end
  145.  
  146. -- Return the initialization function instead of calling it
  147. return initialize_system
  148.  
Success #stdin #stdout 0s 5276KB
stdin
Standard input is empty
stdout
Standard output is empty