get_last
Чтобы получить текущее состояние активного события или последнее известное состояние завершённого события, используйте метод events/get_last.
В отличие от events/get, этот метод не требует загрузки событий в сессию и не возвращает историю событий. В отличие от events/check_updates, он не требует добавления элемента в сессию с помощью events/update_items.
Для использования метода необходимо право Просмотр объекта и его основных свойств на указанный объект или ресурс.
Точка доступа
svc=events/get_last¶ms={
"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, зависящему от детектора, как показано в примерах.
{
"<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 объекта:
svc=events/get_last¶ms={
"itemId": <unit_id>
}
Ответ представляет собой объект с ключами в виде каждого доступного типа детектора:
{
"<detector_type>": {
"...": "..."
}
}
Получение состояний нескольких детекторов
Чтобы одновременно получить состояния нескольких детекторов, укажите их в параметре type через запятую. В следующем запросе запрашиваются состояния детекторов trips и sensors, а датчики фильтруются по имени с помощью filter2:
svc=events/get_last¶ms={
"itemId": <unit_id>,
"type": "trips,sensors",
"filter2": "Temperature 1,Temperature 2",
"detalization": 39
}
Ответ содержит по одному объекту для каждого запрошенного детектора. Детектор sensors группирует данные по ID датчика, а детектор trips возвращает данные напрямую:
{
"trips": { "...": "..." },
"sensors": {
"<sensor_id>": { "...": "..." }
}
}
Получение текущего состояния уровня топлива
Чтобы получить состояние уровня топлива для всех датчиков уровня топлива объекта, укажите ID объекта и детектор fuel_level. Используйте detalization 39 (0x27) для включения основных данных события, данных, зависящих от типа детектора, параметров сообщения и отформатированных значений:
svc=events/get_last¶ms={
"itemId": <unit_id>,
"type": "fuel_level",
"filter1": 0,
"filter2": "",
"detalization": 39
}
Ответ сгруппирован по ID датчика. С detalization 39 (0x27) он может содержать следующие поля:
{
"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), чтобы включить основные данные события, данные, зависящие от типа детектора, параметры сообщения и отформатированные значения:
svc=events/get_last¶ms={
"itemId": <unit_id>,
"type": "ev",
"filter1": 0,
"filter2": "",
"detalization": 39
}
Ответ сгруппирован по ID датчика. Для текущего состояния детектор ev возвращает уровень заряда батареи, и ответ может содержать следующие поля:
{
"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 значение уровня заряда всегда возвращается в кВт⋅ч.
Детектор
evобъединяет данные об уровне заряда батареи и зарядках электромобиля. В ответах с историей событий он возвращает события изменения уровня заряда и зарядки. Вevents/get_lastв ответе с текущим состоянием используются приведённые выше поля уровня заряда батареи. Чтобы запросить только события изменения уровня заряда батареи, используйтеbattery_level. Чтобы получить события зарядки с историей, используйтеchargeвместе с методами events/load и events/get.
Получение текущего состояния назначений водителей
Чтобы получить текущее состояние назначений водителей, укажите ID ресурса и детектор resource_drivers. Установите значение filter1 в ID водителя для получения состояния одного водителя или 0 для всех водителей. Значение detalization 7 (0x7) возвращает основные данные события, данные, зависящие от типа детектора, и параметры сообщения, связанного с событием.
svc=events/get_last¶ms={
"itemId": <resource_id>,
"type": "resource_drivers",
"filter1": 0,
"filter2": "",
"detalization": 7
}
Ответ сгруппирован по ID водителя. Каждый ID водителя имеет один объект, описывающий текущее состояние этого водителя.
{
"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 |
Назначение было завершено, потому что другой исключающий водитель был назначен на тот же объект. |
Для
state0объектtoне показывает время и место снятия. Он показывает последнее обработанное сообщение. Время снятия — это время окончания завершённого события в истории событий, которую можно получить с помощью events/get.
Чтобы изменить состояние назначения вручную, используйте resource/driver_actions_register. Чтобы просмотреть или удалить зарегистрированные ручные действия, используйте resource/driver_actions_list или resource/driver_actions_cleanup.