Yandex Cloud
Search
Contact UsGet started
  • Blog
  • Pricing
  • Documentation
  • All Services
  • System Status
    • Featured
    • Infrastructure & Network
    • Data Platform
    • Containers
    • Developer tools
    • Serverless
    • Security
    • Monitoring & Resources
    • ML & AI
    • Business tools
  • All Solutions
    • By industry
    • By use case
    • Economics and Pricing
    • Security
    • Technical Support
    • Customer Stories
    • Cloud credits to scale your IT product
    • Gateway to Russia
    • Cloud for Startups
    • Education and Science
    • Yandex Cloud Partner program
  • Blog
  • Pricing
  • Documentation
© 2025 Direct Cursus Technology L.L.C.
Tutorials
    • All tutorials
        • Sending messages
        • Subscribing a device or registry to receive messages
      • Working with Yandex IoT Core from an Android device in Java
      • Working with Yandex IoT Core in C#
      • Working with Yandex IoT Core in Java
      • Status monitoring of geographically distributed devices
      • Sensor reading monitoring and event notifications
      • Testing message delivery
      • Emulating multiple IoT devices
      • Writing data from a device into a database

In this article:

  • Getting started
  • Connecting to an MQTT server
  • Sending a message with data
  • Sending messages with commands
  1. Application solutions
  2. Internet of Things (IoT)
  3. Working with Mosquitto
  4. Sending messages

Sending a message using Mosquitto

Written by
Yandex Cloud
Updated at March 3, 2025
  • Getting started
  • Connecting to an MQTT server
  • Sending a message with data
  • Sending messages with commands

You can send the following types of messages:

  • Send data from a device to a registry using the $devices/<device_ID>/events or $registries/<registry_ID>/events topics.
  • Send data from a device to a registry using the permanent $devices/<device_ID>/state or $registries/<registry_ID>/state topics.
  • Send registry commands to a device using the $devices/<device_ID>/commands or $registries/<registry_ID>/commands topics.
  • Send registry commands to a device using the permanent $devices/<device_ID>/config or $registries/<registry_ID>/config topics.

To receive messages, you need to subscribe to the sender. For information about how to do this, see Subscribing a device or registry to receive messages using Mosquitto.

On how to make sure a message has been successfully sent and delivered, see Testing message delivery.

Warning

Registry and device topics are not interconnected. If a device sends data to the device topic for telemetry data, you can only receive it by subscribing to this topic. The same is true for registry topics.

Getting startedGetting started

Prepare the following:

  1. Registry.
  2. A registry certificate.
  3. Device.
  4. A device certificate.
  5. Mosquitto, an open source MQTT message broker. It is used in instructions for sending messages and subscribing to devices. Download and install it to work with commands given in instructions.

Connecting to an MQTT serverConnecting to an MQTT server

To connect to the MQTT server, use the following parameters:

  • A certificate from the certificate authority.
  • Server address: mqtt.cloud.yandex.net.
  • Server port: 8883.
  • Protocol: TLSv1.2.

Sending a message with dataSending 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 the command, add the --debug flag to the command and try again. This flag outputs the debug log when running the command, which helps you diagnose the problem.

Mosquitto
  • 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 1
    

    A 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 1
      

      A 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 commandsSending 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 the command, add the --debug flag to the command and try again. This flag outputs the debug log when running the command, which helps you diagnose the problem.

Mosquitto
  • 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
    

Was the article helpful?

Previous
Creating a cluster of 1C:Enterprise Linux servers with a Managed Service for PostgreSQL cluster
Next
Subscribing a device or registry to receive messages
© 2025 Direct Cursus Technology L.L.C.