Подписать устройство или реестр на получение сообщений c использованием Mosquitto

Вы можете подписать:

  • Реестр на события устройства, используя топики $devices/<ID устройства>/events или $registries/<ID реестра>/events.
  • Устройство на команды реестра, используя топики $devices/<ID устройства>/commands или $registries/<ID реестра>/commands.

О том, как обмениваться сообщениями, читайте в разделе Отправить сообщение с использованием Mosquitto.

Важная информация

Топик реестра и топик устройства не связаны между собой. Если устройство отправляет данные в топик устройства для телеметрических данных, получить их можно только подписавшись на этот топик. Аналогично для топика реестра.

Перед началом

Чтобы приступить к работе, вам понадобятся:

  1. Реестр.
  2. Сертификат для реестра.
  3. Устройство.
  4. Сертификат для устройства.
  5. Mosquitto, MQTT-брокер сообщений с открытым исходным кодом. Используется в инструкции для отправки сообщений и подписки на устройства. Необходимо скачать и установить его, чтобы работать с командами, представленными в инструкции.

Подключиться к MQTT-брокеру

Для подключения к MQTT-брокеру используйте следующие параметры:

Подписать реестр на устройство

Реестр можно подписать на одно, несколько или все устройства, добавленные в него. Рассмотрим все варианты.

Подпишите реестр, используя следующие параметры:

  • -h — адрес MQTT-брокера.
  • -p — порт MQTT-брокера.
  • --cafile — путь к сертификату удостоверяющего центра.
  • --cert — путь к публичной части сертификата реестра.
  • --key — путь к приватной части сертификата реестра.
  • -t — топики устройства.
  • -qуровень качества обслуживания (QoS).

Примечание

Если в процессе выполнения команды у вас возникла ошибка, добавьте к команде флаг --debug и попробуйте еще раз. Данный флаг выводит журнал отладки при выполнении команды, что помогает при диагностике проблемы.

  • Подпишите реестр на одно устройство:

    $ mosquitto_sub -h mqtt.cloud.yandex.net \
    -p 8883 \
    --cafile rootCA.crt \
    --cert registry-cert.pem \
    --key registry-key.pem \
    -t '$devices/<ID устройства>/events' \
    -q 1
    
  • Подпишите реестр на несколько устройств:

    $ mosquitto_sub -h mqtt.cloud.yandex.net \
    -p 8883 \
    --cafile rootCA.crt \
    --cert registry-cert.pem \
    --key registry-key.pem \
    -t '$devices/<ID первого устройства>/events' \
    -t '$devices/<ID второго устройства>/events' \
    -q 1
    
  • Подпишите реестр на все устройства, добавленные в него:

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

    Реестр будет получать данные только от тех устройств, которые отправляют сообщения в топик $registries/<ID реестра>/events.

Подписать устройство на реестр

Команды от реестра могут предназначаться конкретному устройству или всем устройствам в реестре. Для этого используются разные топики.

Подпишите устройство, используя следующие параметры:

  • -h — адрес MQTT-брокера.
  • -p — порт MQTT-брокера.
  • --cafile — путь к сертификату удостоверяющего центра.
  • --cert — путь к публичной части сертификата устройства.
  • --key — путь к приватной части сертификата устройства.
  • -t — топик устройства.
  • -qуровень качества обслуживания (QoS).

Примечание

Если в процессе выполнения команды у вас возникла ошибка, добавьте к команде флаг --debug и попробуйте еще раз. Данный флаг выводит журнал отладки при выполнении команды, что помогает при диагностике проблемы.

  • Подпишите устройство на команды для конкретного устройства:

    $ mosquitto_sub -h mqtt.cloud.yandex.net \
    -p 8883 \
    --cafile rootCA.crt \
    --cert device-cert.pem \
    --key device-key.pem \
    -t '$devices/<ID устройства>/commands' \
    -q 1
    
  • Подпишите устройство на команды для всех устройств:

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

    Команды будут получать только устройства, подписанные на топик $registries/<ID реестра>/commands.