1

Wialon Local - получение данных по API через PHP

Тема: Wialon Local - получение данных по API через PHP

Здравствуйте!

В этом году мы внедрили замечательную систему Wialon Local и теперь аналитики поставили мне как единственному в компании программисту настроить получение данных из Виалон в отчеты Power BI и Excel.

Если конкретнее - то нужно написать скрипт, который будет подключаться к нашему Wialon Local и отдавать в Json нужные данные для аналитиков - например текущая задача:

- список автотранспорта с IMEI
- получить список геозон с площадями

Учитывая, что данные действия я решила писать на РНР, то тщательно погуглив на гитлабе нашла класс для получения данных из Вилон.

ссылка: https://gitlab.com/CWTeam/wialon/blob/master/Wialon.php

Итак, далее проблемы.

При получении списка транспорта, ну никак не удается вытащить IMEI.
Т.е. список автотранспорта есть, но как еще выбрать и IMEI или любые другие поля обьекта?

        //  список транспорта   =================================================
        if(isset($_GET['get_units'])) {   
       
            echo $wialon_api->core_search_items('{
                                                    "spec":{
                                                        "itemsType":"avl_unit",
                                                        "propName":"sys_name",
                                                        "propValueMask":"*",
                                                        "sortType":"sys_name"
                                                    },
                                                        "force":1,
                                                        "flags":1,
                                                        "from":0,
                                                        "to":0
                                                }');
       
       
            $wialon_api->logout();
        }
        // ========================================================================

Что нужно сделать, что нужно передать в массиве запроса, чтобы получить список транспорта с IMEI? Думаю, что если я разберусь с этим моментом, то остальное тоже получится.

Кто-то вообще работает с PHP и Wialon?

Я выбрала именно PHP потому что есть вероятность, что потом те выборки данных, которые я напишу, мне нужно будет синхронизировать с аналитической базой MySQL (наша промежуточная база для аналитики). А скрипты РНР удобно по заряжать по крону.

Не волнуйся, если не работает.
2

Wialon Local - получение данных по API через PHP

Re: Wialon Local - получение данных по API через PHP

Anastasia1990, тут не в php вопрос.
В данном случае всё верно отрабатывает т.к. в запрос подается параметр flags равный 1, что соотвествует базовому набору параметров (id и имя). Для более расширенного набора данных комбинируйте флаги или для проверки выставьте все подав число 4611686018427387903.
Конкретно в данном случае можно обойтись значением 257 (1 + 256).
Список возможных дата-флагов тут https://sdk.wialon.com/wiki/ru/local/re … ormat/unit

Head of Wialon Local Department
Gurtam
3

Wialon Local - получение данных по API через PHP

Re: Wialon Local - получение данных по API через PHP

Алексей, спасибо за ответ!

Но у меня несколько другая ситуация. Попробую обьяснить.

До того, как обращаться на форум, я уже попробовала передавать любые из значений флагов из мануала по SDK - и даже при передаче флага - 4611686018427387903 - значение IMEI не выводится.

Теперь более подробно на примере одной единицы техники, которую я выделю из массива, возвращаемого в ответе. Допустим, я передаю флаг 257, т.е. код принимает такой вид:


            echo $wialon_api->core_search_items('{
                                                    "spec":{
                                                        "itemsType":"avl_unit",
                                                        "propName":"sys_name",
                                                        "propValueMask":"*",
                                                        "sortType":"sys_name"
                                                    },
                                                        "force":1,
                                                        "flags":257,
                                                        "from":0,
                                                        "to":0
                                                }');


При этом в результате по этому транспорту виалон пришлет такой ответ(лишнее заменю многоточиями):

{"searchSpec":{"itemsType":"avl_unit","propName":"sys_name","propValueMask":"*","sortType":"sys_name","propType":"","or_logic":"0"},"dataFlags":257,"totalItemsCount":1102,"indexFrom":0,"indexTo":0,"items":[

.........
{"nm":"Транспорт_1","cls":2,"id":554,"mu":0,"act":1,"dactt":0,"uacl":16931}
..........
поле Imei (uniq_id) здесь нет (((


================================================================================



Допустим, я передаю флаг 4611686018427387903, т.е. код принимает такой вид:


            echo $wialon_api->core_search_items('{
                                                    "spec":{
                                                        "itemsType":"avl_unit",
                                                        "propName":"sys_name",
                                                        "propValueMask":"*",
                                                        "sortType":"sys_name"
                                                    },
                                                        "force":1,
                                                        "flags":4611686018427387903,
                                                        "from":0,
                                                        "to":0
                                                }');


Ответ от Виалон (лишнее заменяю многоточиями, оставляю только одну единицу техники):

{"searchSpec":{"itemsType":"avl_unit","propName":"sys_name","propValueMask":"*","sortType":"sys_name","propType":"","or_logic":"0"},"dataFlags":4611686018427387903,"totalItemsCount":1102,"indexFrom":0,"indexTo":0,"items":[
.......
{"nm":"Транспорт_1","cls":2,"id":554,"prp":{"img_rot":"0","label_color":"16711680","speed_colors":"0 66ffff;40 0099ff;60 3300ff;90 990099;110 ff0033","track_speed":"0 66ffff;40 0099ff;60 3300ff;90 990099;110 ff0033","use_sensor_color":"1"},"crt":60,"bact":61,"gd":"c2cf55e61f6837f708376ce5ba899c32","mu":0,"ct":1581584790,"ftp":{"ch":0,"tp":0,"fl":0},"pos":{"t":1591051752,"f":1073741825,"lc":0,"y":47.3236516667,"x":37.668545,"c":0,"z":119,"s":0,"sc":19},"lmsg":{"t":1591051752,"f":1073741825,"tp":"ud","pos":{"y":47.3236516667,"x":37.668545,"c":0,"z":119,"s":0,"sc":19},"lc":0,"rt":0,"p":{"par21":4,"par118":1,"par119":1,"par120":1,"par121":3,"par21":4,"par145":0,"par146":0,"par147":0,"par148":0,"par150":0,"par151":0,"par152":0,"PSV":0.026,"VBAT":3.286,"par24":0,"par69":1,"par70":13,"par251":2852,"par250":0,"par149":0}},"sens":{"1":{"id":1,"n":"Внешнее напряжение","t":"voltage","d":"","m":"V","p":"PSV","f":0,"c":"{\"act\":0,\"appear_in_popup\":true,\"ci\":{},\"cm\":0,\"mu\":\"0\",\"pos\":1,\"show_time\":false,\"timeout\":0,\"uct\":0}","vt":1,"vs":0,"tbl":[]},"2":{"id":2,"n":"Внутреннее напряжение","t":"voltage","d":"","m":"V","p":"VBAT","f":0,"c":"{\"act\":0,\"appear_in_popup\":true,\"ci\":{},\"cm\":0,\"mu\":\"0\",\"pos\":2,\"show_time\":false,\"timeout\":0,\"uct\":0}","vt":1,"vs":0,"tbl":[]},"3":{"id":3,"n":"Зажигание","t":"engine operation","d":"|0:0:9:0:10.5:1:20:1","m":"On\/Off","p":"PSV","f":0,"c":"{\"act\":0,\"appear_in_popup\":true,\"ci\":{},\"cm\":0,\"consumption\":0,\"mu\":\"0\",\"pos\":3,\"show_time\":false,\"timeout\":0,\"uct\":0}","vt":11,"vs":0,"tbl":[{"x":0,"a":0,"b":0},{"x":9,"a":0.666666666667,"b":-6},{"x":10.5,"a":0,"b":1}]},"4":{"id":4,"n":"ВыливА","t":"absolute fuel consumption","d":"","m":"l","p":"par149*const0.000833","f":0,"c":"{\"act\":0,\"appear_in_popup\":false,\"ci\":{},\"cm\":1,\"mu\":\"0\",\"pos\":4,\"show_time\":false,\"timeout\":0,\"uct\":0}","vt":11,"vs":3,"tbl":[]},"5":{"id":5,"n":"Вылив1","t":"custom","d":"","m":"","p":"par149","f":0,"c":"{\"act\":0,\"appear_in_popup\":true,\"ci\":{},\"cm\":1,\"mu\":\"0\",\"pos\":5,\"show_time\":false,\"text_params\":0,\"timeout\":0,\"uct\":0}","vt":1,"vs":0,"tbl":[{"x":1,"a":0.000833,"b":0}]},"6":{"id":6,"n":"Вылив","t":"counter","d":"","m":"","p":"par149","f":2,"c":"{\"act\":0,\"appear_in_popup\":true,\"ci\":{},\"cm\":1,\"mu\":\"0\",\"pos\":6,\"show_time\":false,\"timeout\":0,\"uct\":0,\"flags\":\"2\"}","vt":11,"vs":4,"tbl":[{"x":1,"a":0.000833,"b":0}]},"7":{"id":7,"n":"Скорость","t":"custom","d":"","m":"","p":"speed","f":0,"c":"{\"act\":1,\"appear_in_popup\":true,\"ci\":{},\"cm\":1,\"mu\":\"0\",\"pos\":9,\"show_time\":false,\"text_params\":0,\"timeout\":0,\"uct\":0,\"unbound_code\":\"\",\"validate_driver_unbound\":0}","vt":1,"vs":0,"tbl":[]},"8":{"id":8,"n":"Внешнее напряжение1","t":"custom","d":"","m":"","p":"PSV","f":0,"c":"{\"act\":0,\"appear_in_popup\":true,\"ci\":{},\"cm\":1,\"mu\":\"0\",\"pos\":11,\"show_time\":false,\"text_params\":0,\"timeout\":0,\"uct\":0,\"unbound_code\":\"\",\"validate_driver_unbound\":0}","vt":1,"vs":0,"tbl":[]}},"cfl":1808,"cnm":2025,"cneh":404.691111111,"cnkb":25619,"prms":{"PSV":{"v":0.026,"ct":1591051752,"at":1591051752},"VBAT":{"v":3.286,"ct":1591051752,"at":1591051752},"par118":{"v":1,"ct":1590692913,"at":1591051752},"par119":{"v":1,"ct":1590692943,"at":1591051752},"par120":{"v":1,"ct":1590692943,"at":1591051752},"par121":{"v":3,"ct":1590692913,"at":1591051752},"par145":{"v":0,"ct":1588447533,"at":1591051752},"par146":{"v":0,"ct":1588447533,"at":1591051752},"par147":{"v":0,"ct":1588447533,"at":1591051752},"par148":{"v":0,"ct":1588447533,"at":1591051752},"par149":{"v":0,"ct":1591017932,"at":1591051752},"par150":{"v":0,"ct":1588447533,"at":1591051752},"par151":{"v":0,"ct":1588447533,"at":1591051752},"par152":{"v":0,"ct":1591017902,"at":1591051752},"par21":{"v":4,"ct":1591031232,"at":1591051752},"par24":{"v":0,"ct":1591019712,"at":1591051752},"par250":{"v":0,"ct":1591019742,"at":1591051752},"par251":{"v":2852,"ct":1591019555,"at":1591051752},"par69":{"v":1,"ct":1588447533,"at":1591051752},"par70":{"v":13,"ct":1591051722,"at":1591051752},"posinfo":{"v":{"y":47.3236516667,"x":37.668545,"z":119,"c":0,"sc":19},"ct":1591051752,"at":1591051752},"speed":{"v":0,"ct":1591019712,"at":1591051752}},"netconn":0,"act":1,"dactt":0,"cnm_km":2025,"flds":{},"pflds":{},"rtd":{"type":1,"gpsCorrection":1,"minSat":2,"minMovingSpeed":1,"minStayTime":120,"maxMessagesDistance":10000,"minTripTime":60,"minTripDistance":100},"rfc":{"calcTypes":56,"fuelLevelParams":{"flags":0,"ignoreStayTimeout":20,"minFillingVolume":20,"minTheftTimeout":0,"minTheftVolume":10,"filterQuality":0,"fillingsJoinInterval":300,"theftsJoinInterval":300,"extraFillingTimeout":0},"fuelConsMath":{"idling":2,"urban":10,"suburban":7},"fuelConsRates":{"consSummer":10,"consWinter":10,"winterMonthFrom":11,"winterDayFrom":1,"winterMonthTo":1,"winterDayTo":29},"fuelConsImpulse":{"maxImpulses":0,"skipZero":1}},"uri":"\/avl_library_image\/3\/0\/library\/group\/W_2.png","ugi":4294968318,"uacl":16931},
.............

Т.е. Wialon вернул множество данных - но imei в этом массиве нет.


К слову, все возможные флаги я перепробовала - http://prntscr.com/tuv1pt
Все равно ничего не выходит.


Есть ли какая-то тонка настройка api на самом сервере? Или если api работает, то должно работать в полной мере?

Подскажите пожалуйста, в каком еще направление можно посмотреть?

Спасибо.

Не волнуйся, если не работает.
4

Wialon Local - получение данных по API через PHP

Re: Wialon Local - получение данных по API через PHP

Anastasia1990, добрый день.

В данной ситуации похоже у пользователя от которого вы выполняете этот запрос не полные права на объекты.

Head of Wialon Local Department
Gurtam
5

Wialon Local - получение данных по API через PHP

Re: Wialon Local - получение данных по API через PHP

Добрый день.

Спасибо за подсказку, дело оказалось в том, что я для получения данных использовала токен, который был сгенерирован для мониторинга. Как только сгенерировала токен "полный доступ" - все заработало как надо.

Теперь буду разбираться с геозонами, так как список транспорта теперь корректно отрабатывает.

Еще раз спасибо!

smile

Не волнуйся, если не работает.