Получить uplink-пакеты из базы
Возвращает uplink-пакеты устройств, сохранённые в базе сервера, за указанный период. Команда нужна, чтобы получить данные за прошедший период — например, если сообщения realtime_data потерялись при обрыве соединения или их получило другое подписанное соединение.
Ответ приходит двумя сообщениями get_data_resp с одним operation_id: сначала status: 1 — запрос принят, затем status: 3 — данные.
Запрос и ответ: get_data_req → get_data_resp (два сообщения).
Доступ: с токеном низкого уровня — устройства своего приложения и приложений, которые открыли ему доступ; с токеном высокого уровня — все устройства владельца.
Запрос
Поля без пометки «обязательно» можно не передавать.
| Поле | Тип | Описание |
|---|---|---|
cmd | string | get_data_req |
operation_id | string | Произвольная строка; сервер вернёт её в ответе — по ней сопоставляют запрос и ответ |
date_from | string | Обязательно. Начало периода, включительно. Формат YYYY-MM-DD HH:MM:SS+HHMM |
date_to | string | Обязательно. Конец периода, не включительно. Тот же формат |
devEui | string | DevEUI устройства, 16 hex-символов. Без него — все доступные устройства |
appId | string | Идентификатор приложения (APP_ID), чтобы взять данные только его устройств |
limit | uint32 | Сколько пакетов вернуть. По умолчанию 10; значение больше 500 сервер уменьшает до 500 |
descending | bool | true — сначала новые. По умолчанию false: сначала старые |
{
"cmd": "get_data_req",
"operation_id": "abc",
"devEui": "7950D20CBBB77561",
"date_from": "2026-10-07 00:00:00+0500",
"date_to": "2026-10-08 00:00:00+0500",
"limit": 100
}
Ответ
Первое сообщение подтверждает, что запрос принят:
{
"cmd": "get_data_resp",
"operation_id": "abc",
"status": 1
}
Второе — с данными:
| Поле | Тип | Описание |
|---|---|---|
cmd | string | get_data_resp |
operation_id | string | Значение из запроса |
status | uint8 | 1 — запрос принят, 3 — данные, 2 — ошибка |
dataCount | uint32 | Сколько пакетов в списке |
dataList | array | Пакеты, поля — в таблице ниже |
error_code, error_text | uint8, string | Только при ошибке, см. ниже |
Поля пакета в dataList:
| Поле | Тип | Описание |
|---|---|---|
id | uint64 | Номер записи в базе |
devEui, devAddr | string | Устройство |
appId | string | Идентификатор приложения устройства (APP_ID) |
time | string | Время приёма, UTC |
fport | uint8 | Порт приложения |
data | string | Полезная нагрузка в hex |
size | uint16 | Размер пакета, байт |
fcnt | uint32 | Счётчик uplink устройства |
mtype | uint8 | Тип сообщения LoRaWAN: 2 — без подтверждения, 4 — с подтверждением |
adr | bool | Устройство включило ADR |
ack | bool | Сервер это поле не заполняет |
fopts | string | MAC-команды в заголовке пакета, hex |
datr | uint8 | Индекс скорости передачи (DR) |
freq | float | Частота, МГц |
rssi | int16 | Уровень сигнала, дБм |
lsnr | float | Отношение сигнал/шум, дБ |
gatewayEui | string | Шлюз, от которого записан пакет |
gateway_available | object | Все шлюзы, принявшие пакет: EUI шлюза → строка [SNR, RSSI] |
packet_loss_rate | float | Доля потерянных пакетов устройства по оценке сервера, % |
output_ack, output_ack_time | bool, string | Устаревшие поля, сервер их не заполняет |
{
"cmd": "get_data_resp",
"operation_id": "abc",
"status": 3,
"dataCount": 1,
"dataList": [
{
"id": 4671384,
"devEui": "7950D20CBBB77561",
"devAddr": "7950D20C",
"appId": "77179F01",
"time": "2026-10-07 13:06:22+0000",
"fport": 2,
"data": "7713F800020F010AA78D0014360100150B0000",
"size": 32,
"fcnt": 7525,
"mtype": 2,
"adr": true,
"ack": false,
"fopts": "",
"datr": 4,
"freq": 865.1,
"rssi": -100,
"lsnr": 6.2,
"gatewayEui": "0000B827EB76A75F",
"gateway_available": {
"0000B827EB76A75F": "[6.2, -100]"
},
"packet_loss_rate": 0,
"output_ack": false,
"output_ack_time": null
}
]
}
Ошибки
error_code | error_text | Что случилось |
|---|---|---|
| 3 | Invalid date range | Не указан date_from или date_to |
| 1 | Date parse error | Дату не удалось разобрать |
При ошибке приходит одно сообщение со status: 2, без подтверждения приёма.
Что важно знать
- Указывайте часовой пояс в датах (
+0500,+0000). Время в ответе — в UTC. - Больше 500 пакетов за раз не придёт. Данные за длинный период запрашивайте по частям: следующий запрос начинайте со времени последнего полученного пакета — он придёт ещё раз, отбросьте его по
id. - Поле
devAddrв запросе сервер для отбора не использует — фильтруйте поdevEui. - В выборку попадают только uplink. Отправленные устройствам кадры возвращает
get_downlink_data_req.
См. также
consume_req— получать данные в реальном времени.get_downlink_data_req— история отправленных кадров.