Обмен данными с DPS с помощью протокола MQTT

Служба подготовки устройств Интернета вещей Azure (DPS) позволяет устройствам взаимодействовать с конечной точкой устройства DPS, используя следующее:

DPS не является полнофункциональный брокер MQTT и не поддерживает все поведение, указанное в стандарте MQTT версии 3.1.1. В этой статье описывается, как устройства могут использовать поддерживаемые расширения функциональности MQTT для связи с DPS.

Весь обмен данными между устройствами и DPS защищен с помощью протокола TLS/SSL. Поэтому DPS не поддерживает небезопасные подключения через порт 1883.

Примечание.

Сейчас DPS не поддерживает устройства, использующие механизм аттестации доверенного платформенного модуля по протоколу MQTT.

Подключение к DPS

Устройство может использовать протокол MQTT для подключения к экземпляру DPS с помощью любого из следующих параметров.

Непосредственное использование протокола MQTT (как устройство)

Если устройство не может использовать пакеты SDK для устройств, оно может подключаться к общедоступным конечным точкам устройства по протоколу MQTT через порт 8883. В пакете CONNECT устройство должно использовать следующие значения.

  • В поле ClientId укажите значение registrationId.

  • В поле "Имя пользователя" используйте {idScope}{idScope}/registrations/{registration_id}/api-version=2019-03-31идентификатор область DPS и {registration_id} является идентификатором регистрации для устройства.

    Примечание.

    При использовании проверки подлинности сертификата X.509 идентификатор регистрации предоставляется общим именем субъекта (CN) сертификата конечного устройства (конечной сущности). {registration_id}в поле "Имя пользователя" должно совпадать с общим именем.

  • В поле Пароль укажите маркер SAS. Формат маркера SAS аналогичен описанному для протоколов HTTPS и AMQP:

    SharedAccessSignature sr={URL-encoded-resourceURI}&sig={signature-string}&se={expiry}&skn=registration Значение resourceURI должно быть в формате {idScope}/registrations/{registration_id}. Имя политики (skn) должно иметь значение registration.

    Примечание.

    При использовании аутентификации с помощью сертификата X.509 пароли маркеров SAS не требуются.

    Дополнительные сведения о способах создания маркеров SAS см. в разделе "Маркеры проверки подлинности" статьи Управление доступом к DPS.

В следующем списке содержатся действия, связанные с реализацией DPS:

  • DPS не поддерживает постоянные сеансы. Он обрабатывает каждый сеанс как непрестойчивый, независимо от значения флага CleanSession . Рекомендуется задать значение True для CleanSession .

  • Если приложение для устройства подписывается на раздел с качеством обслуживания 2, то DPS присваивает пакету SUBACK качество обслуживания не выше 1. После этого DPS отправляет сообщения на устройство, используя качество обслуживания 1.

конфигурация протокола TLS/SSL

Чтобы напрямую использовать протокол MQTT, ваш клиент должен подключиться по протоколу TLS 1.2. Попытки пропустить этот шаг будут завершаться ошибками соединения.

Регистрация устройства

Чтобы зарегистрировать устройство через DPS, устройство должно подписаться, используя $dps/registrations/res/# в качестве фильтра разделов. Для получения дополнительных свойств в имени раздела используется многоуровневый дикий карта # в фильтре разделов. DPS не позволяет использовать дикие # или ? дикие карта для фильтрации подтопий. Так как DPS не является брокером обмена сообщениями с общим назначением, он поддерживает только задокументированные имена разделов и фильтры разделов.

Устройство должно публиковать сообщение register в службу DPS, используя $dps/registrations/PUT/iotdps-register/?$rid={request_id} в качестве имени раздела. Полезные данные должны содержать объект регистрация устройства в формате JSON. В успешном сценарии устройство получает ответ на $dps/registrations/res/202/?$rid={request_id}&retry-after=x имя раздела, где x является значением повтора в секундах. Полезные данные ответа содержат объект RegistrationOperationStatus в формате JSON.

Опрос состояния операции регистрации

Устройство должно периодически опрашивать службу, чтобы получить результат операции регистрации устройства. Если устройство уже подписано на $dps/registrations/res/# раздел, оно может опубликовать сообщение о состоянии операции в $dps/registrations/GET/iotdps-get-operationstatus/?$rid={request_id}&operationId={operationId} имени раздела. Идентификатор операции в этом сообщении должен быть значением, полученным в ответном сообщении RegistrationOperationStatus в предыдущем шаге. В случае успешного выполнения служба отвечает на $dps/registrations/res/200/?$rid={request_id} эту тему. Полезные данные ответа содержат объект RegistrationOperationStatus. Устройство должно продолжать опрос службы, если код отклика равен 202 после задержки, равной периоду retry-after. Операция регистрации устройства считается успешной, если служба возвращает код состояния 200.

Подключение через WebSocket

При подключении через WebSocket укажите подпротокол как mqtt. Следуйте RFC 6455.

Следующие шаги

Дополнительные сведения о протоколе MQTT см. в документации по MQTT.

Чтобы просмотреть пример кода MQTT, см . примеры приложений MQTT.

Для дальнейшего изучения возможностей DPS см. следующие статьи: