1

Выполнение отчета

Тема: Выполнение отчета

Добрый день

Есть у нас потребность вытащить некоторые данные из Виалона в другую систему.
Выполняю пошагово запросы

Получил ID сессии

url1 = """http://.../wialon/ajax.html?svc=\
token/login&params=\
{"token":"3634e49c84d7be374e7cb67f59178076932AB67F73CD8936B8BD6127469C1B6AF6C5B416"}"""
resp1 = urllib.request.urlopen(url1)
data1 = json.loads(resp1.read())

Получил ID машин

url2 = """http://.../wialon/ajax.html?svc=core/search_items&\
params={"spec":{"itemsType":"avl_unit","propName":"rel_hw_type_name","propValueMask":"*","sortType":"rel_hw_type_name"},\
"force":1,"flags":1,"from":0,"to":0}&sid="""+data1['eid']
resp2 = urllib.request.urlopen(url2)
data2 = json.loads(resp2.read())

Ответ

{'searchSpec': {'itemsType': 'avl_unit', 'propName': 'rel_hw_type_name', 'propValueMask': '*', 'sortType': 'rel_hw_type_name', 'propType': '', 'or_logic': '0'}, 'dataFlags': 1, 'totalItemsCount': 230, 'indexFrom': 0, 'indexTo': 0, 'items': [{'nm': 'КОЛ О323МР51', 'cls': 2, 'id': 3730, 'mu': 0, 'uacl': 567271248675}, {'nm': 'КОЛ МР091851', 'cls': 2, 'id': 3805, 'mu': 0, 'uacl': 567271248675}, {'nm': 'КОЛ В097КА51', 'cls': 2, 'id': 3842, 'mu': 0, 'uacl': 567271248675}, 
 ...
 {'nm': 'КОЛ Е598МЕ51', 'cls': 2, 'id': 647, 'mu': 0, 'uacl': 567271248675}, {'nm': 'КОЛ У393МУ51', 'cls': 2, 'id': 3133, 'mu': 0, 'uacl': 567271248675}]}

ID Ресурса

url32 = """http://.../wialon/ajax.html?svc=core/search_items&\
params={"spec":{"itemsType":"avl_resource","propName":"","propValueMask":"*","sortType":""},\
"force":1,"flags":1,"from":0,"to":0}&sid="""+data1['eid']
resp32 = urllib.request.urlopen(url32)
data32 = json.loads(resp32.read())

Ответ

{'searchSpec': {'itemsType': 'avl_resource', 'propName': '', 'propValueMask': '*', 'sortType': '', 'propType': '', 'or_logic': '0'}, 'dataFlags': 1, 'totalItemsCount': 2, 'indexFrom': 0, 'indexTo': 0, 'items': [{'nm': 'Основной ресурс', 'cls': 3, 'id': 186, 'mu': 0, 'uacl': 17636562850595}, {'nm': 'Колэнерго', 'cls': 3, 'id': 237, 'mu': 0, 'uacl': 52913983476515}]}

ID отчета

url31 = """http://.../wialon/ajax.html?svc=core/search_items&\
params={"spec":{"itemsType":"avl_resource","propName":"reporttemplates","propValueMask":"*","sortType":"reporttemplates"},\
"force":1,"flags":8192,"from":0,"to":0}&sid="""+data1['eid']
resp31 = urllib.request.urlopen(url31)
data31 = json.loads(resp31.read())

Ответ

{'searchSpec': {'itemsType': 'avl_resource', 'propName': 'reporttemplates', 'propValueMask': '*', 'sortType': 'reporttemplates', 'propType': '', 'or_logic': '0'}, 'dataFlags': 8192, 'totalItemsCount': 2, 'indexFrom': 0, 'indexTo': 0, 'items': [{'rep': {'1': {'id': 1, 'n': 'Пробная поездка', 'ct': 'avl_unit', 'c': 27316}, '2': {'id': 2, 'n': 'Превышение скорости группа Осн.ресурс', 'ct': 'avl_unit_group', 'c': 44889}, '3': {'id': 3, 'n': 'Трафик основной ресурс', 'ct': 'avl_unit_group', 'c': 23431}, '4': {'id': 4, 'n': 'ВОЛ E548EA35', 'ct': 'storage_user', 'c': 58639}}}, {'rep': {'1': {'id': 1, 'n': 'Кол_хрон', 'ct': 'avl_unit_group', 'c': 37202}, '2': {'id': 2, 'n': 'Превышение скорости группа КОЛ', 'ct': 'avl_unit_group', 'c': 13401}, '3': {'id': 3, 'n': 'Мой отчет по скорости', 'ct': 'avl_unit_group', 'c': 45815}}, 'repmax': 0}]}

Запускаю отчет

url4 = """http://.../wialon/ajax.html?svc=report/exec_report\
&params={"reportResourceId":237,"reportTemplateId":3,"reportObjectId":2704,\ #id ресурса, отчета, машины
"reportObjectSecId":0,"interval":{"from":1560902400,"to":1560986969,"flags":0x00}}&sid="""+data1['eid']
resp4 = urllib.request.urlopen(url4)
data4 = json.loads(resp4.read())

Получаю

{'error': 4, 'reason': 'WRONG_PARAMS'}

Или глаз замылился, или я что то недопонимаю.
Подскажите, что я неправильно делаю?

Wialon Local 1804

2

Выполнение отчета

Re: Выполнение отчета

Добрый день!

значение "flags":0x00 нужно в десятичном виде, а не hex, т.е "flags":0

Diana Cheley
Wialon Hosting Expert
Gurtam
3

Выполнение отчета

(20/06/2019 09:44:20 отредактировано aecherkasov)

Re: Выполнение отчета

Добрый день, спасибо заработало, действительно проглядел.
Но он вытаскивает структуру отчета, и то что в нем есть одна строка, так и есть. А где сами то данные? Или до них как то еще нужно добираться?

Вот что он выдает

{'reportResult': {'msgsRendered': 0, 'stats': [], 'tables': [{'name': 'unit_group_speedings', 'label': 'Превышение скорости', 'grouping': {'type': 'unit'}, 'flags': 0, 'rows': 1, 'level': 1, 'columns': 9, 'header': ['Grouping', 'Начало', 'Положение', 'Длительность', 'Макс. скорость', 'Ограничение', 'Ср. скорость', 'Водитель', 'Кол-во'], 'header_type': ['', 'time_begin', 'location_begin', 'duration', 'max_speed', 'speed_limit', 'avg_speed', 'driver', 'speedings_count']}], 'attachments': []}, 'reportLayer': {'name': 'report markers', 'bounds': [0, 0, 0, 0]}, 'layerCount': 1}
4

Выполнение отчета

Re: Выполнение отчета

https://sdk.wialon.com/wiki/ru/local/re … es/reports смотрели?

At the dark side of telematics...
5

Выполнение отчета

Re: Выполнение отчета

И еще, возможно ли вытащить не "Положение" где произошло превышение скорости, а координаты этой точки. У вас же  по линку ставится маркер, значит эти координаты где то есть.

6

Выполнение отчета

Re: Выполнение отчета

И не раз
Я вижу одно что один и тот же отчет по одному и тому же объекту в интерфейсе выводится нормально, а через запрос нет. При этом интервал одни, объект один, и там и там 37 строк находится. Но почему они не выводятся запросом я не понимаю.
вот запрос и обработчик

url_rep = """http://.../wialon/ajax.html?svc=report/exec_report\
&params={"reportResourceId":237,"reportTemplateId":3,"reportObjectId":3532,\
"reportObjectSecId":0,"interval":{"from":1546300800,"to":1561064399,"flags":0}}&sid="""+data1['eid']
resp_rep = urllib.request.urlopen(url_rep)
data_rep = json.loads(resp_rep.read())
print(data_rep)

Вот ответ

{'reportResult': {'msgsRendered': 0, 'stats': [], 'tables': [{'name': 'unit_speedings', 'label': 'Превышение скорости', 'grouping': {}, 'flags': 128, 'rows': 37, 'level': 1, 'columns': 8, 'header': ['Начало', 'Положение', 'Длительность', 'Общее время', 'Макс. скорость', 'Ограничение', 'Ср. скорость', 'Кол-во'], 'header_type': ['time_begin', 'location_begin', 'duration', 'duration_ival', 'max_speed', 'speed_limit', 'avg_speed', 'speedings_count']}], 'attachments': []}}

Во вложении скрин этого же отчета в интерфейсе

  • Выполнение отчета
7

Выполнение отчета

Re: Выполнение отчета

aecherkasov , запрос svc=report/exec_report выполняет указанный отчет. Результат выполнения выгружается в сессию. Показывает общую информацию об отчете - какие таблицы, сколько, сколько сообщений и т.д
Далее вам необходимо получить данные таблицы (то, что отображается в интерфейсе) для этого выполняется запрос  report/get_result_rows (report/get_result_subrows ) или report/select_result_rows[
В примере, ссылку на который вам написали выше, все описано подробно.

Также вы можете включить отладчик в браузере и посмотреть какие запросы выполняются, когда вы запрашиваете отчет на интерфейсе. Как раз данные из таблицы на скриншоте получают через запрос report/select_result_rows, после выполнения запроса report/exec_report

Diana Cheley
Wialon Hosting Expert
Gurtam
8

Выполнение отчета

Re: Выполнение отчета

aecherkasov пишет:

И еще, возможно ли вытащить не "Положение" где произошло превышение скорости, а координаты этой точки. У вас же  по линку ставится маркер, значит эти координаты где то есть.

как раз в ответе на запросы report/get_result_rows или report/select_result_rows в JSON вернется и положение и координаты этой точки

пример

t: "[Bulevar Comunidad Europea], Distrito Central -  Francisco Morazan, Honduras, Distrito Central"
x: -87.2100183333
y: 14.07763
Diana Cheley
Wialon Hosting Expert
Gurtam
9

Выполнение отчета

(21/06/2019 09:34:07 отредактировано aecherkasov)

Re: Выполнение отчета

chdi пишет:

aecherkasov , запрос svc=report/exec_report выполняет указанный отчет. Результат выполнения выгружается в сессию. Показывает общую информацию об отчета - какие таблицы, сколько, сколько сообщений и т.д
Далее вам необходимо получить данные таблицы (то, что отображается в интерфейсе) для этого выполняется запрос  report/get_result_rows (report/get_result_subrows ) или report/select_result_rows[
В примере, ссылку на который вам написали выше, все описано подробно.

Также вы можете включить отладчик в браузере и посмотреть какие запросы выполняются, когда вы запрашиваете отчет на интерфейсе. Как раз данные из таблицы на скриншоте получают через запрос report/select_result_rows, после выполнения запроса report/exec_report

Спасибо, наконец то понял, все заработало :-)
Насколько это проще в SQL запросе было бы сделать.

10

Выполнение отчета

Re: Выполнение отчета

aecherkasov пишет:

Насколько это проще в SQL запросе было бы сделать.

Если бы Wialon работал на SQL, проще не было бы никому)

11

Выполнение отчета

Re: Выполнение отчета

aecherkasov пишет:

Насколько это проще в SQL запросе было бы сделать.

Виалон на реляционных базах данных давно-бы сдох.

12

Выполнение отчета

(02/07/2019 09:04:16 отредактировано aecherkasov)

Re: Выполнение отчета

SanderAMC пишет:
aecherkasov пишет:

Насколько это проще в SQL запросе было бы сделать.

Виалон на реляционных базах данных давно-бы сдох.

Вы так думаете?
Поработайте с диспетчерскими комплексами реального времени :-)

13

Выполнение отчета

Re: Выполнение отчета

И что это доказывает? Я-же не говорил, что таких нет. Я только про Виалон.
Возможно только то, что разработчики этих систем не достаточно внимательно подошли к выбору способа хранения и обработки данных? smile

Реляционные базы в big data вообще не очень... Хотя Виалон и не оно. Пока.

14

Выполнение отчета

Re: Выполнение отчета

shmi пишет:
aecherkasov пишет:

Насколько это проще в SQL запросе было бы сделать.

Если бы Wialon работал на SQL, проще не было бы никому)

Очень глупо давать доступ к базе данных кому попало. а мы с вами как раз те самые smile
А такой доступ в рамках MVC, где veiwer это ваша система, API - это controller, а место хранения данных это model. В итоге выходит очень гибкая и легкомаштабируемая система.

FFA0-0BBB-8911-15BB

https://www.reg.ru