Subscribing a device or registry to receive messages using Mosquitto

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 a message using Mosquitto.

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

To get started, you will need:

  1. A registry.
  2. A registry certificate.
  3. A device.
  4. A device certificate.
  5. Mosquitto, an open source MQTT message broker. It's 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 broker

Connect to the MQTT broker using the following parameters:

Subscribing a registry to a device

You can subscribe a registry to one, multiple, or all devices added to it. Let's look at all the options.

Subscribe a registry to a device or devices using the following parameters:

  • -h: MQTT broker address.
  • -p: MQTT broker port.
  • --cafile: Path to the certificate from the certificate authority (CA).
  • --cert: Path to the public part of the registry certificate.
  • -- key: Path to the private part of the registry certificate.
  • -t: Device topics.
  • -q: 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.

  • Subscribe a registry to a single device:

    $ mosquitto_sub -h mqtt.cloud.yandex.net \
    -p 8883 \
    --cafile rootCA.crt \
    --cert registry-cert.pem \
    --key registry-key.pem \
    -t '$devices/<device ID>/events' \
    -q 1
    
  • Subscribe a registry to multiple devices:

    $ mosquitto_sub -h mqtt.cloud.yandex.net \
    -p 8883 \
    --cafile rootCA.crt \
    --cert registry-cert.pem \
    --key registry-key.pem \
    -t '$devices/<ID of the first device>/events' \
    -t '$devices/<ID of the second device>/events' \
    -q 1
    
  • Subscribe a registry to all devices added to it:

    $ mosquitto_sub -h mqtt.cloud.yandex.net \
    -p 8883 \
    --cafile rootCA.crt \
    --cert registry-cert.pem \
    --key registry-key.pem \
    -t '$registries/<registry ID>/events' \
    -q 1
    

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

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.

Subscribe a device to a registry using the following parameters:

  • -h: MQTT broker address.
  • -p: MQTT broker port.
  • --cafile: Path to the certificate from the certificate authority (CA).
  • --cert: Path to the public part of the device certificate.
  • --key: Path to the private part of the device certificate.
  • -t: Device topic.
  • -q: 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.

  • Subscribe a device to commands for a specific device:

    $ mosquitto_sub -h mqtt.cloud.yandex.net \
    -p 8883 \
    --cafile rootCA.crt \
    --cert device-cert.pem \
    --key device-key.pem \
    -t '$devices/<device ID>/commands' \
    -q 1
    
  • Subscribe a device to commands for all devices:

    $ mosquitto_sub -h mqtt.cloud.yandex.net \
    -p 8883 \
    --cafile rootCA.crt \
    --cert device-cert.pem \
    --key device-key.pem \
    -t '$registries/<device ID>/commands' \
    -q 1
    

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