1

Актуальный статус блокировки двигателя черезе API

Тема: Актуальный статус блокировки двигателя черезе API

Добрый день,

Задача: получить актуальный статус датчика (блокировка двигателя на текущий момент).
Прбововал ниже перечисленные методы. По итогу получаю значения, но они не соответвуют тому, что я вижу на странице мониторинга в Виалоне. Там показывате, что двигатель заблокирован.
В ответах API этого не видно.

Пробовил такие запросы:
1) {"svc":"unit/calc_last_message","params":{"unitId":' . $itemId . ',"flags":1}}
похоже на результат с 3)

2) {"svc":"events/get_last","params":{"itemId":' . $itemId . ',"type":"sensors","filter1":"1","filter2":"","detalization":2}}
не смог разобраться с тем, что за данные он возращает...но тоже похоже на 3)

3) сеачало {"svc":"messages/load_last","params":{"itemId":' . $itemId . ',"lastTime":0,"lastCount":10,"flags":0,"flagsMask":0,"loadCount":1}}
затем: '{"svc":"unit/calc_sensors","params":{"source":"","indexFrom":0,"indexTo":1,"unitId":' . $itemId . ',"sensorId":0}}';

В случае с запросом 3):
На объект: "id":20009677
Например получаю такие данные по 3 датчикам с этого объекта:
"РО05877" => array:3 [▼
    1 => 0
    2 => -348201.3876
    3 => -348201.3876
   
Но точно такие же данные и по другому объекту, однако он не показан как "заблокирован" на странице мониторинга.
"РО05677" => array:3 [▼
    1 => 0
    2 => -348201.3876
    3 => -348201.3876   
   
Помогите пожалуйста правильно составить запрос на получение актуального статуса блокировок двигателя через API?

P.S Запрос планируется делать по всему автопарку в рамках учетки. По этому крайне желательно понять как его делать с помощью core_batch вложенного запроса по нескольких объектам.

Спасибо.

2

Актуальный статус блокировки двигателя черезе API

Re: Актуальный статус блокировки двигателя черезе API

{"svc":"events/get_last","params":{"itemId":' . $itemId . ',"type":"sensors","filter1":"1","filter2":"","detalization":2}}

вот такой запрос возвращает что то вида:
array:5 [▼
    "state" => 0
    "type" => 1
    "hours" => 60
    "switches" => 1
    "value" => 0
  ]

где "value" => 0 вроде как похоже на то, что мне нужно.

Но это верно только для одной учетки.
В другой учетке я вижу что то типа такого:
array:5 [▼
    "state" => 1
    "type" => 1
    "hours" => 35071482
    "switches" => 12
    "value" => 1
  ]

и тут к сожалению  "value" => 1 не отражает текущий статус блокировки.
"state" => 1 тоже.

Прошу помощи.

3

Актуальный статус блокировки двигателя черезе API

Re: Актуальный статус блокировки двигателя черезе API

Добрый день!

Вы можете получать последнее значение датчика через unit/calc_last_message

https://hst-api.wialon.com/wialon/ajax.html?svc=unit/calc_last_message&params={"unitId":21728414,"sensors":[12]}?&sid=023ba3447724907a9ff6eb6a558ee835

{"12":0} - значение датчика зажигания 0

Но если в последнем сообщении значение датчика невалидное (нет параметра, не верный параметр, не верный тип параметра, или по таблице в границу не попадает), тогда вернется
{"15":-348201.3876}

Для получения последнего валидного значения (независимо, когда оно пришло) в Виалоне дополнительно используются получения данных по событиям https://sdk.wialon.com/wiki/ru/sidebar/ … nts/events
(во всплывающих подсказку к объекту)

Подробнее тут:

+ открыть спойлер

Вначале нужно выполнить запрос  events/update_units, чтобы добавить объекты в сессии

https://hst-api.wialon.com/wialon/ajax.html?svc=events/update_units&params={"mode":"add","units":[{"id":13511826,"detect":{"ignition":6}},{"id":21728414,"detect":{"ignition":12}}]}&sid=021c66c55919d1367961a853ef8e6ab5

Добавим в  "units" 2 объекта с id 21080147 и 13511826, тип события "ignition", можно указать конкретный id датчика (как в примере), можно указать ноль "ignition":0 для получения всех датчиков зажигания (либо если точно не известен id датчика /изменялся)

В ответ приходит кол-во добавленных объектов в сессию

{"units": 2}

Далее выполняем запрос svc=events/check_updates с "detalization":35 для получения JSON события

https://hst-api.wialon.com/wialon/ajax.html?svc=events/check_updates&params={"lang":"ru","detalization":35}&sid=021c66c55919d1367961a853ef8e6ab5

Ответ

{"13511826":[{"ignition":{"6":{"from":{"t":1607690453,"y":53.9058837891,"x":27.4568252563},"to":{"t":1608730927,"y":53.9059448242,"x":27.4565658569},"m":1608730927,"f":0,"state":3,"type":1,"hours":1040474,"switches":1,"value":3,"format":{"value":"Вкл","custom_value":""}}}}],"21728414":[{"ignition":{"12":{"from":{"t":1608795806,"y":46.8365631104,"x":-122.667289734},"to":{"t":1608798212,"y":46.8365631104,"x":-122.667289734},"m":1608798212,"f":0,"state":0,"type":1,"hours":1154607,"switches":12,"value":0,"format":{"value":"Выкл","custom_value":""}}}}]}

"state":0 - обозначает, что зажигание выключено (последнее состояние)
"state":N, где N положительное число, обозначает что зажигание включено (последнее состояние).
Обычно зажигание цифровой датчик, поэтому его значение меняется от 0 до 1.
Также можно использовать форматированное значене "value":"Выкл"

Далее снова выполняем запрос (это запрос можно выполнять с нужной периодичностью, например раз 2 сек , в зависимости от частоты отправки сообщений)

Если сообщений новых нет, то будет пустой ответ {}

Если были, то в ответ придет JSON с новым либо с тем же значением

{"21728414":[{"ignition":{"12":{"from":{"t":1608795806,"y":46.8365631104,"x":-122.667289734},"to":{"t":1608798417,"y":46.8365631104,"x":-122.667289734},"m":1608798417,"f":0,"state":0,"type":1,"hours":1154607,"switches":12,"value":0,"format":{"value":"Выкл","custom_value":""}}}}]}

Т.е от объекта с "21728414" пришло новое сообщения, от второго объекта сообщений нет
Параметр "m" показывает время получения последнего валидного (т.е того значения, которая система смогла рассчитать) значения

"m":1608798417 - 24 Dec 2020 08:26:57 (UTC+0 , все значения времени в нулевом поясе)

Как раз  обозначает, что система не смогла рассчитать значение датчика

В сессию в любой момент можно добавить объект(ы)

Например, добавим объект 22063952

https://hst-api.wialon.com/wialon/ajax.html?svc=events/update_units&params={"mode":"add","units":[{"id":22063952,"detect":{"ignition":0}}]}&sid=028d3ceefed6668b4fd5994f01615b54

{"units": 3} - т.е уже 3 объекта в сессии

И запрос по обновлению информации покажет новый объект

{"21728414":[{"ignition":{"12":{"from":{"t":1608795806,"y":46.8365631104,"x":-122.667289734},"to":{"t":1608799116,"y":46.8365631104,"x":-122.667289734},"m":1608799116,"f":0,"state":0,"type":1,"hours":1154607,"switches":12,"value":0,"format":{"value":"Выкл","custom_value":""}}}}],"22063952":[{"ignition":{"12":{"from":{"t":1608795806,"y":46.8365631104,"x":-122.667289734},"to":{"t":1608799116,"y":46.8365631104,"x":-122.667289734},"m":1608799116,"f":0,"state":0,"type":1,"hours":1154607,"switches":12,"value":0,"format":{"value":"Выкл","custom_value":""}}}}]}

Либо можно удалить объекты

https://hst-api.wialon.com/wialon/ajax.html?svc=events/update_units&params={"mode":"remove","units":[21728414]}&sid=028d3ceefed6668b4fd5994f01615b54
{"units": 2}

{"22063952":[{"ignition":{"12":{"from":{"t":1608795806,"y":46.8365631104,"x":-122.667289734},"to":{"t":1608799446,"y":46.8365631104,"x":-122.667289734},"m":1608799451,"f":0,"state":0,"type":1,"hours":1154607,"switches":12,"value":0,"format":{"value":"Выкл","custom_value":""}}}}]}

{"13511826":[{"ignition":{"6":{"from":{"t":1608799434,"y":0,"x":0},"to":{"t":1608799434,"y":0,"x":0},"m":1608799434,"f":0,"state":1,"type":1,"hours":0,"switches":1,"value":1,"format":{"value":"Вкл","custom_value":""}}}}]}
Diana Cheley
Wialon Hosting Expert
Gurtam