Skip to main content

Групповая рассылка (Multicast)

Multicast в LoRaWAN — это один кадр downlink, отправленный на общий адрес группы. Его принимают все устройства, в которые записаны адрес и сессионные ключи группы, поэтому команда, нужная всем сразу, уходит в эфир одной передачей. В ONS группы создают, меняют и удаляют в веб-интерфейсе и через WebSocket API.

Внимание

В текущей версии ONS группы только хранятся на сервере. Кадр группе в эфир не уходит: ни из веб-интерфейса, ни через WebSocket API, интеграции или MCP-сервер. Команду для нескольких устройств отправляйте каждому устройству отдельно — см. Что делать сейчас.

Из чего состоит группа​

На сервере группа — запись в той же таблице, что и устройства, с пометкой multicast-группы. Поэтому параметры группы хранятся в полях устройства:

ПараметрЧто значит в LoRaWANКак хранится в ONS
EUI группыИдентификатор группы, 16 hex-символов. По нему группу находят команды APIКак DevEUI устройства
Адрес группы (DevAddr)Адрес, с которым уходят кадры группы, 8 hex-символовКак DevAddr устройства
NwkSKeyСетевой сессионный ключ группы, 32 hex-символа: им подписывается кадрПоле nwks_key
AppSKeyСессионный ключ приложения группы, 32 hex-символа: им шифруются данные кадраПоле apps_key
КлассКогда устройства группы слушают эфирКак класс устройства: 1 — A, 2 — B, 3 — C. По умолчанию в WebSocket API и в веб-интерфейсе — C
РегионЧастотный план группыПоле region. По умолчанию в WebSocket API — 0 (EU), в веб-интерфейсе — 6 (KZ865-868)
ЧастотаЧастота, на которой уходит кадр группыОтдельное поле. Сервер его только хранит
DRСкорость передачи кадра группыКак фиксированная скорость устройства. По умолчанию DR0. Сервер её только хранит
ping_slot_periodПараметр окон приёма по расписанию (класс B)В поле интервала запроса состояния устройства (dev_status_req_interval). По умолчанию в WebSocket API — 128. Сервер его только хранит
  • AppKey у группы нет: у неё только адрес и два сессионных ключа.
  • EUI и адрес группы уникальны среди всех активных записей — и групп, и устройств. EUI и адрес удалённой группы снова свободны.
  • Класс B ONS не поддерживает: для устройства или группы класса B сервер кадр не строит. Выбирайте класс C — см. Классы устройств.

Что сервер делает и чего не делает​

ДействиеВ текущей версии
Создать, изменить, удалить группуРаботает — в веб-интерфейсе и командами WebSocket API
Записать устройство в состав группы и убрать из составаРаботает — только командами WebSocket API. Состав хранится в отдельной таблице и нужен только для учёта: при передаче его никто не читает
Передать устройствам адрес и ключи группыНе делает. Ни MAC-команды, ни команды приложения для этого нет: сервер только пишет параметры группы в базу
Отправить кадр группеНе делает, см. ниже

Адрес группы, NwkSKey и AppSKey нужно записать в каждое устройство отдельно — см. Как устройство узнаёт о группе.

Все команды групп в WebSocket API требуют токен высокого уровня.

Способы отправить данные группе​

СпособВ текущей версии
Команда WebSocket API multicast_data_reqСервер проверяет формат запроса, но кадр в очередь не ставит и на правильный запрос не отвечает
Команды get_multicast_data_req, multicast_data_ack_req, multicast_data_purge_reqВ сервере их нет
Веб-интерфейсФункции нет. На странице группы — форма параметров и таблица «Данные» только для чтения. Встроенные инструменты блока «WebSocket приложения» групп не используют: «Lighting приложение v1», «Lighting приложение v2» и «Приложение для парсинга данных» отправляют downlink_data_req каждому устройству отдельно
Интеграция MQTT и другие интеграции, MCP-серверКоманды для группы нет
REST API веб-интерфейса (/api/v1/multicast/)Отправки данных нет: список, чтение, создание, изменение и удаление групп и служебные действия, унаследованные от маршрута устройств, — например, подсчёт групп и выдача случайного адреса для новой группы. Ни одно из них кадр в очередь не ставит
downlink_data_req с EUI группы в devEuiСервер примет команду и вернёт status 1 и dataId, но кадр в эфир не уйдёт и останется в очереди. Кадр downlink сервер строит только для адреса, от которого уже принимал uplink, а группа uplink не передаёт. Это выведено по коду сервера, в эфире не проверялось

Что делать сейчас​

Отправляйте кадр каждому устройству группы отдельно:

  • командой WebSocket API downlink_data_req — по запросу на каждое устройство;
  • или через интеграцию MQTT — командой tx для каждого устройства;
  • или в веб-интерфейсе — инструментом «Приложение для парсинга данных» из блока «WebSocket приложения» страницы приложения: в форме «Отправить данные» перечислите DevEUI в поле «EUI ноды» по одному в строке — инструмент отправит downlink_data_req каждому устройству отдельно.

Устройству класса C кадр уходит сразу после постановки в очередь, не дожидаясь uplink, если устройство уже выходило на связь после подключения к сети. Устройству класса A — после его следующего uplink. Подробнее — см. Классы устройств.

Как подготовить группу​

  1. Создайте группу: в разделе «Multicasts» веб-интерфейса или командой create_multicast_req. Класс выберите C.
  2. Запишите адрес группы, NwkSKey и AppSKey в каждое устройство — вне сервера. Значения в устройствах и на сервере должны совпадать.
  3. Запишите устройства в состав группы для учёта командой add_device_to_multicast_req. Убрать устройство из состава — delete_device_from_multicast_req.

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

  • Состав группы ни на что не влияет. Класс, частотный план и приложение устройства при добавлении в группу сервер не проверяет.
  • Частота, DR и ping_slot_period только хранятся. Сервер записывает их, но при передаче не использует. Заготовка группового кадра в ядре сервера рассчитана на немедленную передачу на частоте и скорости окна RX2 из частотного плана, но до неё обработка не доходит: у группы нет параметров uplink.
  • update_multicast_req частоту группы не меняет. Поле freq сервер принимает, но не записывает.
  • Удаление мягкое. Сервер помечает группу неактивной, а её EUI и адрес освобождаются.
  • Группы не входят в счётчики устройств. Ни в списке приложений, ни на панели мониторинга группы не учитываются.
  • В журнал действий пользователей попадают только действия в веб-интерфейсе. Создание, изменение и удаление групп в веб-интерфейсе журнал записывает; команды групп WebSocket API в журнал не пишутся — см. Журналы.

См. также​