Skip to main content

Изменить настройки устройства

Меняет настройки зарегистрированного устройства: ключи, класс, код региона, параметры ADR, описание, координаты, приложение и тариф. Сервер ищет устройство по DevEUI или DevAddr. Передавайте только те поля, которые нужно изменить: остальные останутся как были.

Команда меняет карточку устройства в базе, но не сообщает об изменениях сетевому серверу — см. «Что важно знать».

Запрос и ответ: update_device_req → update_device_resp.
Доступ: только токен высокого уровня; можно изменить любое устройство владельца. С токеном низкого уровня сервер ответит ошибкой 1.

Текущая версия ONS
  • Коды 7 (тариф уже меняли сегодня) и 9 (устройство не найдено) из описания v0.17 сейчас не приходят: в обоих случаях сервер отвечает кодом 0 без error_text.
  • Значения 0 и false сервер не применяет — см. «Что важно знать».
  • Сервер принимает поля tariff_code и active, которых нет в схеме запроса v0.17.

Запрос​

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

ПолеТипОписание
cmdstringupdate_device_req
operation_idstringПроизвольная строка; сервер вернёт её в ответе — по ней сопоставляют запрос и ответ
devEuistringОбязательно devEui или devAddr. DevEUI устройства, 16 hex-символов заглавными буквами — сервер сравнивает с учётом регистра. Сменить DevEUI нельзя
devAddrstringОбязательно devEui или devAddr. DevAddr устройства, 8 hex-символов заглавными буквами. Только для поиска: сменить DevAddr этой командой нельзя. Если переданы оба поля, должны совпасть оба
application_euistringПеренести устройство в другое приложение владельца: AppEUI приложения, 16 hex-символов заглавными буквами
tariff_codestringСменить тариф: код из get_tariffs_req. Когда начнёт действовать — см. «Что важно знать»
app_keystringAppKey, 32 hex-символа
nwks_keystringNwkSKey, 32 hex-символа
apps_keystringAppSKey, 32 hex-символа
node_classuint8Класс LoRaWAN: 1 — A, 2 — B, 3 — C. Сервер не проверяет значение
regionuint8Код региона 1–37, см. Коды регионов. Код 0 не применяется. Сервер не проверяет код: с неизвестным кодом устройство перестанет обслуживаться
rx_windowuint8Окно приёма для downlink: 1 — RX1, 2 — RX2
adrboolТолько true: выключить ADR этой командой нельзя
adr_intervaluint16Раз в сколько кадров uplink сервер пересчитывает скорость, от 1
adr_min, adr_maxuint8Границы DR для ADR, 1–15
adr_fixuint8Фиксированный DR, 1–15. Сбросить в null нельзя
seq_up, seq_downuint32Счётчики кадров uplink и downlink, от 1
seq_chkuint8Проверка счётчика кадров: только 1 (Relaxed). Сервер сейчас значение только хранит
activationuint8Способ активации: только 1 (ABP)
duty_cycle, down_queueuint8От 1. Сервер сейчас значения только хранит
descriptionstringОписание, до 255 символов. Пустая строка стирает описание
lat, lonfloatНовые координаты, WGS 84. Учитываются только вместе; стереть координаты нельзя
activeboolfalse — вывести устройство из работы, как при удалении
{
"cmd": "update_device_req",
"operation_id": "rdk",
"devEui": "7DA50BE8C74CE6DC",
"application_eui": "6042366ED7A302CF",
"app_key": "79AFAC4879C5A1E2BFEDF4A4E35C0C6B",
"region": 2
}

Ответ​

ПолеТипОписание
cmdstringupdate_device_resp
operation_idstringЗначение из запроса
statusuint81 — успех, 2 — ошибка
devEui, devAddr, application_eui, description, app_key, nwks_key, apps_key, node_class, rx_window, adr, adr_interval, adr_min, adr_max, adr_fix, duty_cycle, seq_up, seq_down, seq_chk, region, activationКарточка устройства после изменения — поля как в get_devices_req
down_queue, tariff_code, activeЗначения из запроса; null, если поле не передано. tariff_code — не текущий тариф устройства
lat, lonfloatКоординаты; null, если не заданы
error_code, error_textuint8, stringТолько при ошибке, см. ниже
{
"cmd": "update_device_resp",
"operation_id": "rdk",
"status": 1,
"devEui": "7DA50BE8C74CE6DC",
"devAddr": "2F1BA78D",
"application_eui": "6042366ED7A302CF",
"description": "",
"app_key": "79AFAC4879C5A1E2BFEDF4A4E35C0C6B",
"nwks_key": "FF93AB45868BC0ED652DB9A0698CCAD7",
"apps_key": "B65466247DC7F5B5CCA383AD47233D86",
"node_class": 1,
"rx_window": 1,
"adr": true,
"adr_interval": 20,
"adr_min": 0,
"adr_max": 5,
"adr_fix": null,
"duty_cycle": 0,
"seq_up": 118,
"seq_down": 4,
"seq_chk": 0,
"region": 2,
"activation": 0,
"down_queue": null,
"tariff_code": null,
"active": null,
"lon": 75.898052,
"lat": 42.221848
}

Ошибки​

error_codeerror_textЧто случилось
1Unauthorized accessЗапрос пришёл с токеном низкого уровня
2Required field is not filledНет ни devEui, ни devAddr
3Data is filled in with an errordevEui, devAddr, application_eui или ключ неверного формата; lat или lon — не число
5Application does not existsУ владельца нет приложения с таким application_eui, или оно удалено
6Tariff does not existsНет действующего тарифа с кодом tariff_code
0—Устройство не найдено или принадлежит другому владельцу; тариф уже меняли, и новый ещё не начал действовать; база отклонила значение, например rx_window больше 2; внутренняя ошибка сервера

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

  • Сетевой сервер узнаёт об изменениях не сразу. Он держит в памяти настройки устройства, которое сейчас на связи. Правка в интерфейсе ONS сбрасывает их, а эта команда — нет. Устройство OTAA получит новые ключи, код региона, класс, окно приёма, параметры ADR и приложение при следующей активации (join). Устройство ABP сетевой сервер может и дальше обслуживать со старыми настройками: чтобы применить новые сразу, сохраните устройство в интерфейсе ONS.
  • 0 и false не применяются. Сервер меняет только поля с непустым значением, а 0 и false молча пропускает, и ответ при этом успешный. Исключения — description, где пустая строка стирает описание, и active, где false применяется. Поэтому этой командой нельзя выключить ADR, задать DR0, обнулить счётчики кадров, вернуть seq_chk = 0, OTAA (activation = 0) и код региона 0 (EU). Сбросить adr_fix в null и стереть координаты тоже нельзя. Такие изменения делайте в интерфейсе ONS.
  • Ключи. У устройства OTAA app_key нужен для следующей активации: если в устройстве другой AppKey, оно не сможет переподключиться. nwks_key и apps_key устройства OTAA сервер перезапишет при следующей активации. У устройства ABP ключи должны совпадать с прошитыми в устройство.
  • Код региона и класс должны соответствовать прошивке устройства. Сервер проверяет их только при создании устройства, а здесь записывает как есть.
  • Тариф. Если у устройства уже есть тариф, новый начинает действовать с 00:00 UTC следующих суток. Пока он не начал действовать, сменить тариф ещё раз нельзя — придёт ошибка 0. Если тарифа у устройства нет, новый действует сразу. Если передать код текущего тарифа, ничего не изменится.
  • active: false выводит устройство из работы так же, как delete_device_req: его больше не находят get_devices_req, update_device_req и delete_device_req, а DevEUI и DevAddr можно занять заново. Вернуть устройство этой командой нельзя.

См. также​