Sending a message using Mosquitto
Warning
Yandex IoT Core is no longer available to new users.
Current users can create resources until November 1, 2026. Afterwards, the service will go read-only and cease to operate on December 1, 2026. For more information on the timing and procedure, see Service shutdown.
You can send the following types of messages:
- Send data from a device to a registry using the
$devices/<device_ID>/eventsor$registries/<registry_ID>/eventstopics. - Send data from a device to a registry using the permanent
$devices/<device_ID>/stateor$registries/<registry_ID>/statetopics. - Send registry commands to a device using the
$devices/<device_ID>/commandsor$registries/<registry_ID>/commandstopics. - Send registry commands to a device using the permanent
$devices/<device_ID>/configor$registries/<registry_ID>/configtopics.
To receive messages, you need to subscribe to the sender. Learn how to do this in Subscribing a device or registry to receive messages using Mosquitto.
To learn how to verify that the message was successfully sent and delivered, see Testing message delivery.
Warning
Registry topics and device topics are independent of each other. If a device sends data to a device telemetry topic, you can only receive this data by subscribing to that topic. The same applies to registry topics.
Getting started
Set up the following:
- Registry.
- Registry certificate.
- Device.
- Device certificate.
- Mosquitto
, an open source MQTT message broker. This guide uses it for sending messages and subscribing to devices. Download and install it to work with commands provided in this guide.
Connecting to an MQTT server
To connect to the MQTT server, use the following settings:
- CA certificate
. - Server address:
mqtt.cloud.yandex.net. - Server port:
8883. - Protocol:
TLSv1.2.
Sending a message with data
Send a message with data using the following parameters:
-h: MQTT server address.-p: MQTT server port.--cafile: Path to the certificate from the certificate authority.--cert: Path to the public part of the certificate.--key: Path to the private part of the device certificate.-t: Device topic.-m: Message text.-q: Quality of service (QoS) level.
Note
If you encounter an error while running a command, add the --debug flag and retry the command. This flag outputs a debug log when running the command, which helps troubleshoot the issue.
-
Send data to the device topic:
mosquitto_pub -h mqtt.cloud.yandex.net \ -p 8883 \ --cafile rootCA.crt \ --cert device-cert.pem \ --key device-key.pem \ -t '$devices/<device_ID>/events' \ -m 'Test data' \ -q 1 -
Send data to the permanent device topic:
mosquitto_pub -h mqtt.cloud.yandex.net \ -p 8883 \ --cafile rootCA.crt \ --cert device-cert.pem \ --key device-key.pem \ -t '$devices/<device_ID>/state' \ -m 'Test data' \ -q 1A registry subscribed to this topic will know which device sent the data because the topic contains a unique device ID.
-
Send data to the registry topic:
``` mosquitto_pub -h mqtt.cloud.yandex.net \ -p 8883 \ --cafile rootCA.crt \ --cert device-cert.pem \ --key device-key.pem \ -t '$registries/<registry_ID>/events' \ -m 'Test data' \ -q 1 ```-
Send data to the permanent registry topic:
mosquitto_pub -h mqtt.cloud.yandex.net \ -p 8883 \ --cafile rootCA.crt \ --cert device-cert.pem \ --key device-key.pem \ -t '$registries/<registry_ID>/state' \ -m 'Test data' \ -q 1A registry subscribed to this topic will not know which device sent the data because the topic does not contain a unique device ID.
-
Sending messages with commands
A registry can send messages with commands to one, multiple, or all devices added to it. Let's look at all the options.
Send a message with a command using the following parameters:
-h: MQTT server address.-p: MQTT server port.--cafile: Path to the certificate from the certificate authority.--cert: Path to the public part of the registry.--key: Path to the private part of the registry certificate.-t: Device topic.-m: Message text.-q: Quality of service (QoS) level.
Note
If you encounter an error while running a command, add the --debug flag and retry the command. This flag outputs a debug log when running the command, which helps troubleshoot the issue.
-
Send a command to a single device:
mosquitto_pub -h mqtt.cloud.yandex.net \ -p 8883 \ --cafile rootCA.crt \ --cert registry-cert.pem \ --key registry-key.pem \ -t '$devices/<device_ID>/commands' \ -m 'Test command for first device' \ -q 1 -
Send a command to a single device using the permanent topic:
mosquitto_pub -h mqtt.cloud.yandex.net \ -p 8883 \ --cafile rootCA.crt \ --cert registry-cert.pem \ --key registry-key.pem \ -t '$devices/<device_ID>/config' \ -m 'Test command for first device via permanent topic' \ -q 1 -
Send a command to two devices:
mosquitto_pub -h mqtt.cloud.yandex.net \ -p 8883 \ --cafile cert.pem \ --cert registry-cert.pem \ --key registry-key.pem \ -t '$devices/<device_1_ID>/commands' \ -t '$devices/<device_2_ID>/commands' \ -m 'Test command for first and second device' \ -q 1 # Quality of service (QoS) level 1. -
Send a command to two devices using the permanent topic:
mosquitto_pub -h mqtt.cloud.yandex.net \ -p 8883 \ --cafile cert.pem \ --cert registry-cert.pem \ --key registry-key.pem \ -t '$devices/<device_1_ID>/config' \ -t '$devices/<device_2_ID>/config' \ -m 'Test command for first and second devices via permanent topic' \ -q 1 # Quality of service (QoS) level 1. -
Send a command to all devices added to the registry:
mosquitto_pub -h mqtt.cloud.yandex.net \ -p 8883 \ --cafile cert.pem \ --cert registry-cert.pem \ --key registry-key.pem \ -t '$registries/<registry_ID>/commands' \ -m 'Test command for all devices' \ -q 1 -
Send a command to all devices added to the registry using the permanent topic:
mosquitto_pub -h mqtt.cloud.yandex.net \ -p 8883 \ --cafile cert.pem \ --cert registry-cert.pem \ --key registry-key.pem \ -t '$registries/<registry_ID>/config' \ -m 'Test command for all devices via permanent topic' \ -q 1