Справочный центр Wialon

get_last

Чтобы получить текущее состояние активного события или последнее известное состояние завершённого события, используйте метод events/get_last.

В отличие от events/get, этот метод не требует загрузки событий в сессию и не возвращает историю событий. В отличие от events/check_updates, он не требует добавления элемента в сессию с помощью events/update_items.

Для использования метода необходимо право Просмотр объекта и его основных свойств на указанный объект или ресурс.

Точка доступа

Copied!
svc=events/get_last&params={
  "itemId": <long>,
  "type": <text>,
  "filter1": <long>,
  "filter2": <text>,
  "detalization": <uint>,
  "measure": <uint>,
  "lang": <text>
}

Параметры

Запрос должен содержать параметр itemId. Все остальные параметры являются необязательными.

Параметр Описание
itemId ID объекта или ID ресурса. ID ресурса указывается для детектора resource_drivers (события назначения водителей).
type Имена детекторов событий для запроса. Укажите один или несколько детекторов через запятую (например, trips,sensors) или используйте подстановочные знаки * и ? (например, sens*). По умолчанию используется *, и возвращается состояние всех доступных детекторов. Вы можете использовать ключ детектора из этого ответа в качестве значения в следующем запросе.
filter1 Фильтр детектора. Используйте его только при запросе одного детектора в параметре type. Для детекторов на основе датчиков (sensors, lls, ev, filling, theft, fuel_level, charge, battery_level) укажите ID датчика или 0 для всех датчиков этого типа. Для resource_drivers укажите ID водителя или 0 для всех водителей. Для trips, counters, speedings, health_check и eco_driving используйте 0. Значение по умолчанию — 0.
filter2 Дополнительный фильтр детектора по имени. Работает только для детекторов, которые регистрируют события для конкретного датчика или водителя: детекторы на основе датчиков (фильтрация по имени датчика) и resource_drivers (фильтрация по имени водителя). Для trips, counters, speedings, health_check и eco_driving значение игнорируется. Укажите одно имя или несколько имён через запятую, при необходимости используйте подстановочные знаки * и ?, например, Fuel*,Tank?. Этот фильтр применяется только когда filter1 равен 0. Значение по умолчанию — пустая строка ("").
detalization Флаги состава ответа. Должны быть указаны в десятичном формате. Значение по умолчанию — 7 (0x7), при котором возвращаются основные данные события, данные, зависящие от типа детектора, и параметры сообщения, связанного с событием. См. ниже.
measure Система измерения: 0 — метрическая (СИ), 1 — американская, 2 — имперская, 3 — метрическая с галлонами. Если параметр не указан, используется значение текущей сессии (два младших бита параметра flags метода render/set_locale). Если значение в сессии не задано, используется 0.
lang Язык (двухсимвольный код, например, en или es). Если параметр не указан, используется значение текущей сессии (см. параметр language метода render/set_locale). Если значение в сессии не задано, используется en.

Флаги

Флаг Описание
0x1 Основные данные события: время, координаты и служебные флаги событий.
0x2 Данные, зависящие от типа детектора.
0x4 Параметры сообщения, связанного с событием.
0x8 Дополнительные данные события, если они поддерживаются детектором.
0x10 Подробные данные сообщений, если они поддерживаются детектором.
0x20 Отформатированные значения детектора.
0x100 Дополнительные события, зарегистрированные детекторами fuel_level и battery_level со значениями, собранными с момента предыдущего события. Не требуется для большинства интеграций.

Ответ

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

Структура данных внутри каждого ключа зависит от детектора и запрошенных флагов.

Общая структура

С флагом 0x1 детекторы trips и counters возвращают данные напрямую в следующей структуре. Другие детекторы группируют объекты событий по ID, зависящему от детектора, как показано в примерах.

Copied!
{
  "<detector_type>": {
    "from": {
      "t": <uint>,
      "y": <double>,
      "x": <double>
    },
    "to": {
      "t": <uint>,
      "y": <double>,
      "x": <double>
    },
    "m": <uint>,
    "f": <uint>
  }
}
Поле Описание
from Данные начала события: t — UNIX time, y — широта, x — долгота.
to Данные последнего обработанного сообщения: t — UNIX time, y — широта, x — долгота.
m Время последнего обработанного сообщения, UNIX time.
f Служебные флаги событий.

Для приватной позиции значения x и y возвращаются как 0.

Другие флаги возвращают те же данные, что и соответствующие флаги events/check_updates: данные, зависящие от типа детектора (0x2), параметры сообщения, связанного с событием (0x4), дополнительные подробные данные (0x8), подробные данные сообщений (0x10) и отформатированные значения (0x20). Для детектора resource_drivers возвращаемые поля описаны в примере ниже.

Коды ошибок

Код Описание
1 Неверный или устаревший SID запроса.
4 Ошибка валидации параметров запроса.
5 События отключены.
7 Сервис событий недоступен, не удалось получить элемент или у пользователя нет права доступа Просмотр объекта и его основных свойств на указанный объект или ресурс.

Примеры

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

Получение состояния всех детекторов объекта

Чтобы получить состояние всех доступных детекторов для объекта, укажите только ID объекта:

Copied!
svc=events/get_last&params={
  "itemId": <unit_id>
}

Ответ представляет собой объект с ключами в виде каждого доступного типа детектора:

Copied!
{
  "<detector_type>": {
    "...": "..."
  }
}

Получение состояний нескольких детекторов

Чтобы одновременно получить состояния нескольких детекторов, укажите их в параметре type через запятую. В следующем запросе запрашиваются состояния детекторов trips и sensors, а датчики фильтруются по имени с помощью filter2:

Copied!
svc=events/get_last&params={
  "itemId": <unit_id>,
  "type": "trips,sensors",
  "filter2": "Temperature 1,Temperature 2",
  "detalization": 39
}

Ответ содержит по одному объекту для каждого запрошенного детектора. Детектор sensors группирует данные по ID датчика, а детектор trips возвращает данные напрямую:

Copied!
{
  "trips": { "...": "..." },
  "sensors": {
    "<sensor_id>": { "...": "..." }
  }
}

Получение текущего состояния уровня топлива

Чтобы получить состояние уровня топлива для всех датчиков уровня топлива объекта, укажите ID объекта и детектор fuel_level. Используйте detalization 39 (0x27) для включения основных данных события, данных, зависящих от типа детектора, параметров сообщения и отформатированных значений:

Copied!
svc=events/get_last&params={
  "itemId": <unit_id>,
  "type": "fuel_level",
  "filter1": 0,
  "filter2": "",
  "detalization": 39
}

Ответ сгруппирован по ID датчика. С detalization 39 (0x27) он может содержать следующие поля:

Copied!
{
  "fuel_level": {
    "<sensor_id>": {
      "from": {
        "t": <uint>,
        "y": <double>,
        "x": <double>
      },
      "to": {
        "t": <uint>,
        "y": <double>,
        "x": <double>
      },
      "m": <uint>,
      "f": <uint>,
      "value": <double>,
      "raw_value": <double>,
      "filled": <double>,
      "timeDiff": <uint>,
      "latDiff": <double>,
      "lonDiff": <double>,
      "format": {
        "value": <text>,
        "raw_value": <text>,
        "filled": <text>,
        "theft": <text>,
        "custom_value": <text>
      }
    }
  }
}

Получение текущего состояния уровня заряда

Чтобы получить текущее состояние уровня заряда электромобиля, укажите ID объекта и детектор ev. В примере используется detalization 39 (0x27), чтобы включить основные данные события, данные, зависящие от типа детектора, параметры сообщения и отформатированные значения:

Copied!
svc=events/get_last&params={
  "itemId": <unit_id>,
  "type": "ev",
  "filter1": 0,
  "filter2": "",
  "detalization": 39
}

Ответ сгруппирован по ID датчика. Для текущего состояния детектор ev возвращает уровень заряда батареи, и ответ может содержать следующие поля:

Copied!
{
  "ev": {
    "<sensor_id>": {
      "from": {
        "t": <uint>,
        "y": <double>,
        "x": <double>
      },
      "to": {
        "t": <uint>,
        "y": <double>,
        "x": <double>
      },
      "m": <uint>,
      "f": <uint>,
      "value": <double>,
      "raw_value": <double>,
      "format": {
        "value": <text>,
        "raw_value": <text>,
        "custom_value": <text>
      }
    }
  }
}

Поля from, to, m и f описаны в разделе Общая структура. Поле value содержит рассчитанный уровень заряда батареи, а raw_value — необработанное значение датчика.

Если в настройках датчика ключу show_as_percentage присвоено значение 1 и battery_capacity больше 0, поля value и raw_value внутри объекта format возвращают уровень заряда батареи в процентах от battery_capacity. В противном случае в них возвращается значение уровня заряда в кВт⋅ч. В полях value и raw_value вне объекта format значение уровня заряда всегда возвращается в кВт⋅ч.

Получение текущего состояния назначений водителей

Чтобы получить текущее состояние назначений водителей, укажите ID ресурса и детектор resource_drivers. Установите значение filter1 в ID водителя для получения состояния одного водителя или 0 для всех водителей. Значение detalization 7 (0x7) возвращает основные данные события, данные, зависящие от типа детектора, и параметры сообщения, связанного с событием.

Copied!
svc=events/get_last&params={
  "itemId": <resource_id>,
  "type": "resource_drivers",
  "filter1": 0,
  "filter2": "",
  "detalization": 7
}

Ответ сгруппирован по ID водителя. Каждый ID водителя имеет один объект, описывающий текущее состояние этого водителя.

Copied!
{
  "resource_drivers": {
    "<driver_id>": {
      "from": {
        "t": <uint>,
        "y": <double>,
        "x": <double>
      },
      "to": {
        "t": <uint>,
        "y": <double>,
        "x": <double>
      },
      "m": <uint>,
      "f": <uint>,
      "state": <uint>,
      "aflags": <uint>,
      "unit_id": <long>,
      "propitem_cr_time": <uint>,
      "real_time_from": <uint>,
      "validate_sensor_id": <uint>,
      "switched_to": <long>
    }
  }
}

Поля from, to, m и f описаны в разделе Общая структура. Детектор также возвращает следующие поля:

Поле Описание
state Текущее состояние водителя: 0 — снят, 1 — назначен.
aflags Флаги назначения (см. ниже).
unit_id Для state 1 — ID объекта, на который назначен водитель. Для state 0 — ID объекта, с которого был снят водитель, или 0.
propitem_cr_time Время создания водителя, UNIX time. Используйте этот параметр, чтобы определить, идет ли речь об одном и том же водителе или о водителе, который был удален и создан заново с тем же ID.
real_time_from Фактическое время начала назначения, UNIX time. Если длительное назначение было разделено на несколько событий, это время начала самого раннего события в цепочке.
validate_sensor_id ID датчика, используемого для подтверждения автоматического назначения и следующего за ним снятия. Значение 0, если подтверждение не используется.
switched_to ID объекта, на который был переназначен водитель. Возвращается только когда водитель был назначен на другой объект без снятия с текущего.

Поле aflags может содержать следующие флаги. Те же флаги используются в завершённых событиях, возвращаемых events/get, поэтому текущее состояние обычно содержит только флаги, которые описывают, как началось назначение.

Флаг Описание
0x1 Назначение завершилось, когда водитель был переназначен на другой объект. ID этого объекта возвращается в switched_to.
0x2 Назначение началось, когда водитель был переназначен с другого объекта. Это завершило предыдущее назначение на том объекте.
0x4 Назначение было начато вручную.
0x8 Назначение было завершено вручную.
0x10 Назначение начинается с state 0, потому что другой исключающий водитель был назначен на тот же объект.
0x20 Назначение было завершено, потому что другой исключающий водитель был назначен на тот же объект.

Для state 0 объект to не показывает время и место снятия. Он показывает последнее обработанное сообщение. Время снятия — это время окончания завершённого события в истории событий, которую можно получить с помощью events/get.

Чтобы изменить состояние назначения вручную, используйте resource/driver_actions_register. Чтобы просмотреть или удалить зарегистрированные ручные действия, используйте resource/driver_actions_list или resource/driver_actions_cleanup.

Если вы заметили ошибку в тексте, пожалуйста, выделите её и нажмите Ctrl+Enter.