Subscribing a device or registry to receive messages

You can subscribe:

  • A registry to device events using the $devices/<device ID>/events or $registries/<registry ID>/events topics.
  • A device to registry commands using the $devices/<device ID>/commands or $registries/<registry ID>/commands topics.

To learn about messaging, see Sending messages.

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.

Before you start

Prepare the resources you need to get started:

  1. (optional) Create registry and device certificates.
  2. Create a registry.
  3. Add a certificate to the registry.
  4. Create a device.
  5. Add a certificate to the device.

Authorization

To send messages, you need to log in. To do this, use an X.509 certificate or username and password. This section provides examples for both authorization methods.

Subscribing a registry to a device

You can subscribe a registry to one, multiple, or all devices added to it.

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.

Subscribe a registry to a single device

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.

  • Subscribe a registry using a certificate:

    $ yc iot mqtt subscribe \
    --cert registry-cert.pem \
    --key registry-key.pem \
    --topic '$devices/<device ID>/events' \
    --qos 1
    

    Where:

    • --cert and --key: Parameters for authorization using a certificate.
    • --topic: Device topic for sending data.
    • --message: Message text.
    • --qos: Quality of service (QoS).
  • Subscribe a registry using a username and password:

    $ yc iot mqtt subscribe \
    --username <registry ID> \
    --password <registry password> \
    --topic '$devices/<device ID>/events' \
    --qos 1
    

    Where:

    • --username and --password: Parameters for authorization using a username and password.
    • --topic: Device topic for sending data.
    • --message: Message text.
    • --qos: Quality of service (QoS).

Subscribe a registry to all devices added to it

The registry will only receive data from devices that send messages to the $registries/<registry ID>/events topic.

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.

  • Subscribe a registry using a certificate:

    $ yc iot mqtt subscribe \
    --cert registry-cert.pem \
    --key registry-key.pem \
    --topic '$registries/<registry ID>/events' \
    --qos 1
    

    Where:

    • --cert and --key: Parameters for authorization using a certificate.
    • --topic: Registry topic for getting data.
    • --message: Message text.
    • --qos: Quality of service (QoS).
  • Subscribe a registry using a username and password:

    $ yc iot mqtt subscribe \
    --username <registry ID> \
    --password <registry password> \
    --topic '$registries/<registry ID>/events' \
    --qos 1
    

    Where:

    • --username and --password: Parameters for authorization using a username and password.
    • --topic: Registry topic for getting data.
    • --message: Message text.
    • --qos: Quality of service (QoS).

Subscribing a device to a registry

Commands from a registry can be given to a specific device or all devices in the registry. This involves using different topics.

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.

Subscribe a device to commands for a specific device

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.

  • Subscribe a device to commands for a specific device:

    • Using a certificate:

      yc iot mqtt subscribe \
      --cert device-cert.pem \
      --key device-key.pem \
      --topic '$devices/<device ID>/commands' \
      --qos 1
      

      Where:

      • --cert and --key: Parameters for authorization using a certificate.
      • --topic: Device topic for getting commands.
      • --message: Message text.
      • --qos: Quality of service (QoS).
    • Using your username and password:

      yc iot mqtt subscribe \
      --username <device ID> \
      --password <device password> \
      --topic '$devices/<device ID>/commands' \
      --qos 1
      

      Where:

      • --username and --password: Parameters for authorization using a username and password.
      • --topic: Device topic for getting commands.
      • --message: Message text.
      • --qos: Quality of service (QoS).

Subscribe a device to commands for all devices

Only devices subscribed to the $registries/<registry ID>/commands topic will receive commands.

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.

  • Subscribe a device using a certificate:

    $ yc iot mqtt subscribe \
    --cert device-cert.pem \
    --key device-key.pem \
    --topic '$registries/<registry ID>/commands' \
    --qos 1
    

    Where:

    • --cert and --key: Parameters for authorization using a certificate.
    • --topic: Registry topic for sending commands.
    • --message: Message text.
    • --qos: Quality of service (QoS).
  • Subscribe a device using a username and password:

    $ yc iot mqtt subscribe \
    --username <device ID> \
    --password <device password> \
    --topic '$registries/<registry ID>/commands' \
    --qos 1
    

    Where:

    • --username and --password: Parameters for authorization using a username and password.
    • --topic: Registry topic for sending commands.
    • --message: Message text.
    • --qos: Quality of service (QoS).