API получения показаний по одометру и уровню топлива

Проблематика вопроса: зачастую клиенты фиксируют данные приходящие от Систем мониторинга транспорта в каких-либо собственных информационных системах. Например, это может логистическая система, или собственная 1С.

Решение: интеграция с информационной системой компании при помощи API получения показаний по одометру и топливу. API поможет решить следующие задачи:

  • Формирование путевых листов. При помощи данных из API можно сформировать путевой лист, например, в 1С.
  • Фиксация данных в различных системах оптимизации работы автопарков.
  • Локальное хранение данных в собственных информационных системах.
  • Анализ работы автопарка.

Общий принцип работы:

  1. Авторизация;
  2. Запрос доступных объектов мониторинга;
  3. Построение статистики по показаниям одометра;
  4. Построение статистики по уровню топлива.

Документация : доступна в интерфейсе Swagger : https://developers.scout-gps.ru/swagger/ui/index#/

Авторизация

Для того, чтобы воспользоваться API требуется выполнить аутентификацию. POST-метод api/auth/token предназначен для получения токена авторизации по данным Вашей учетной записи на сервере СКАУТ-365.

Для получения токена необходимо сделать POST запрос по адресу: 
https://api.scout-gps.ru/api/auth/token следующего вида:

grant_type=password&username=demo&password=demo&locale=ru&client_id=facac5c1-f966-4ed3-ada2-00cea620cb78

В блоке username необходимо указать логин учетной записи на СКАУТ-365, в блоке  password   логин учетной записи. Для примера выше следует заменить поля demo на свои учетные записи. Остальные параметры следует оставить без изменений.

Для авторизации через
Swagger необходимо вызвать диалоговое окно авторизации. Сделать это можно
нажав пункт меню  Expand Operations  в любом из доступных методов API (Рисунок 1).

 

Рисунок 1 —  Главная страница Swagger

В правой части раскрывшейся области требуется нажать на иконку с восклицательным знаком (Рисунок 2). 

Рисунок 2 —  Вызов окна аутентификации

Нажатие на эту иконку вызовет окно аутентификации (Рисунок 3).

 

Рисунок 3 —  Диалоговое окно авторизации

В поля User и Password требуется ввести логин и пароль учётной записи пользователя ПО СКАУТ-Платформа. В выпадающем списке Type необходимо выбрать Basic auth, а в полях ClientId и Secret ввести строку scout-online

Запрос списка доступных объектов мониторинга

Для того, чтобы получить данные по показаниям одометра или уровню топлива, используя API, в запросе требуется передать уникальный идентификатор объекта мониторинга (Рисунок 4):

Рисунок 4 —  Уникальный идентификатор передаваемый в запрос

Чтобы определить этот уникальный идентификатор после запроса на авторизацию требуется воспользоваться методами Units или Terminals (Рисунок 5): 

Рисунок 5 — Методы Units и Terminals

С описанием запроса, которые требуется направить сервису, чтобы получить список объектов мониторинга, доступных учётной записи, можно раскрыв описание метода Units в Swagger (Рисунок 6). Для отправки запроса требуется нажать кнопку "Try it out!" ( ).

Рисунок 6  — Метод Units

Построение статистки по показаниям одометра

Метод  /statistics/odometer   возвращает данные по пробегу за запрошенный интервал. В зависимости от запроса ответ может быть детализирован с точностью до суток внутри заданного интервала. 

По каждому интервалу, выводимому в ответе, сервис выводит либо данные пробега по одометру, либо данные пробега по навигации.

Решает он это следующим образом:

  • Рассчитывается показания по одометру на начало интервала beginOdometrKm;
  • Рассчитываются показания по одометру на конец периода endOdometrKm;
  • Рассчитывается пробег по навигации NavigationKm;
  • Рассчитывается пробег по одометру OdometrKm (по текущей логике он может быть не равен арифметической разнице (endOdometrKm – beginOdometrKm).

С дополнительными особенностями, которые накладываются на обработку данных, получаемых при помощи API можно ознакомиться в статье Особенности обработки статистики по показаниям одометра в API Одометр и топливо.

Метод доступен по адресу: https://api.scout-gps.ru/statistics/odometer

Запрос имеет следующие параметры:

Параметр Обязательный ли? Тип  Формат данных Допустимые значения Комментарий
unitID да int Целое число   ID транспортного средства
beginDateTime да  

date-time

Должно соответствовать одной из масок

  • YYYY/MM/DD HH:MM:SS
  • YYYY/MM/DD
[1000/01/01 00:00:00, 9999/12/31 23:59:59]

Начало периода.

Если в запросе не указано HH:MM:SS, то сервис считает их равными 00:00:00.

endDateTime да   

date-time

 

Должно соответствовать одной из масок

  • YYYY/MM/DD HH:MM:SS
  • YYYY/MM/DD
  [1000/01/01 00:00:00, 9999/12/31 23:59:59]

Конец запроса.

Если в запросе не указано HH:MM:SS, то сервис считает их равными 00:00:00.

Для запроса с endDateTime > beginDateTime возвращает 400 статус

 olsonID  нет string    

Таймзона.

Чувствителен к регистру.

Если в запросе параметр не передан/значение параметра не валидно — сервис рассматривает даты в таймзоне "Europe/Moscow"

  interval   нет   string  
  • day
  • none
 

Дополнительная  детализация — тип интервалов, на которые разбивается период beginDateTime..endDateTime  для расчета промежуточных показаний одометра.

  • "day" - сутки
  • "none" - без доп. детализации

Как происходит деление периода на интервалы?

Границей суток считается время 00:00:00.

Таким образом, для периода beginDateTime = 2017/12/05 19:56:01 endDateTime=2017/12/07 10:31:02  будет выделено три интервала:

1) 2017/12/05 19:56:01 ... 2017/12/05 23:59:59

2) 2017/12/06 00:00:00 ... 2017/12/06 23:59:59

3) 2017/12/07 00:00:00 ... 2017/12/07 10:31:02

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

Если параметр не указан, либо указано невалидное значение - сервис вернет данные точно за период  beginDateTime..endDateTime (без детализации).

Если и в endDateTime и в beginDateTime  указана одна и та же дата - сервис вернет данные точно за период  beginDateTime..endDateTime (без детализации).

Пример строки запроса: 
curl -X GET --header 'Accept: application/json' --header 'Authorization: Bearer токен авторизации' 'httрs: //арi.sсоut-gps.ru/statistics/odometer?unitID=123456&beginDateTime=2017%2F01%2F01 &endDateTime=2017%2F01%2F01&olsonId=Europe%2FMoscow&interval=day'  

С ответами от сервиса можно ознакомиться по ссылке: Ответы на запросы к API Одометр и топливо.

 

Построение статистки по уровню топлива

Этот метод возвращает по заданному транспортному средству уровень топлива в зависимости от следующих параметров:

  • на начало и конец каждых полных суток;
  • только на начало и конец заданного периода.

Метод доступен по адресу:  https://api.scout-gps.ru/statistics/fuel

Параметры запроса описаны в таблице:

Параметр Обязательный ли? Тип  Формат данных Допустимые значения Комментарий
unitID да int Целое число   ID транспортного средства
beginDateTime да  

date-time

Должно соответствовать одной из масок

  • YYYY/MM/DD HH:MM:SS
  • YYYY/MM/DD
[1000/01/01 00:00:00, 9999/12/31 23:59:59]

Начало периода.

Если в запросе не указано HH:MM:SS, то сервис считает их равными 00:00:00.

endDateTime да   

date-time

 

Должно соответствовать одной из масок

  • YYYY/MM/DD HH:MM:SS
  • YYYY/MM/DD
  [1000/01/01 00:00:00, 9999/12/31 23:59:59]

Конец запроса.

Если в запросе не указано HH:MM:SS, то сервис считает их равными 00:00:00.

Для запроса с endDateTime > beginDateTime возвращает 400 статус

 olsonID  нет string    

Таймзона.

Чувствителен к регистру.

Если в запросе параметр не передан/значение параметра не валидно — сервис рассматривает даты в таймзоне "Europe/Moscow"

  interval   нет   string  
  • day
  • none
 

Дополнительная  детализация — тип интервалов, на которые разбивается период beginDateTime..endDateTime  для расчета промежуточных показаний одометра.

  • "day" - сутки
  • "none" - без доп. детализации

Как происходит деление периода на интервалы?

Границей суток считается время 00:00:00.

Таким образом, для периода beginDateTime = 2017/12/05 19:56:01 endDateTime=2017/12/07 10:31:02  будет выделено три интервала:

1) 2017/12/05 19:56:01 ... 2017/12/05 23:59:59

2) 2017/12/06 00:00:00 ... 2017/12/06 23:59:59

3) 2017/12/07 00:00:00 ... 2017/12/07 10:31:02

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

Если параметр не указан, либо указано невалидное значение - сервис вернет данные точно за период  beginDateTime..endDateTime (без детализации).

Если и в endDateTime и в beginDateTime  указана одна и та же дата - сервис вернет данные точно за период  beginDateTime..endDateTime (без детализации).

Пример строки запроса:
curl -X GET --header 'Accept: application/json' --header 'Authorization: Bearer токен авторизации' 'httрs: //api.scout-gps.ru/statistics/fuel?unitID=123456&beginDateTime=2017%2F01%2F01&endDateTime=2017%2F01%2F01&olsonId=Europe%2FMoscow&interval

 

С ответами от сервиса можно ознакомиться по ссылке: Ответы на запросы к API Одометр и топливо.