Логика формирования событий такая:
- Изменение состояния контроллера - событие формируется.
- Далее оно сохраняется в БД (после прохождения фильтров регистрации, см. Фильтры событий).
- После сохранения оно пересылается по всем открытым сокетам, если соответствует условиям фильтрации (!Это другой вид фильтров - на асинхронную передачу, действующих только в течении сессии!), в виде:
{"event":{"id":40140,"date":1629967880,"timezone_offset":-10800,"code":4,"category":1, "number":0}}
Событие будет передано по конкретному сокету, если установлен фильтр на передачу вида:
{"set":"event_acl","event_acl":[{"code":1,"allow":true},{"code":4,"allow":true},{"allow":false}]}
(Здесь фильтр установлен на приём событий с кодами 1 и 4, остальные пересылаться не будут).
Т.е. сторонний софт после открытия соединения и авторизации, если хочет принимать определённые события асинхронно (без запроса, в момент их формирования), должен передать кадр “set”:”event_acl”. Для приёма всего, без разбора, следующий кадр -
{"set": "event_acl", "event_acl": [{"allow":"true"}]}
Вариант работы по событиям:
- Подключение.
- Авторизация. (попытка установки фильтра п.3 -> требование авторизации -> авторизация)
- Установка фильтра.
- Запрос событий, и сохранение их в собственной БД.
- Запрос состояния.
- Далее, любое изменение состояния контроллера будет сопровождаться формированием (соответствующего этому изменению) события. Контроллер передаёт это событие асинхронно.
Пример пп. 2,3,6:
софт ->
{"set": "event_acl", "event_acl": [{"allow": "true"}]}
контроллер ->
{"event":"need_auth","need_auth":{"salt":"qewarvhn"}}
софт ->
{"set":"auth","auth":{"hash":"65ccf195f4983bb4951bbf38f58da071"}}
контроллер ->
{"answer":{"auth":"ok","set":"own"},"auth":{"hash":"65ccf195f4983bb4951bbf38f58da071"}}
софт -> // Вот здесь повтор запроса после успешной авторизации!
{"set": "event_acl", "event_acl": [{"allow": "true"}]}
контроллер ->
{"answer":{"event_acl":"ok","set":"own"},"event_acl":[{"allow":"true"}]}
…..
{"event":{"id":151449,"date":1744284422,"code":103,"category":1,"number":1}}
Установка фильтра принимаемых событий.
Установка:
События формируемые контроллером могут передаваться асинхронно, в момент формирования (в дополнение к получению событий по запросу). Для получения асинхронных событий надо настроить фильтры event_acl.
Внутри фильтра все поля объединяются по «И», фильтры объединяются по «ИЛИ».
Параметры фильтра совпадают с полями событий. Событие перед отправкой проходит через все фильтры до того, который его пропускает.
{
"set": "event_acl",
"event_acl": [
{
"allow":"true",
"category":"0",
"number":"1",
"dir":"1"
},
{
"allow":"true",
"number":"1",
"dir":"0"
},
{
"allow":"false"
}
]
}
Ответ:
{
"answer":{"event_acl":"ok","set":"own"},
"event_acl": [
{
"allow":"true",
"category":"0",
"number":"1",
"dir":"1"
},
{
"allow":"true",
"number":"1",
"dir":"0"
},
{
"allow":"false"
}
]
}
Количество событий.
Запрос:
{
"get":"event_count"
}
Ответ:
{
"answer":{"event_count":"ok"},
"event_count":{"value":150001}
}
Получение событий.
Запрос:
{
"get":"event",
"event" : {
"limit":20,
"offset":0,
"category":["0","1","3","4","5"],
"start":-10800,
"stop":2082747540
}
}
Ответ:
{"answer":{"event":"ok","count":0},"event":{"id":1469,"date":1790076251,"timezone_offset":-10800,"code":8,"category":0,"number":0,"dir":1,"card":"686409"}}
{"answer":{"event":"ok","count":1},"event":{"id":1468,"date":1790036837,"timezone_offset":-10800,"code":302,"category":4,"number":2}}
{"answer":{"event":"ok","count":2},"event":{"id":1467,"date":1790036826,"timezone_offset":-10800,"code":303,"category":4,"number":2}}
{"answer":{"event":"ok","count":3},"event":{"id":1466,"date":1789981802,"timezone_offset":-10800,"code":302,"category":4,"number":2}}
{"answer":{"event":"ok","count":4},"event":{"id":1465,"date":1789981801,"timezone_offset":-10800,"code":302,"category":4,"number":3}}
{"answer":{"event":"ok","count":5},"event":{"id":1464,"date":1789981801,"timezone_offset":-10800,"code":302,"category":4,"number":1}}
{"answer":{"event":"ok","count":6},"event":{"id":1463,"date":1789981801,"timezone_offset":-10800,"code":302,"category":4,"number":0}}
{"answer":{"event":"ok","count":7},"event":{"id":1462,"date":1789981800,"timezone_offset":-10800,"code":165,"category":3,"number":0}}
{"answer":{"event":"ok","count":8},"event":{"id":1461,"date":1789981800,"timezone_offset":-10800,"code":178,"category":4}}
{"answer":{"event":"ok","count":9},"event":{"id":1460,"date":1789980298,"timezone_offset":-10800,"code":103,"category":4,"number":0,"dir":1}}
{"answer":{"event":"ok","count":10},"event":{"id":1459,"date":1789980297,"timezone_offset":-10800,"code":102,"category":4,"number":0,"dir":1}}
{"answer":{"event":"ok","count":11},"event":{"id":1458,"date":1789980296,"timezone_offset":-10800,"code":103,"category":4,"number":0,"dir":0}}
{"answer":{"event":"ok","count":12},"event":{"id":1457,"date":1789980296,"timezone_offset":-10800,"code":102,"category":4,"number":0,"dir":0}}
{"answer":{"event":"ok","count":13},"event":{"id":1456,"date":1789980295,"timezone_offset":-10800,"code":103,"category":4,"number":0,"dir":0}}
{"answer":{"event":"ok","count":14},"event":{"id":1455,"date":1789980295,"timezone_offset":-10800,"code":102,"category":4,"number":0,"dir":0}}
{"answer":{"event":"ok","count":15},"event":{"id":1454,"date":1789980295,"timezone_offset":-10800,"code":103,"category":4,"number":0,"dir":1}}
{"answer":{"event":"ok","count":16},"event":{"id":1453,"date":1789980293,"timezone_offset":-10800,"code":102,"category":4,"number":0,"dir":1}}
{"answer":{"event":"ok","count":17},"event":{"id":1452,"date":1789980292,"timezone_offset":-10800,"code":103,"category":4,"number":0,"dir":0}}
{"answer":{"event":"ok","count":18},"event":{"id":1451,"date":1789980292,"timezone_offset":-10800,"code":102,"category":4,"number":0,"dir":0}}
{"answer":{"event":"ok","count":19},"event":{"id":1450,"date":1789980292,"timezone_offset":-10800,"code":103,"category":4,"number":0,"dir":1}}
Удаление всех событий.
Запрос:
{
"control":"event",
"event" : {}
}
Ответ:
{
"result":{"event":"ok"},
"event":{ }
}
Удаление событий с фильтрацией.
Запрос:
{
"control":"event",
"event" : {
"limit":1,
"offset":0,
"category":["0","1","3","4","5"],
"code":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],
"start":-10800,
"stop":2082747540
}
}
Ответ:
{
"result":{"event":"ok"},
"event":{
"limit":1,
"offset":0,
"category":["0","1","3","4","5"],
"code":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],
"start":-10800,
"stop":2082747540
}
}
Параметры фильтра
allow — Пропуск события через фильтр
`true` - да
`false` - нет
category — Категория, int : 0 — 6
code — Код события, int : 0 — ?
number — Номер ресурса (ИУ, ФК), int : 0 — ?
dir — Номер направления (ИУ), int : 0 — 1
Параметры запроса
limit — Ограничение событий в выборке, int 1 — 20
offset — Сдвиг выборки событий относительно 1-го (самого позднего) события, int 0 — 4294967295
start/stop — Начало/конец диапазона в сек от 01.01.1970 (включительно), int
start_id/stop_id — Начало/конец диапазона по id событий (включительно), int
category — Категория, массив строк : [“0”,”1”,”3”,”4”,”5”]
done — Необязательный параметр запроса. Признак окончания передачи событий в ответ на запрос. Если в запросе выставлен в true, то после последнего переданного контроллером события будет дополнительны кадр с объектом {done:true}.
Параметры ответа
id — Уникальный идентификатор события, присваивается БД контроллера (если событие не регистрируется в БД в соответствии с фильтрами, то значение id -1 (4294967295)), int
date — Дата в секундах с 1970 г по 2038 г(точность до 1 секунды), int
category — Категория, int : 0 — 6
code — Код события, int : 0 — ?
number — Номер ресурса (ИУ, ФК), int : 0 — ?
dir — Номер направления (ИУ), int : 0 — 1
card — Код идентификатора, строка : 686409
Коды категорий
0 - События, связанные с доступом по идентификатору
1 - События, связанные с доступом без идентификаторов
3 - События, связанные с состояниями входов / выходов
4 - События, связанные с функционированием
5 - Сервисные события
Коды событий
4 Запрет прохода
5 Запрет прохода, смена РКД
7 Запрет прохода неисправны датчики ИУ
8 Запрет прохода по команде оператора ПК
9 Запрет прохода по команде от ДУ
10 Отказ от прохода
11 Проход
17 ИУ не закрыто после прохода по карте
18 Запрет прохода - не задано время разблокировки
96 Проход по команде от ДУ
97 Проход по команде от оператора ПК
99 Несанкционированный проход через ИУ (взлом ИУ)
100 ИУ не закрыто после прохода по команде от ДУ
101 ИУ не закрыто после прохода по команде от оператора ПК
102 ИУ разблокирован
103 ИУ заблокирован
160 Активизация входа
161 Нормализация входа
162 Активизация выхода
163 Нормализация выхода
164 Активизация входа FireAlarm
165 Нормализация входа FireAlarm
176 Включение питания контроллера
177 Выключение питания контроллера
178 Перезапуск контроллера
179 Неисправность ИП
180 Восстановление ИП
181 Корпус контроллера открыт
182 Корпус контроллера закрыт
183 Очистка событий журнала регистрации
184 Установка РКД «Открыто» по команде оператора ПК
185 Установка РКД «Контроль» по команде оператора ПК
201 Перезапуск приложения
302 Восстановление связи со считывателем
303 Нарушение связи со считывателем
4096 Изменение настроек