Топик

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

Описание топиков

В сервисе реализованы два типа топиков: топики устройства и топики реестра. Оба этих типа топиков поддерживают использование сабтопиков.

Топики устройства

Топики устройства, доступные в сервисе:

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

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

  • $devices/<ID устройства>/commands — топик для получения команд.

    Реестр может писать в этот топик, а устройство — читать из него. В данный топик реестр отправляет команды, предназначенные конкретному устройству.

Топики реестра

Топики реестра, доступные в сервисе:

  • $registries/<ID реестра>/events — топик для получения телеметрических данных.

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

  • $registries/<ID реестра>/commands — топик для отправки команд.

    Реестр может писать в этот топик, а устройство — читать из него. В данный топик реестр отправляет команды, предназначенные всем устройствам в реестре.

Сабтопик

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

Сабтопиком считается все, что указано после топика устройства или реестра и отделено символом /:

<топик устройства или реестра>/<имя сабтопика>

Примеры сабтопиков:

  • $devices/<ID устройства>/events/bedroom/temperature — это сабтопик для получения данных о температуре в спальне.
  • $registry/<ID реестра>/commands/bedroom — это сабтопик для отправки команд всем устройствам в спальне.

Для сабтопиков действуют те же принципы работы и ограничения, что и для топиков.

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

Важная информация

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Символ # означает подстановку неограниченного количества топиков: стандартных или дополненных произвольными сабтопиками.

    Данный символ всегда является последним символом в фильтре.

  • Символ + означает подстановку одной части сабтопика, указанной между символами /.

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

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

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

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

Символ #

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

Символ +

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

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

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

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

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

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

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

Триггер может быть создан:

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

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