Sending messages

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 registry commands to a device using the $devices/<device ID>/commands or $registries/<registry ID>/commands 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.

Important

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.

Before you start

To get started, you will need:

  1. A registry.
  2. A registry certificate.
  3. A device.
  4. A device certificate.

Sending a message with data

Send a message with data using the following parameters:

  • --cert: Path to the public part of the device certificate.
  • --key: Path to the public part of the device certificate.
  • --topic: Device topic.
  • --message: Message text.
  • --qos: Quality of service (QoS).

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.

If you don't have the Yandex.Cloud command line interface yet, install it.

The folder specified in the CLI profile is used by default. You can specify a different folder using the --folder-name or --folder-id parameter.

  • Send data from a device to the device topic:

    $ yc iot mqtt publish \
    --cert device-cert.pem \
    --key device-key.pem \
    --topic '$devices/<device ID>/events' \
    --message 'Test data' \
    --qos 1
    

    Registries subscribed to this topic will know which device sent the data, because the topic contains a unique device ID.

  • Send data from the device to the registry topic:

    $ yc iot mqtt publish \
    --cert device-cert.pem \
    --key device-key.pem \
    --topic '$registries/<registry ID>/events' \
    --message 'Test data' \
    --qos 1
    

    The registry subscribed to this topic will not know which device sent the data, because the topic doesn't 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:

  • --cert: Path to the public part of the registry certificate.
  • --key: Path to the public part of the registry certificate.
  • --topic: Device topic.
  • --message: Message text.
  • --qos: Quality of service (QoS).

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.

If you don't have the Yandex.Cloud command line interface yet, install it.

The folder specified in the CLI profile is used by default. You can specify a different folder using the --folder-name or --folder-id parameter.

  • Send a command to a single device:

    $ yc iot mqtt publish \
    --cert registry-cert.pem \
    --key registry-key.pem \
    --topic '$devices/<device ID>/commands' \
    --message 'Test command for first device' \
    --qos 1
    
  • Send a command to all devices added to the registry:

    $ yc iot mqtt publish \
    --cert registry-cert.pem \
    --key registry-key.pem \
    --topic '$registries/<registry ID>/commands' \
    --message 'Test command for all devices' \
    --qos 1