Групповая рассылка (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. Подробнее — см. Классы устройств.
Как подготовить группу
- Создайте группу: в разделе «Multicasts» веб-интерфейса или командой
create_multicast_req. Класс выберите C. - Запишите адрес группы, NwkSKey и AppSKey в каждое устройство — вне сервера. Значения в устройствах и на сервере должны совпадать.
- Запишите устройства в состав группы для учёта командой
add_device_to_multicast_req. Убрать устройство из состава —delete_device_from_multicast_req.
Что важно знать
- Состав группы ни на что не влияет. Класс, частотный план и приложение устройства при добавлении в группу сервер не проверяет.
- Частота, DR и
ping_slot_periodтолько хранятся. Сервер записывает их, но при передаче не использует. Заготовка группового кадра в ядре сервера рассчитана на немедленную передачу на частоте и скорости окна RX2 из частотного плана, но до неё обработка не доходит: у группы нет параметров uplink. update_multicast_reqчастоту группы не меняет. Полеfreqсервер принимает, но не записывает.- Удаление мягкое. Сервер помечает группу неактивной, а её EUI и адрес освобождаются.
- Группы не входят в счётчики устройств. Ни в списке приложений, ни на панели мониторинга группы не учитываются.
- В журнал действий пользователей попадают только действия в веб-интерфейсе. Создание, изменение и удаление групп в веб-интерфейсе журнал записывает; команды групп WebSocket API в журнал не пишутся — см. Журналы.
См. также
- Группы рассылки (Multicast) — раздел «Multicasts» веб-интерфейса: поля группы, создание, изменение, удаление.
- Multicast-группы — команды групп в WebSocket API и что из них работает.
- Классы устройств — классы A, B и C в ONS.
- Отправка данных на устройство — порядок команд и статусы кадра.
- Частотные планы — частоты и скорости окон RX1 и RX2.