Skip to main content

Downlink — поставить данные в очередь на отправку

Ставит кадр с данными в очередь на отправку устройству. Ответ downlink_data_resp со status: 1 означает «принято в очередь», а не «доставлено»: когда кадр уйдёт в эфир, зависит от класса устройства. Устройству класса A сервер передаёт кадр сразу после его очередного uplink, устройству класса C — сразу после постановки в очередь.

Статус кадра отслеживают по dataId из ответа: сервер присылает сообщения downlink_status, а downlink_ack_req возвращает текущий статус по запросу.

Запрос и ответ: downlink_data_req → downlink_data_resp.
Доступ: с токеном любого уровня — устройства своего приложения и приложений, которые открыли ему доступ.

Запрос​

Поля без пометки «обязательно» можно не передавать.

ПолеТипОписание
cmdstringdownlink_data_req
operation_idstringПроизвольная строка; сервер вернёт её в ответе — по ней сопоставляют запрос и ответ
devEuistringОбязательно devEui или devAddr. DevEUI устройства, 16 hex-символов
devAddrstringОбязательно devEui или devAddr. DevAddr устройства, 8 hex-символов
datastringОбязательно data или object. Полезная нагрузка в hex. Размер — не больше предела из max_dl_data_req
objectobjectОбязательно data или object. Данные в виде объекта. Сервер преобразует их в hex кодеком приложения; кодек может сам выбрать fport
fportuint8Порт приложения: сервер принимает 0–255, для данных приложения используйте 1–223. По умолчанию 2
ttluint32Сколько секунд кадр может ждать в очереди. По умолчанию 3600 (1 час). Если кадр не успел уйти, он получает статус 8 (Expired)
realTimeboolОтправить только в ближайшее окно приёма, не позже чем через 2 секунды после запроса; иначе сервер отбросит кадр со статусом 5 (Realtime Late). По умолчанию false
drstringСкорость передачи строкой, например SF9BW125. Без поля сервер выбирает скорость сам
freqfloatЧастота передачи, МГц, в пределах частотного плана устройства. Без поля сервер выбирает частоту сам
gatewayEuistringШлюз для передачи. Учитывается только для устройств класса C
poweruint8Мощность передачи, дБм, не выше максимума частотного плана. Сервер сейчас значение только проверяет, см. «Что важно знать»
lwClassuint8Не используется: сервер берёт класс из настроек устройства
{
"cmd": "downlink_data_req",
"operation_id": "xyz",
"devEui": "6F1E570FFE14DBFC",
"fport": 2,
"data": "FFFFFFFFFFFF",
"ttl": 86400
}

Ответ​

ПолеТипОписание
cmdstringdownlink_data_resp
operation_idstringЗначение из запроса
statusuint81 — кадр поставлен в очередь, 2 — ошибка
dataIduint32Идентификатор кадра, от 1 до 4294967295. Нужен для downlink_ack_req и приходит в downlink_status
devEuistringDevEUI из запроса; null, если устройство задано через devAddr
devAddrstringDevAddr устройства
timestringВремя постановки в очередь, UTC
dataInQueueuint8Всегда 1 — это не длина очереди
error_code, error_textuint8, stringТолько при ошибке, см. ниже
{
"cmd": "downlink_data_resp",
"operation_id": "xyz",
"status": 1,
"dataId": 3046127811,
"devEui": "6F1E570FFE14DBFC",
"devAddr": "78130AE1",
"time": "2026-10-08 09:15:03",
"dataInQueue": 1
}

Ошибки​

error_codeerror_textЧто случилось
1Device not foundУстройство не найдено или недоступно с вашим токеном
3подробности ошибкиНеверные данные: operation_id не строка, devEui или devAddr не в hex, переданы оба поля data и object или ни одного, data не в hex, кодек не смог закодировать object
4Payload max size exceed for current SFДанные не помещаются в кадр на этой скорости — см. max_dl_data_req
5Impossible datarate valueВ dr скорость, которой нет в частотном плане устройства
6Frequency must be floatfreq — не число
7Frequency not in band rangefreq вне частотного плана устройства
8—power — не положительное целое или выше максимума частотного плана

Что важно знать​

  • Устройство не подтверждает приём. Кадр уходит как неподтверждаемый (Unconfirmed Data Down). Итоговый статус 3 (Delivered) означает, что шлюз излучил кадр, а не что устройство его приняло. Убедиться, что устройство выполнило команду, можно только по его ответу в uplink.
  • Класс A ждёт uplink. Кадр уйдёт после очередного uplink устройства — через минуты или часы, в зависимости от того, как часто оно выходит на связь. Если устройство выходит на связь реже одного раза в час, увеличьте ttl, иначе срок ожидания истечёт раньше, чем кадр уйдёт. До первого uplink после подключения к сети устройство downlink не получит.
  • Один кадр на одно окно. После uplink устройство получает один кадр. Если в очереди остались ещё кадры, сервер сообщает об этом устройству флагом FPending. Из очереди первым уходит последний поставленный кадр.
  • realTime — для ответа сразу после uplink и для класса C. Флаг имеет смысл в двух случаях: запрос отправлен сразу после получения realtime_data от устройства класса A или кадр предназначен устройству класса C. Опоздавший кадр отбрасывается, а не ждёт следующего окна.
  • dr и freq задают параметры передачи для окна, которое выберет сервер. Без них сервер берёт параметры из настроек устройства и частотного плана.
  • Класс B сервер пока не поддерживает: такому устройству кадр не будет отправлен.
Текущая версия ONS

Поля object, ttl и power добавлены в сервер в июне 2026 и в описании v0.17 их нет. Значение power сервер проверяет, но в текущей версии при передаче его не применяет: шлюз использует мощность по умолчанию из частотного плана.

См. также​