|
|
ru:local:remoteapi1504:codesamples:update_datafalags [20/05/2014 11:49] |
ru:local:remoteapi1504:codesamples:update_datafalags [20/05/2014 11:49] (текущий) |
| {{indexmenu_n>3}} |
| ====== Управление элементами системы и событиями ====== |
| Управление элементами и событиями системы подразумевает 2 этапа. На первом отбираются типы событий, которые нужно получать, а на втором происходит получение событий и их дальнейшая обработка. |
| |
| //:!: Внимание!// Для запуска данного примера на Wialon Kit во всех запросах следует заменить **<nowiki>https://hst-api.wialon.com</nowiki>** на **<nowiki>https://kit-api.wialon.com</nowiki>**, а для входа в систему использовать логин и пароль своей учетной записи или логин и пароль демо-пользователя: //**kitdemo kitdemo**//. |
| |
| ===== Добавление элементов в сессию ===== |
| |
| Отслеживание событий элементов является одной из важнейших функций Wialon. Чтобы [[../apiref:requests:avl_evts|получать события от элементов]], данные элементы должны быть добавлены в сессию. |
| |
| Существует 3 способа добавления элементов в сессию: по типу, списком ID и по ID. |
| |
| Например, нужно добавить в сессию три объекта: Bavarian Tractor, Alabama, Touareg. Поскольку известны ID этих объектов, то добавляем эти объекты, используя значение //col// для параметра **"type"**: |
| <code> |
| 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> |
| </code> |
| Т.к. был установлен только базовый флаг, то от данных трех объектов будут приходить только события об изменении названия. |
| |
| //:!: Внимание!// Значение параметра **"mode"** установленное в 0 говорит о том, что какие бы флаги не стояли ранее у элемента, они будут заменены полностью на те, что указаны в запросе. |
| |
| Результат выполнения: |
| <code javascript> |
| [{ |
| "i": 34868, |
| "d": null, |
| "f": 1 |
| }, { |
| "i": 22800, |
| "d": null, |
| "f": 1 |
| }, { |
| "i": 553632, |
| "d": null, |
| "f": 1 |
| }] |
| </code> |
| |
| Далее, предположим, что отслеживать события объекта Touareg нам больше не нужно, следовательно, его можно удалить из сессии. Т.к. нам нужно осуществить действие только над одним объектом, в запросе указывается значение //id// для параметра **"type"**: |
| <code> |
| 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> |
| </code> |
| |
| //:!: Внимание!// Для полного удаления объекта из сессии в параметре **"flags"** должна стоять единица, то есть мы перестаем получать какие-либо события от объекта, только если выполняем запрос на удаление базового флага. Если же при добавлении объекта в сессию был указан флаг, например 3, а при удалении 2, то оставшийся флаг у объекта будет равен 1. Следовательно мы отписались от получения событий, за которые отвечает флаг 2, но остались подписаны на события флага 1. |
| |
| Результат выполнения: |
| <code javascript> |
| [{ |
| "i": 553632, |
| "d": null, |
| "f": 0 |
| }] |
| </code> |
| Результатом того, что объект удален из сессии является значение поля **"f"** равное 0. |
| |
| |
| Предположим, что объект добавлен в сессию, например - Bavarian Tractor, но нам теперь нужно обрабатывать не только события изменения имени, но и события изменения счетчиков. Не обязательно удалять объект из сессии и добавлять его с новым флагом, можно просто к текущим флагам объекта добавить новые: |
| <code> |
| 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> |
| </code> |
| |
| Результат выполнения: |
| <code javascript> |
| [{ |
| "i": 34868, |
| "d": { |
| "cfl": 1298, |
| "cnm": 45414, |
| "cneh": 0, |
| "cnkb": 43602 |
| }, |
| "f": 8193 |
| }] |
| </code> |
| Обратите внимание: в запросе добавляется флаг 8192, а в результирующем JSON указано значение **"f"** равное 8193. Это значит, что к уже имеющемуся значению **"f"**, т.е. единице, добавили новые флаги и ответ вернулся уже с суммой установленных флагов. |
| |
| Если же нужно отслеживать события всех элементов конкретного типа, то в параметре "type" нужно указать значение //type//: |
| <code> |
| 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> |
| </code> |
| |
| ===== Получение событий ===== |
| |
| Проверим как система посылает и принимает события на примере переименования объекта. |
| |
| **1.** Создайте на сервере [[http://wialonb3.gurtam.com/|Wialon Hosting]] новый объект, например: |
| <code> |
| https://hst-api.wialon.com/wialon/ajax.html?svc=core/create_unit& |
| params={ |
| "creatorId":50935, |
| "name":"unit", |
| "hwTypeId":96266, |
| "dataFlags":1 |
| }&sid=<your_sid> |
| </code> |
| Результат выполнения: |
| <code javascript> |
| { |
| "item": { |
| "nm": "unit", |
| "cls": 2, |
| "id": 656513, |
| "uacl": -1 |
| }, |
| "flags": 1 |
| } |
| </code> |
| |
| **2.** Выполните вход в систему при помощи запроса описанного в разделе [[login]]. |
| |
| **3.** Выполните запрос [[../apiref/requests/avl_evts|avl_evts]]. Никаких событий не будет отображено. |
| <code> |
| https://hst-api.wialon.com/avl_evts?sid=<your_sid> |
| </code> |
| Результат выполнения: |
| <code javascript> |
| { |
| "tm": 1358780392, |
| "events": [] |
| } |
| </code> |
| |
| **4.** Добавьте объект в сессию, как было описано в пункте выше. |
| Например: |
| <code> |
| 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> |
| </code> |
| Результат выполнения: |
| <code javascript> |
| [{ |
| "i": 656513, |
| "d": { |
| "nm": "unit", |
| "cls": 2, |
| "id": 656513, |
| "uacl": -1 |
| }, |
| "f": 1 |
| }] |
| </code> |
| |
| **5.** Переименуйте объект, например: |
| <code> |
| https://hst-api.wialon.com/wialon/ajax.html?svc=item/update_name& |
| params={ |
| "itemId":656513, |
| "name":"unit1" |
| }&sid=<your_sid> |
| </code> |
| Результат выполнения: |
| <code javascript> |
| { |
| "nm": "unit1" |
| } |
| </code> |
| |
| **6.** Выполните запрос [[../apiref/requests/avl_evts|avl_evts]] еще раз. |
| <code> |
| https://hst-api.wialon.com/avl_evts?sid=<your_sid> |
| </code> |
| Результат выполнения: |
| <code javascript> |
| { |
| "tm": 1358780632, |
| "events": [{ |
| "i": 656513, |
| "t": "u", |
| "d": { |
| "nm": "unit1" |
| } |
| }] |
| } |
| </code> |
| |
| В поле "events" отобразилась информация о событии переименования. |