View on GitHub

C02

SDK для работы с контроллером PERCo-C02

Логика формирования событий такая:

  1. Изменение состояния контроллера - событие формируется.
  2. Далее оно сохраняется в БД (после прохождения фильтров регистрации, см. Фильтры событий).
  3. После сохранения оно пересылается по всем открытым сокетам, если соответствует условиям фильтрации (!Это другой вид фильтров - на асинхронную передачу, действующих только в течении сессии!), в виде:
{"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"}]}

Вариант работы по событиям:

  1. Подключение.
  2. Авторизация. (попытка установки фильтра п.3 -> требование авторизации -> авторизация)
  3. Установка фильтра.
  4. Запрос событий, и сохранение их в собственной БД.
  5. Запрос состояния.
  6. Далее, любое изменение состояния контроллера будет сопровождаться формированием (соответствующего этому изменению) события. Контроллер передаёт это событие асинхронно.

Пример пп. 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 Изменение настроек