Отправка сообщения
Сервис предоставляет две модели управления ресурсами:
- при использовании брокера отправка и прием сообщений может осуществляться в произвольных топиках, не начинающихся с
$
; - при использовании реестров и устройств выбор топиков ограничен.
Подробнее о различиях брокеров и реестров устройств читайте в разделе Взаимосвязь ресурсов в Yandex IoT Core.
При использовании реестров и устройств, вы можете отправлять сообщения следующих типов:
- Отправлять данные с устройства в реестр, используя топики
$devices/<идентификатор_устройства>/events
или$registries/<идентификатор_реестра>/events
. - Отправлять данные с устройства в реестр, используя перманентные топики
$devices/<идентификатор_устройства>/state
или$registries/<идентификатор_реестра>/state
. - Отправлять команды из реестра на устройство, используя топики
$devices/<идентификатор_устройства>/commands
или$registries/<идентификатор_реестра>/commands
. - Отправлять команды из реестра на устройство, используя перманентные топики
$devices/<идентификатор_устройства>/config
или$registries/<идентификатор_реестра>/config
.
Для получения сообщения необходимо быть подписанным на отправителя. Как это сделать, читайте в разделе Подписка на получение сообщений.
О том, как убедиться, что сообщение было успешно отправлено и доставлено, читайте в разделе Тестирование доставки сообщения.
Важно
Топик реестра и топик устройства не связаны между собой. Если устройство отправляет данные в топик устройства для телеметрических данных, получить их можно только подписавшись на этот топик. Аналогично для топика реестра.
Перед началом работы
Подготовьте ресурсы:
- (Опционально) Создайте сертификаты для реестра и устройства.
- Создайте реестр.
- Добавьте сертификат реестру.
- Создайте устройство.
- Добавьте сертификат устройству.
Аутентификация
Чтобы отправлять сообщения, необходимо пройти аутентификацию. Для этого используйте X.509-сертификат или логин и пароль. В данном разделе приведены примеры для обоих способов аутентификации.
Отправить сообщение с данными
Примечание
Если в процессе выполнения команды у вас возникла ошибка, добавьте к команде флаг --debug
и попробуйте еще раз. Данный флаг выводит журнал отладки при выполнении команды, что помогает при диагностике проблемы.
Отправьте данные с устройства в топик устройства
Реестр, подписанный на данный топик, будет знать, какое именно устройство отправило данные, так как в топике присутствует уникальный идентификатор устройства.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
-
Отправьте данные в топик устройства, используя авторизацию по сертификату:
yc iot mqtt publish \ --cert device-cert.pem \ --key device-key.pem \ --topic '$devices/<идентификатор_устройства>/events' \ --message 'Test data' \ --qos 1
-
Отправьте данные в перманентный топик устройства, используя авторизацию по сертификату:
yc iot mqtt publish \ --cert device-cert.pem \ --key device-key.pem \ --topic '$devices/<идентификатор_устройства>/state' \ --message 'Test data' \ --qos 1
Где:
--cert
и--key
— параметры для авторизации с помощью сертификата.--topic
— топик устройства для отправки данных.--message
— текст сообщения.--qos
— уровень качества обслуживания (QoS).
-
Отправьте данные в топик устройства, используя авторизацию по логину и паролю:
yc iot mqtt publish \ --username <идентификатор_устройства> \ --password <пароль_для_устройства> \ --topic '$devices/<идентификатор_устройства>/events' \ --message 'Test data' \ --qos 1
-
Отправьте данные в перманентный топик устройства, используя авторизацию по логину и паролю:
yc iot mqtt publish \ --username <идентификатор_устройства> \ --password <пароль_для_устройства> \ --topic '$devices/<идентификатор_устройства>/state' \ --message 'Test data' \ --qos 1
Где:
--username
и--password
— параметры для авторизации с помощью логина и пароля.--topic
— топик устройства для отправки данных.--message
— текст сообщения.--qos
— уровень качества обслуживания (QoS).
Чтобы отправить данные с устройства в топик устройства, воспользуйтесь методом REST API publish для ресурса DeviceData или вызовом gRPC API DeviceDataService/Publish.
Отправьте данные с устройства в топик реестра
Реестр, подписанный на данный топик, не будет знать, какое именно устройство отправило данные, так как в топике отсутствует уникальный идентификатор устройства.
-
Отправьте данные в топик реестра, используя авторизацию по сертификату:
yc iot mqtt publish \ --cert device-cert.pem \ --key device-key.pem \ --topic '$registries/<идентификатор_реестра>/events' \ --message 'Test data' \ --qos 1
-
Отправьте данные в перманентный топик реестра, используя авторизацию по сертификату:
yc iot mqtt publish \ --cert device-cert.pem \ --key device-key.pem \ --topic '$registries/<идентификатор_реестра>/state' \ --message 'Test data' \ --qos 1
Где:
--cert
и--key
— параметры для авторизации с помощью сертификата.--topic
— топик реестра для получения данных.--message
— текст сообщения.--qos
— уровень качества обслуживания (QoS).
-
Отправьте данные в топик реестра, используя авторизацию по логину и паролю:
yc iot mqtt publish \ --username <идентификатор_устройства> \ --password <пароль_для_устройства> \ --topic '$registries/<идентификатор_реестра>/events' \ --message 'Test data' \ --qos 1
-
Отправьте данные в перманентный топик реестра, используя авторизацию по логину и паролю:
yc iot mqtt publish \ --username <идентификатор_устройства> \ --password <пароль_для_устройства> \ --topic '$registries/<идентификатор_реестра>/state' \ --message 'Test data' \ --qos 1
Где:
--username
и--password
— параметры для авторизации с помощью логина и пароля.--topic
— топик реестра для получения данных.--message
— текст сообщения.--qos
— уровень качества обслуживания (QoS).
Чтобы отправить данные с устройства в топик реестра, воспользуйтесь методом REST API publish для ресурса DeviceData или вызовом gRPC API DeviceDataService/Publish.
Отправить сообщение с командой
Реестр может отправить сообщение с командой одному, нескольким или всем устройствам, добавленным в него. Рассмотрим все варианты.
Примечание
Если в процессе выполнения команды у вас возникла ошибка, добавьте к команде флаг --debug
и попробуйте еще раз. Данный флаг выводит журнал отладки при выполнении команды, что помогает при диагностике проблемы.
Отправьте команду одному устройству
-
Отправьте команду, используя авторизацию по сертификату:
yc iot mqtt publish \ --cert registry-cert.pem \ --key registry-key.pem \ --topic '$devices/<идентификатор_устройства>/commands' \ --message 'Test command for first device' \ --qos 1
-
Отправьте команду, используя перманентный топик и авторизацию по сертификату:
yc iot mqtt publish \ --cert registry-cert.pem \ --key registry-key.pem \ --topic '$devices/<идентификатор_устройства>/config' \ --message 'Test command for first device' \ --qos 1
Где:
--cert
и--key
— параметры для авторизации с помощью сертификата.--topic
— топик устройства для получения команд.--message
— текст сообщения.--qos
— уровень качества обслуживания (QoS).
-
Отправьте команду, используя авторизацию по логину и паролю:
yc iot mqtt publish \ --username <идентификатор_реестра> \ --password <пароль_для_реестра> \ --topic '$devices/<идентификатор_устройства>/commands' \ --message 'Test command for first device' \ --qos 1
-
Отправьте команду, используя перманентный топик и авторизацию по логину и паролю:
yc iot mqtt publish \ --username <идентификатор_реестра> \ --password <пароль_для_реестра> \ --topic '$devices/<идентификатор_устройства>/config' \ --message 'Test command for first device' \ --qos 1
Где:
--username
и--password
— параметры для авторизации с помощью логина и пароля.--topic
— топик устройства для получения команд.--message
— текст сообщения.--qos
— уровень качества обслуживания (QoS).
Чтобы отправить команду одному устройству, воспользуйтесь методом REST API publish для ресурса RegistryData или вызовом gRPC API RegistryDataService/Publish.
Отправьте команду всем устройствам, добавленным в реестр
-
Отправьте команду всем устройствам, используя авторизацию по сертификату:
yc iot mqtt publish \ --cert registry-cert.pem \ --key registry-key.pem \ --topic '$registries/<идентификатор_реестра>/commands' \ --message 'Test command for all devices' \ --qos 1
-
Отправьте команду всем устройствам, используя перманентный топик и авторизацию по сертификату:
yc iot mqtt publish \ --cert registry-cert.pem \ --key registry-key.pem \ --topic '$registries/<идентификатор_реестра>/config' \ --message 'Test command for all devices' \ --qos 1
Где:
--cert
и--key
— параметры для авторизации с помощью сертификата.--topic
— топик реестра для отправки команд.--message
— текст сообщения.--qos
— уровень качества обслуживания (QoS).
-
Отправьте команду всем устройствам, используя авторизацию по логину и паролю:
yc iot mqtt publish \ --username <идентификатор_реестра> \ --password <пароль_для_реестра> \ --topic '$registries/<идентификатор_реестра>/commands' \ --message 'Test command for all devices' \ --qos 1
-
Отправьте команду всем устройствам, используя перманентный топик и авторизацию по логину и паролю:
yc iot mqtt publish \ --username <идентификатор_реестра> \ --password <пароль_для_реестра> \ --topic '$registries/<идентификатор_реестра>/config' \ --message 'Test command for all devices' \ --qos 1
Где:
--username
и--password
— параметры для авторизации с помощью логина и пароля.--topic
— топик реестра для отправки команд.--message
— текст сообщения.--qos
— уровень качества обслуживания (QoS).
Чтобы отправить команду всем устройствам, добавленным в реестр, воспользуйтесь методом REST API publish для ресурса RegistryData или вызовом gRPC API RegistryDataService/Publish.
Отправить сообщение в брокере
При использовании брокера сообщение можно отправить в произвольный топик, используя для авторизации логин и пароль или любой сертификат, назначенный брокеру.
-
Отправьте сообщение, используя авторизацию по логину и паролю:
yc iot mqtt publish \ --username <идентификатор_брокера> \ --password <пароль_для_брокера> \ --topic /my/custom/topic \ --message 'Test broker message' --qos 1
Где:
--username
и--password
— параметры для авторизации с помощью логина и пароля.--topic
— произвольное имя топика, соответствующее спецификации MQTT и не начинающееся с символа$
--message
— текст сообщения.--qos
— уровень качества обслуживания (QoS).
-
Отправьте сообщение, используя авторизацию по сертификату:
yc iot mqtt publish \ --cert broker-cert.pem \ --key broker-key.pem \ --topic /my/custom/topic \ --message 'Test broker message' --qos 1
Где:
--cert
и--key
— параметры для авторизации с помощью сертификата.--topic
— произвольное имя топика, соответствующее спецификации MQTT и не начинающееся с символа$
--message
— текст сообщения.--qos
— уровень качества обслуживания (QoS).
Чтобы отправить сообщение в брокере, воспользуйтесь методом REST API publish для ресурса BrokerData или вызовом gRPC API BrokerDataService/Publish.