Subscribing a device or registry to receive messages using Mosquitto
You can subscribe:
- Registry to device events using the
$devices/<device_ID>/events
or$registries/<registry_ID>/events
topics. - Registry to device events using the permanent
$devices/<device_ID>/state
or$registries/<registry_ID>/state
topics. - Device to registry commands using the
$devices/<device_ID>/commands
or$registries/<registry_ID>/commands
topics. - Device to registry commands using the permanent
$devices/<device_ID>/config
or$registries/<registry_ID>/config
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.
Getting started
Prepare the following:
- Registry.
- A registry certificate.
- Device.
- A device certificate.
- 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 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
.
Subscribing a registry to device topics
You can subscribe a registry to topics of 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 server address.-p
: MQTT server 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's topic:
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 a device's permanent topic:
mosquitto_sub -h mqtt.cloud.yandex.net \ -p 8883 \ --cafile rootCA.crt \ --cert registry-cert.pem \ --key registry-key.pem \ -t '$devices/<device_ID>/state' \ -q 1
-
Subscribe a registry to multiple devices' topics:
mosquitto_sub -h mqtt.cloud.yandex.net \ -p 8883 \ --cafile rootCA.crt \ --cert registry-cert.pem \ --key registry-key.pem \ -t '$devices/<first_device_ID>/events' \ -t '$devices/<second_device_ID>/events' \ -q 1
-
Subscribe a registry to the permanent topics of multiple devices:
mosquitto_sub -h mqtt.cloud.yandex.net \ -p 8883 \ --cafile rootCA.crt \ --cert registry-cert.pem \ --key registry-key.pem \ -t '$devices/<first_device_ID>/state' \ -t '$devices/<second_device_ID>/state' \ -q 1
-
Subscribe a registry to all devices' topics:
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
-
Subscribe a registry to the permanent topics of all devices:
mosquitto_sub -h mqtt.cloud.yandex.net \ -p 8883 \ --cafile rootCA.crt \ --cert registry-cert.pem \ --key registry-key.pem \ -t '$registries/<registry_ID>/state' \ -q 1
The registry will receive data only from the devices that send messages to the
$registries/<registry_ID>/events
or$registries/<registry_ID>/state
topic.
Subscribing a device to registry topics
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 server address.-p
: MQTT server 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 topics that are 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 permanent topics that are 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>/config' \ -q 1
-
Subscribe a device to topics that are 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/<registry_ID>/commands' \ -q 1
-
Subscribe a device to permanent topics that are 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/<registry_ID>/config' \ -q 1
Only the devices subscribed to the
$registries/<registry_ID>/commands
or$registries/<registry_ID>/config
topic will receive commands.