Comunique-se com o DPS usando o protocolo MQTT

O Azure IoT Device Provisioning Service (DPS) permite que os dispositivos se comuniquem com o ponto de extremidade do dispositivo DPS usando:

O DPS não é um broker MQTT completo e não suporta todos os comportamentos especificados no padrão MQTT v3.1.1. Este artigo descreve como os dispositivos podem usar comportamentos MQTT suportados para se comunicar com o DPS.

Toda a comunicação do dispositivo com DPS deve ser protegida usando TLS/SSL. Portanto, o DPS não suporta conexões não seguras pela porta 1883.

Nota

Atualmente, o DPS não suporta dispositivos que usam o mecanismo de atestado TPM sobre o protocolo MQTT.

Conectando-se ao DPS

Um dispositivo pode usar o protocolo MQTT para se conectar a uma instância DPS usando qualquer uma das seguintes opções.

Usando o protocolo MQTT diretamente (como um dispositivo)

Se um dispositivo não puder usar os SDKs do dispositivo, ele ainda poderá se conectar aos pontos de extremidade do dispositivo público usando o protocolo MQTT na porta 8883. No pacote CONNECT, o dispositivo deve usar os seguintes valores:

  • Para o campo ClientId , use registrationId.

  • Para o campo Nome de usuário , use {idScope}/registrations/{registration_id}/api-version=2019-03-31, onde {idScope} é o escopo de ID do DPS e {registration_id} é o ID de registro do seu dispositivo.

    Nota

    Se você usar a autenticação de certificado X.509, a ID de registro será fornecida pelo nome comum da entidade (CN) do certificado de folha do dispositivo (entidade final). {registration_id} no campo Nome de usuário deve corresponder ao nome comum.

  • Para o campo Senha , use um token SAS. O formato do token SAS é o mesmo dos protocolos HTTPS e AMQP:

    SharedAccessSignature sr={URL-encoded-resourceURI}&sig={signature-string}&se={expiry}&skn=registration O resourceURI deve estar no formato {idScope}/registrations/{registration_id}. O nome da política (skn) deve ser definido como registration.

    Nota

    Se você usar a autenticação de certificado X.509, as senhas de token SAS não serão necessárias.

    Para obter mais informações sobre como gerar tokens SAS, consulte a seção de tokens de segurança de Controlar o acesso ao DPS.

A lista a seguir contém comportamentos específicos de implementação do DPS:

  • O DPS não suporta sessões persistentes. Ele trata cada sessão como não persistente, independentemente do valor do sinalizador CleanSession . Recomendamos definir CleanSession como true.

  • Quando um aplicativo de dispositivo se inscreve em um tópico com QoS 2, o DPS concede o nível máximo de QoS 1 no pacote SUBACK . Depois disso, o DPS entrega mensagens para o dispositivo usando QoS 1.

Configuração TLS/SSL

Para usar o protocolo MQTT diretamente, seu cliente deve se conectar por TLS 1.2. As tentativas de ignorar esta etapa falham com erros de conexão.

Registar um dispositivo

Para registrar um dispositivo através do DPS, um dispositivo deve se inscrever usando $dps/registrations/res/# como um Filtro de tópico. O curinga # de vários níveis no Filtro de Tópicos é usado apenas para permitir que o dispositivo receba mais propriedades no nome do tópico. O DPS não permite o uso de curingas # ou ? para filtragem de subtópicos. Como o DPS não é um agente de mensagens pub-sub de uso geral, ele suporta apenas os nomes de tópicos documentados e filtros de tópicos.

O dispositivo deve publicar uma mensagem de registro no DPS usando $dps/registrations/PUT/iotdps-register/?$rid={request_id} como um nome de tópico. A carga útil deve conter o objeto Device Registration no formato JSON. Em um cenário bem-sucedido, o dispositivo recebe uma resposta no nome do $dps/registrations/res/202/?$rid={request_id}&retry-after=x tópico, onde x é o valor de repetição em segundos.

Sondagem para o estado da operação de registo

O dispositivo deve sondar o serviço periodicamente para receber o resultado da operação de registro do dispositivo. Supondo que o dispositivo já tenha se inscrito no $dps/registrations/res/# tópico, ele pode publicar uma mensagem de status da operação get no nome do $dps/registrations/GET/iotdps-get-operationstatus/?$rid={request_id}&operationId={operationId} tópico. O ID da operação nesta mensagem deve ser o valor recebido na mensagem de resposta RegistrationOperationStatus na etapa anterior. No caso de sucesso, o serviço responde sobre o $dps/registrations/res/200/?$rid={request_id} tema. A carga útil da resposta contém o objeto RegistrationOperationStatus. O dispositivo deve continuar sondando o serviço se o código de resposta for 202 após um atraso igual ao período de repetição posterior. A operação de registro do dispositivo será bem-sucedida se o serviço retornar um código de status 200.

Conectando-se através de Websocket

Ao conectar-se por Websocket, especifique o subprotocolo como mqtt. Siga a RFC 6455.

Próximos passos

Para saber mais sobre o protocolo MQTT, consulte a documentação do MQTT.

Para procurar exemplos de código MQTT, consulte Exemplos de aplicativos MQTT.

Para explorar melhor os recursos do DPS, consulte: