Управление элементами и событиями системы подразумевает 2 этапа. На первом отбираются типы событий, которые нужно получать, а на втором происходит получение событий и их дальнейшая обработка.
Внимание! Для запуска данного примера на Wialon Kit во всех запросах следует заменить https://hst-api.wialon.com на https://kit-api.wialon.com, а для входа в систему использовать логин и пароль своей учетной записи или логин и пароль демо-пользователя: kitdemo kitdemo.
Отслеживание событий элементов является одной из важнейших функций Wialon. Чтобы получать события от элементов, данные элементы должны быть добавлены в сессию.
Существует 3 способа добавления элементов в сессию: по типу, списком ID и по ID.
Например, нужно добавить в сессию три объекта: Bavarian Tractor, Alabama, Touareg. Поскольку известны ID этих объектов, то добавляем эти объекты, используя значение col для параметра «type»:
https://hst-api.wialon.com/wialon/ajax.html?svc=core/update_data_flags& params={ "spec":[ { "type":"col", "data":[34868,22800,553632], "flags":1, "mode":0 /* замена флагов */ } ] }&sid=<your_sid>
Т.к. был установлен только базовый флаг, то от данных трех объектов будут приходить только события об изменении названия.
Внимание! Значение параметра «mode» установленное в 0 говорит о том, что какие бы флаги не стояли ранее у элемента, они будут заменены полностью на те, что указаны в запросе.
Результат выполнения:
[{ "i": 34868, "d": null, "f": 1 }, { "i": 22800, "d": null, "f": 1 }, { "i": 553632, "d": null, "f": 1 }]
Далее, предположим, что отслеживать события объекта Touareg нам больше не нужно, следовательно, его можно удалить из сессии. Т.к. нам нужно осуществить действие только над одним объектом, в запросе указывается значение id для параметра «type»:
https://hst-api.wialon.com/wialon/ajax.html?svc=core/update_data_flags& params={ "spec":[{ "type":"id", "data":553632, "flags":1, "mode":2 /* снятие флагов */ }] }&sid=<your_sid>
Внимание! Для полного удаления объекта из сессии в параметре «flags» должна стоять единица, то есть мы перестаем получать какие-либо события от объекта, только если выполняем запрос на удаление базового флага. Если же при добавлении объекта в сессию был указан флаг, например 3, а при удалении 2, то оставшийся флаг у объекта будет равен 1. Следовательно мы отписались от получения событий, за которые отвечает флаг 2, но остались подписаны на события флага 1.
Результат выполнения:
[{ "i": 553632, "d": null, "f": 0 }]
Результатом того, что объект удален из сессии является значение поля «f» равное 0.
Предположим, что объект добавлен в сессию, например - Bavarian Tractor, но нам теперь нужно обрабатывать не только события изменения имени, но и события изменения счетчиков. Не обязательно удалять объект из сессии и добавлять его с новым флагом, можно просто к текущим флагам объекта добавить новые:
https://hst-api.wialon.com/wialon/ajax.html?svc=core/update_data_flags& params={ "spec":[{ "type":"id", "data":34868, "flags":8192, "mode":1 /* добавление флагов */ }] }&sid=<your_sid>
Результат выполнения:
[{ "i": 34868, "d": { "cfl": 1298, "cnm": 45414, "cneh": 0, "cnkb": 43602 }, "f": 8193 }]
Обратите внимание: в запросе добавляется флаг 8192, а в результирующем JSON указано значение «f» равное 8193. Это значит, что к уже имеющемуся значению «f», т.е. единице, добавили новые флаги и ответ вернулся уже с суммой установленных флагов.
Если же нужно отслеживать события всех элементов конкретного типа, то в параметре «type» нужно указать значение type:
https://hst-api.wialon.com/wialon/ajax.html?svc=core/update_data_flags& params={ "spec":[{ "type":"type", "data":"user", "flags":1, "mode":0 }] }&sid=<your_sid>
Проверим как система посылает и принимает события на примере переименования объекта.
1. Создайте на сервере Wialon Hosting новый объект, например:
https://hst-api.wialon.com/wialon/ajax.html?svc=core/create_unit& params={ "creatorId":50935, "name":"unit", "hwTypeId":96266, "dataFlags":1 }&sid=<your_sid>
Результат выполнения:
{ "item": { "nm": "unit", "cls": 2, "id": 656513, "uacl": -1 }, "flags": 1 }
2. Выполните вход в систему при помощи запроса описанного в разделе Логин/логаут.
3. Выполните запрос avl_evts. Никаких событий не будет отображено.
https://hst-api.wialon.com/avl_evts?sid=<your_sid>
Результат выполнения:
{ "tm": 1358780392, "events": [] }
4. Добавьте объект в сессию, как было описано в пункте выше. Например:
https://hst-api.wialon.com/wialon/ajax.html?svc=core/update_data_flags& params={ "spec":[{ "type":"id", "data":656513, "flags":1, "mode":0}] }&sid=<your_sid>
Результат выполнения:
[{ "i": 656513, "d": { "nm": "unit", "cls": 2, "id": 656513, "uacl": -1 }, "f": 1 }]
5. Переименуйте объект, например:
https://hst-api.wialon.com/wialon/ajax.html?svc=item/update_name& params={ "itemId":656513, "name":"unit1" }&sid=<your_sid>
Результат выполнения:
{ "nm": "unit1" }
6. Выполните запрос avl_evts еще раз.
https://hst-api.wialon.com/avl_evts?sid=<your_sid>
Результат выполнения:
{ "tm": 1358780632, "events": [{ "i": 656513, "t": "u", "d": { "nm": "unit1" } }] }
В поле «events» отобразилась информация о событии переименования.
1. Подписка:
<your_api_url>/wialon/ajax.html?svc=core/update_data_flags¶ms={"spec":[{"type":"access","data":1,"flags":0,"mode":0}]}&sid=<your_sid>
Ответ:
[]
2. Изменения прав доступа пользователя с id:«15444406» на элемент с id:«17090192» («Просмотр элемента и его основных свойств»):
<your_api_url>/wialon/ajax.html?svc=user/update_item_access¶ms={"userId":15444406,"itemId":17090192,"accessMask":1}&sid=<your_sid>
Ответ:
{}
3. Получение avl_evts:
<your_api_url>/avl_evts?sid=<your_sid>
Ответ:
{"tm":1526397552, /* время */ "events":[{ "i":-5, /* событие изменения прав доступа на элемент */ "d":{ "a":[{ "t":"avl_unit", /* тип элемента - объект */ "ids":[17090192] /* id элемента */ }] } }]}
4. Создание элемента.
<your_api_url>/wialon/ajax.html?svc=core/create_unit¶ms={"creatorId":15444406,"name":"New unit","hwTypeId":"13028700","dataFlags":1}&sid=<your_sid>
Ответ:
{"item":{"nm":"New unit","cls":2,"id":17298228,"mu":0,"uacl":-1},"flags":1}
5. Получение avl_evts.
{"tm":1526402957, "events":[{ "i":15444406, /* id пользователя */ "t":"u", /* тип события - создание объекта */ "d":{"prpu":{ "monu":"[\"17298228\"]", /* id элемента */ "used_hw":"{\"13028700\":1,\"13285316\":0}"} } }]}
6. Удаление элемента.
<your_api_url>/wialon/ajax.html?svc=item/delete_item¶ms={"itemId":17298228}&sid=<your_sid>
Ответ:
{}
7. Получение avl_evts.
{"tm":1526403113, /* время */ "events":[{ "i":17298228, /* элемент с id 17298228 */ "t":"d"}] /* тип события - удаление */ }
8. Отписка:
<your_api_url>/wialon/ajax.html?svc=core/update_data_flags¶ms={"spec":[{"type":"access","data":0,"flags":0,"mode":0}]}&sid=<your_sid>
Ответ:
[]