Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
© 2022 ООО «Яндекс.Облако»
Yandex IoT Core
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Отправка сообщения
    • Подписка устройства или реестра на получение сообщений
    • Просмотр журнала подключений
    • Создание триггера для топика
    • Управление реестрами
      • Получение информации о реестре
      • Создание реестра
      • Изменение реестра
      • Удаление реестра
    • Управление устройствами
      • Управление алиасами топиков
        • Создание алиаса
        • Получение списка алиасов
        • Изменение алиаса
        • Удаление алиаса
      • Получение информации об устройстве
      • Создание устройства
      • Изменение устройства
      • Удаление устройства
    • Управление сертификатами
      • Создание сертификата
      • Управление сертификатами реестра
      • Управление сертификатами устройства
    • Управление паролями
      • Управление паролями реестра
      • Управление паролями устройства
  • Концепции
    • Авторизация
    • Взаимосвязь ресурсов сервиса
    • Параметры подключения MQTT-брокера
    • Отправка сообщений MQTT-брокеру через gRPC
    • Топик
      • Обзор
      • Топики устройства
      • Топики реестра
      • Сабтопик
      • Использование топиков
    • Резервное копирование
    • Квоты и лимиты
  • Практические руководства
    • Все руководства
    • Работа с помощью Mosquitto
      • Отправить сообщение
      • Подписать устройство или реестр на получение сообщений
    • Работа с Yandex IoT Core с устройства с Android на языке Java
    • Работа с Yandex IoT Core на языке C#
    • Работа с Yandex IoT Core на языке Java
    • Запись данных с устройства в Managed Service for PostgreSQL
  • Управление доступом
  • Правила тарификации
  • Справочник API
    • Аутентификация в API
    • gRPC (англ.)
      • Overview
      • DeviceDataService
      • DeviceService
      • RegistryDataService
      • RegistryService
      • OperationService
    • REST (англ.)
      • Overview
      • DeviceData
        • Overview
        • publish
      • Device
        • Overview
        • addCertificate
        • addPassword
        • create
        • delete
        • deleteCertificate
        • deletePassword
        • get
        • getByName
        • list
        • listCertificates
        • listOperations
        • listPasswords
        • update
      • RegistryData
        • Overview
        • publish
      • Registry
        • Overview
        • addCertificate
        • addPassword
        • create
        • delete
        • deleteCertificate
        • deletePassword
        • get
        • getByName
        • list
        • listCertificates
        • listDeviceTopicAliases
        • listOperations
        • listPasswords
        • update
  • Вопросы и ответы
  1. Концепции
  2. Топик
  3. Использование топиков

Использование топиков

Статья создана
Yandex.Cloud
  • Использование алиасов для топиков
  • Использование системных алиасов $me в $me-топиках
  • Подписка на топики с использованием символов подстановки
    • Символ #
    • Символ +
    • Совместное использование символов + и #
  • Триггеры для топиков

Вы можете подписывать устройства и реестры на топики $<devices или registries>/<ID устройства или реестра>/events и $<devices или registries>/<ID устройства или реестра>/commands.

Если у вас есть устройства, на показания датчиков которых нужно оперативно реагировать, а в вашей сети возможны перебои со связью и разрыв соединения между устройствами и MQTT-брокером, подписывайте устройства и реестры на перманентные топики $<devices или registries>/<ID устройства или реестра>/state и $<devices или registries>/<ID устройства или реестра>/config. В перманентном топике сохраняется последнее сообщение, отправленное в этот топик, и отображается при возобновлении соединения (даже если в момент подключения в топик не пишут устройства и реестры). После возобновления соединения перманентные топики работают как обычные топики, информация в них появляется когда устройство или реестр в них пишет.

В таблице описаны действия, которые устройства и реестры совершают с топиками:

Топики Устройство Реестр
$devices/<ID устройства>/events

$devices/<ID устройства>/state
Отправляет телеметрические данные. Получает телеметрические данные.
Устройство известно.
$devices/<ID устройства>/commands

$devices/<ID устройства>/config
Получает команды. Отправляет команды определенному устройству.
$registries/<ID реестра>/events

$registries/<ID реестра>/state
Отправляет телеметрические данные. Получает телеметрические данные от всех устройств в реестре.
Устройство неизвестно.
$registries/<ID реестра>/commands

$registries/<ID реестра>/config
Получает команды. Отправляет команды всем устройствам в реестре.
$monitoring/<ID устройства>/json Получает данные мониторинга другого устройства в формате JSON. Получает данные мониторинга устройства в формате JSON.

Использование алиасов для топиков

Алиас — это псевдоним топика устройства, присвоенный пользователем. Алиасы можно присваивать стандартным топикам, которые уже есть в сервисе, а также топикам с произвольными сабтопиками.

Примечание

Для топика $monitoring/<ID устройства>/json можно использовать только системный алиас $me.

Алиас задается в формате ключ-значение:

<алиас>='<топик устройства>'

Алиасы можно использовать для отправки сообщений и подписки на сообщения наравне с обычными топиками устройств. Также вы можете использовать в алиасах символы подстановки при подписке на сообщения, при этом проверяется формат исходного топика, которому был присвоен алиас.

Алиас должен однозначно определять устройство, то есть топик, которому присваивается алиас, должен содержать уникальный идентификатор устройства.

Если создать алиас my/alias/=$devices/<ID устройства>/, то можно использовать топик my/alias/events. Он будет эквивалентен $devices/<ID устройства>/events. По аналогии можно использовать и другие топики, начинающиеся с $devices/<ID устройства>/.

В рамках одного реестра алиасы не могут совпадать с префиксами других алиасов.

Если вы создали алиас my/alias/=..., в этом реестре вы не сможете создать алиасы my/=..., my/alias/2/=..., my/ali=....

Вы можете создать алиасы my/alias1/=..., my/alias2/=... или my/ali/=....

Использование системных алиасов $me в $me-топиках

Чтобы каждый раз не вводить идентификатор устройства, от имени которого открыта MQTT-сессия, вы можете использовать $me-топики на основе алиасов $me, уже созданных в сервисе.

$me-топик Эквивалентный топик
$me/device/events $devices/<ID устройства>/events
$me/device/commands $devices/<ID устройства>/commands
$me/device/state $devices/<ID устройства>/state
$me/device/config $devices/<ID устройства>/config
$me/registry/commands $registries/<ID устройства>/commands
$me/registry/config $registries/<ID устройства>/config
$me/monitoring/json $monitoring/<ID устройства>/json

При отправке сообщений и подписке на сообщения, $me-топики преобразуются в топики с <ID устройства> на уровне MQTT.
Если вы подписались на $me-топик, данные вы тоже получите в $me-топике.

Подписка на топики с использованием символов подстановки

Вы можете использовать специальные символы подстановки # и +, которые позволяют фильтровать подписки на топики.

Если в начале фильтра стоит $devices/, то в фильтр попадают топики устройств, а если $registries/, то топики реестров. В остальных случаях в фильтр попадают только алиасы.

Примечание

Подписка на алиасы перманентных топиков с использованием символов подстановки работает как подписка на обычные топики. При возобновлении подключения к MQTT-брокеру текущее состояние топика не отправляется подписанным на него реестрам или устройствам.

Если при подписке на перманентные топики с использованием символов подстановки в фильтр попадают более тысячи топиков, доставка данных по всем топикам не гарантируется.

Символ #

Означает подстановку одной или нескольких частей топика, а также пустой строки. Всегда является последним символом в фильтре.

Примеры использования символа #:

  • # — подписаться на все алиасы топиков.
  • $devices/# — подписаться на все топики всех устройств.
  • $devices/<ID устройства>/# — подписаться на все топики определенного устройства.
  • $devices/<ID устройства>/events/# — подписаться на все топики определенного устройства с телеметрическими данными.
  • $devices/<ID устройства>/state/# — подписаться на все перманентные топики с телеметрическими данными устройства с указанным уникальным идентификатором.

Символ +

Означает подстановку одной части топика между символами / либо в конце после символа /.

Например, по подписке $registries/<ID реестра>/commands/+ устройства получат команды, отправленные в топики $registries/<ID реестра>/commands/bedroom и $registries/<ID реестра>/commands/kitchen, но проигнорируют команду в топик $registries/<ID реестра>/commands/bedroom/entrance.

Примеры использования символа +:

  • $devices/<ID устройства>/+ — подписаться на все топики определенного устройства с телеметрическими данными и командами.
  • $devices/<ID устройства>/events/+ — подписаться на все топики определенного устройства с телеметрическими данными из всех помещений. Предполагается, что в примере символ + замещает помещение.
  • $devices/+/events/bedroom/temperature — подписаться на все топики всех устройств с телеметрическими данными о температуре в спальне.
  • $devices/+/events/bedroom/+ — подписаться на все топики всех устройств с телеметрическими данными в спальне. Предполагается, что в примере символы + замещают уникальный идентификатор устройства и тип датчика.

Фильтры $devices/+ и $registries/+ не работают, т.к. топик должен состоять из трех частей: $<devices или registries>/<ID>/<events или commands>.

Совместное использование символов + и #

После + можно использовать #, чтобы подставить остальную часть топика или сабтопика:

  • $devices/+/# — подписаться на все топики всех устройств. Эквивалентен фильтру $devices/#.

  • $devices/+/events/# — подписаться на все топики всех устройств с телеметрическими данными.

При фильтрации также учитываются общие правила подписки на топики, например:

  • Подписка на фильтр $devices/# с сертификатом реестра эквивалентна подписке на $devices/+/events/#.

    При этом будут получены и все сообщения, отправленные в $devices/<DeviceID>/events.

  • Подписка на фильтр $registries/# с сертификатом устройства эквивалентна подписке на $registries/<ID реестра>/commands/#.

    При этом будут получены и все сообщения, отправленные в $registries/<ID реестра>/commands.

Триггеры для топиков

Триггер — условие, при наступлении которого автоматически запускается определенная функция.

Триггер для Yandex IoT Core предназначен для управления сообщениями, которыми обмениваются устройства и реестры. Он создается для топиков: принимает из них копии сообщений и передает в функцию Cloud Functions или контейнер Serverless Containers для обработки. Триггер должен находиться в одном облаке с устройством или реестром, из топика которого он читает сообщения.

Вы можете создать триггер:

  • Для стандартного топика, реализованного сервисом, кроме топика $monitoring/<ID устройства>/json.
  • Для топика с произвольными сабтопиками и подстановочными символами.
  • Для алиаса топика.

Триггеру для Yandex IoT Core необходим сервисный аккаунт для вызова функции или контейнера.

Подробнее о триггерах читайте в документации Cloud Functions.

Была ли статья полезна?

Language / Region
© 2022 ООО «Яндекс.Облако»
В этой статье:
  • Использование алиасов для топиков
  • Использование системных алиасов $me в $me-топиках
  • Подписка на топики с использованием символов подстановки
  • Символ #
  • Символ +
  • Совместное использование символов + и #
  • Триггеры для топиков