Создать устройство
Регистрирует устройство LoRaWAN на сервере. Устройство OTAA после этого само подключается к сети (join) по DevEUI и AppKey. Устройству ABP активация не нужна, но серверу нужно заранее знать его DevAddr и сессионные ключи — их передают в запросе.
Запрос и ответ: create_device_req → create_device_resp.
Доступ: только токен высокого уровня; устройство можно создать в любом приложении владельца. С токеном низкого уровня сервер ответит ошибкой 1.
application_euiне обязателен: без него устройство создаётся в приложении, к которому выполнено подключение.adr_fix— номер DR илиnull, а не bool;seq_chk— число 0 или 1.- Кодов регионов 38 (0–37), а не 24, — см. Коды регионов.
- В ответе
down_queueповторяет значение из запроса, а не записанное на сервере, и есть лишнее полеactive.
Запрос
Поля без пометки «обязательно» можно не передавать.
| Поле | Тип | Описание |
|---|---|---|
cmd | string | create_device_req |
operation_id | string | Произвольная строка; сервер вернёт её в ответе — по ней сопоставляют запрос и ответ |
devEui | string | Обязательно. DevEUI устройства, 16 hex-символов. Регистр не важен; пробелы, : и - сервер убирает. Должен быть уникален на всём сервере |
app_key | string | Обязательно. AppKey, 32 hex-символа. Для OTAA — корневой ключ устройства: по нему сервер проверяет запрос на активацию. Для ABP сервер его не использует, но поле всё равно обязательно |
tariff_code | string | Обязательно. Код тарифа из get_tariffs_req |
application_eui | string | AppEUI приложения, в котором нужно создать устройство, 16 hex-символов. По умолчанию — приложение, к которому выполнено подключение |
activation | uint8 | Способ активации: 0 — OTAA, 1 — ABP. По умолчанию 0 |
devAddr | string | DevAddr, 8 hex-символов. Для ABP передайте адрес из прошивки устройства. Для OTAA поле не нужно: без него сервер выдаст свободный адрес, а при каждой активации всё равно назначит новый |
nwks_key | string | NwkSKey, 32 hex-символа. Для ABP передайте ключ из прошивки. Без поля сервер сгенерирует случайный ключ |
apps_key | string | AppSKey, 32 hex-символа. Для ABP передайте ключ из прошивки. Без поля сервер сгенерирует случайный ключ |
region | uint8 | Код региона — частотного плана устройства, 0–37, см. Коды регионов. По умолчанию 6 (KZ865-868) |
node_class | uint8 | Класс LoRaWAN: 1 — A, 2 — B, 3 — C. По умолчанию 1. См. Классы устройств |
rx_window | uint8 | Окно приёма для downlink: 1 — RX1, а если сервер не успевает к нему, то RX2; 2 — всегда RX2. По умолчанию 1 |
adr | bool | ADR: сервер сам подбирает устройству скорость и мощность передачи. Работает, только если ADR включён и в самом устройстве. По умолчанию true |
adr_interval | uint16 | Раз в сколько кадров uplink сервер пересчитывает скорость; 0 — не пересчитывает. По умолчанию 20 |
adr_min | uint8 | Наименьший DR, ниже которого ADR не опустит скорость, 0–15. По умолчанию 0 |
adr_max | uint8 | Наибольший DR для ADR, 0–15. По умолчанию 5. См. «Что важно знать» |
adr_fix | uint8 | Фиксированный DR, 0–15: ADR держит эту скорость и наибольшую мощность. По умолчанию null — не задан |
seq_up | uint32 | Начальный счётчик кадров uplink (FCntUp). По умолчанию 0. Пригодится для устройства ABP, перенесённого с другого сервера; дальше счётчики ведёт сервер |
seq_down | uint32 | Начальный счётчик кадров downlink (FCntDown). По умолчанию 0 |
seq_chk | uint8 | Проверка счётчика кадров: 0 — Strict, 1 — Relaxed. По умолчанию 0. Сервер сейчас значение только хранит |
duty_cycle | uint8 | По умолчанию 0. Сервер сейчас значение только хранит |
down_queue | uint8 | По умолчанию 0. Сервер сейчас значение только хранит |
description | string | Описание, до 255 символов. По умолчанию пустая строка |
lat | float | Широта, WGS 84. Учитывается только вместе с lon |
lon | float | Долгота, WGS 84. Учитывается только вместе с lat |
Устройство OTAA в заданном приложении:
{
"cmd": "create_device_req",
"operation_id": "rnt",
"devEui": "7DA50BE8C74CE6DC",
"application_eui": "819EA8554FCD762A",
"app_key": "948205A2939E8C999D641DE5CB731861",
"tariff_code": "A1"
}
Устройство ABP класса C — адрес и сессионные ключи из прошивки:
{
"cmd": "create_device_req",
"operation_id": "abp1",
"devEui": "7DA50BE8C74CE6DD",
"app_key": "948205A2939E8C999D641DE5CB731861",
"tariff_code": "A1",
"activation": 1,
"devAddr": "26011F4A",
"nwks_key": "EEFBF983C00B35240C9A7C2D8D011301",
"apps_key": "6F17B97CEA2C63D1089EF4268FD68D38",
"node_class": 3,
"region": 7
}
Ответ
| Поле | Тип | Описание |
|---|---|---|
cmd | string | create_device_resp |
operation_id | string | Значение из запроса |
status | uint8 | 1 — устройство создано, 2 — ошибка |
devEui, devAddr, application_eui | string | Идентификаторы созданного устройства, hex заглавными буквами. devAddr — переданный или выданный сервером |
app_key, nwks_key, apps_key | string | Ключи устройства, в том числе сгенерированные сервером |
description, node_class, rx_window, adr, adr_interval, adr_min, adr_max, adr_fix, duty_cycle, seq_up, seq_down, seq_chk, region, activation, tariff_code | Записанные значения: из запроса или по умолчанию. Типы — как в запросе | |
down_queue | uint8 | Значение из запроса; null, если поле не передано |
active | bool | Повторяет одноимённое поле запроса, обычно null. На создание не влияет |
lat, lon | float | Координаты; null, если не заданы |
error_code, error_text | uint8, string | Только при ошибке, см. ниже |
Ответ на первый запрос из примеров:
{
"cmd": "create_device_resp",
"operation_id": "rnt",
"status": 1,
"devEui": "7DA50BE8C74CE6DC",
"devAddr": "41410509",
"application_eui": "819EA8554FCD762A",
"description": "",
"app_key": "948205A2939E8C999D641DE5CB731861",
"nwks_key": "A3C51F0E9D27B4686F02E1CB5D7390AA",
"apps_key": "1B9E04D7C26A58F3E0B4719DA2C86E5F",
"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": 0,
"seq_down": 0,
"seq_chk": 0,
"region": 6,
"activation": 0,
"down_queue": null,
"tariff_code": "A1",
"active": null,
"lon": null,
"lat": null
}
Ошибки
error_code | error_text | Что случилось |
|---|---|---|
| 1 | Unauthorized access | Запрос пришёл с токеном низкого уровня |
| 2 | Required field is not filled | Не указан devEui, app_key или tariff_code, либо application_eui передан пустым |
| 3 | Data is filled in with an error | devEui, application_eui, devAddr или ключ неверного формата; lat или lon — не число; node_class не 1–3; region не 0–37 |
| 4 | Uniq failed | На сервере уже есть устройство с таким DevEUI или DevAddr — у любого владельца |
| 5 | Application does not exists | У владельца нет приложения с таким application_eui или оно удалено |
| 6 | Tariff does not exists | Нет действующего тарифа с кодом tariff_code |
| 0 | Unexpected error | База отклонила значение — например, rx_window больше 2, отрицательный счётчик кадров, описание длиннее 255 символов, — или внутренняя ошибка сервера |
Коды регионов
Код задаёт частотный план устройства: каналы, окно RX2, допустимые скорости и размер кадра downlink. Подробнее — в разделе Частотные планы. Для US915 и AU915 указаны номера включённых каналов по спецификации LoRaWAN Regional Parameters.
| Код | Регион | Каналы uplink, МГц | RX2 |
|---|---|---|---|
| 0 | EU | 868.1, 868.3, 868.5 | 869.525 МГц, DR0 |
| 1 | KZ_OLD | 864.5–865.3, 5 каналов | 865.6 МГц, DR0 |
| 2 | RU | 868.9, 869.1 и 864.1–864.9, 7 каналов | 869.1 МГц, DR0 |
| 3 | BY | 868.1, 868.3, 868.5 | 869.525 МГц, DR0 |
| 4 | UA | 868.1, 868.3, 868.5 | 869.525 МГц, DR0 |
| 5 | KG863-865 | 863.7–864.5, 5 каналов | 869.1 МГц, DR0 |
| 6 | KZ865-868 — по умолчанию | 865.1–865.9, 5 каналов | 866.7 МГц, DR0 |
| 7 | EU863-870 | 867.1–867.9 и 868.1–868.5, 8 каналов | 869.525 МГц, DR0 |
| 8 | KZ864-868 | 864.5–865.9, 8 каналов | 866.7 МГц, DR0 |
| 9 | EU433 | 433.175–434.775, 9 каналов | 434.665 МГц, DR0 |
| 10 | AS923-1 | 923.2–924.6, 8 каналов — в текущей версии сервер не отправляет устройству или группе рассылки с этим кодом ни Join Accept, ни downlink; выбирайте код 11 или 13 | 923.2 МГц, DR2 |
| 11 | AS923-2 | 923.2–924.6, 8 каналов — в текущей версии сервера совпадает с AS923-1 | 923.2 МГц, DR2 |
| 12 | AS923-3 | 916.0–917.4, 8 каналов | 916.6 МГц, DR2 |
| 13 | AS923-4 | 923.2–924.6, 8 каналов — в текущей версии сервера совпадает с AS923-1 | 923.2 МГц, DR2 |
| 14 | KR920 | 923.2–924.6, 8 каналов — в текущей версии сервера совпадает с AS923-1 | 923.2 МГц, DR2 |
| 15 | US915-1 | каналы 0–7 и 64 | 923.3 МГц, DR8 |
| 16 | US915-2 | каналы 8–15 и 65 | 923.3 МГц, DR8 |
| 17 | US915-3 | каналы 16–23 и 66 | 923.3 МГц, DR8 |
| 18 | US915-4 | каналы 24–31 и 67 | 923.3 МГц, DR8 |
| 19 | US915-5 | каналы 32–39 и 68 | 923.3 МГц, DR8 |
| 20 | US915-6 | каналы 40–47 и 69 | 923.3 МГц, DR8 |
| 21 | US915-7 | каналы 48–55 и 70 | 923.3 МГц, DR8 |
| 22 | US915-8 | каналы 0–7, 56–63 и 71 | 923.3 МГц, DR8 |
| 23 | US915-9 | каналы 0–15, 64 и 65 | 923.3 МГц, DR8 |
| 24 | AU915-1 | каналы 0–7 и 64 | 923.3 МГц, DR8 |
| 25 | AU915-2 | каналы 8–15 и 65 | 923.3 МГц, DR8 |
| 26 | AU915-3 | каналы 16–23 и 66 | 923.3 МГц, DR8 |
| 27 | AU915-4 | каналы 24–31 и 67 | 923.3 МГц, DR8 |
| 28 | AU915-5 | каналы 32–39 и 68 | 923.3 МГц, DR8 |
| 29 | AU915-6 | каналы 40–47 и 69 | 923.3 МГц, DR8 |
| 30 | AU915-7 | каналы 48–55 и 70 | 923.3 МГц, DR8 |
| 31 | AU915-8 | каналы 56–63 и 71 | 923.3 МГц, DR8 |
| 32 | AU915-9 | каналы 0–15, 64 и 65 | 923.3 МГц, DR8 |
| 33 | UZ926 | 926.4–927.8, 8 каналов | 926.2 МГц, DR2 |
| 34 | UZ927 | 926.4–927.8, 8 каналов | 927.8 МГц, DR2 |
| 35 | KZ865-only | 865.1, 865.3, 865.5 | 866.7 МГц, DR0 |
| 36 | IN865-867 | 865.0625, 865.4025, 865.985 | 866.55 МГц, DR2 |
| 37 | IN865+KZ865 | 865.0625, 865.4025, 865.985 и 865.1–865.9, 8 каналов | 866.55 МГц, DR2 |
Что важно знать
- OTAA. При каждой активации сервер выдаёт устройству новый DevAddr и новые сессионные ключи и записывает их в карточку устройства. Поэтому
devAddr,nwks_keyиapps_keyиз ответа на создание действуют только до первой активации. - ABP. Сервер не проверяет, что для ABP переданы
devAddr,nwks_keyиapps_key: без них он сгенерирует случайные значения и не сможет разобрать uplink устройства. Передавайте все три поля из прошивки. - DevEUI уникален на всём сервере, а не только в приложении. Удалённое устройство DevEUI и DevAddr не занимает.
- Устройство включили раньше, чем зарегистрировали. Если оно уже пыталось подключиться, сервер временно блокирует его запросы на активацию. Создание устройства снимает блокировку, и активация пройдёт со следующей попытки.
- Не все поля проверяются.
node_classиregionсервер проверяет сам. Значенияrx_window,adr_*,seq_*,duty_cycleиdown_queueон не проверяет: недопустимое значение либо запишется как есть, либо база отклонит его с ошибкой 0. adr_maxсейчас не ограничивает ADR, если он меньше наибольшего DR частотного плана: сервер учитывает его, только когда он больше этого DR. Чтобы ограничить скорость, задайтеadr_fix.
См. также
get_tariffs_req— коды тарифов дляtariff_code.update_device_req— изменить настройки устройства.get_devices_req— карточка устройства.