Subscribing a device or registry to receive messages using Mosquitto
You can subscribe:
- A registry to device events using such topics as
$devices/<device_ID>/events
or$registries/<registry_ID>/events
. - A registry to device events using such permanent topics as
$devices/<device_ID>/state
or$registries/<registry_ID>/state
. - A device to registry commands using such topics as
$devices/<device_ID>/commands
or$registries/<registry_ID>/commands
. - A device to registry commands using such permanent topics as
$devices/<device_ID>/config
or$registries/<registry_ID>/config
.
To learn more 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.--cert
: Path to the public part of the registry.--key
: Path to the private part of the registry certificate.-t
: Device topics.-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.
-
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/<device_1_ID>/events' \ -t '$devices/<device_2_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/<device_1_ID>/state' \ -t '$devices/<device_2_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 only receive data from devices that send messages to
$registries/<registry ID>/events
or$registries/<registry_ID>/state
.
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.--cert
: Path to the public part of the certificate.--key
: Path to the private part of the device certificate.-t
: Device topic.-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.
-
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 following topics will receive commands:
$registries/<registry_ID>/commands
or$registries/<registry_ID>/config
.