Kommunicera med din DPS med hjälp av MQTT-protokollet

DPS gör det möjligt för enheter att kommunicera med DPS-enhetsslutpunkten med hjälp av:

DPS är inte en fullständig MQTT-koordinator och stöder inte alla beteenden som anges i MQTT v3.1.1-standarden. Den här artikeln beskriver hur enheter kan använda MQTT-beteenden som stöds för att kommunicera med DPS.

All enhetskommunikation med DPS måste skyddas med TLS/SSL. DpS stöder därför inte icke-säkra anslutningar via port 1883.

Anteckning

DPS stöder för närvarande inte enheter som använder TPM-attestation via MQTT-protokollet.

Ansluta till DPS

En enhet kan använda MQTT-protokollet för att ansluta till en DPS med något av följande alternativ.

Använda MQTT-protokollet direkt (som en enhet)

Om en enhet inte kan använda enhets-SDK:er kan den fortfarande ansluta till de offentliga enhetsslutpunkterna med hjälp av MQTT-protokollet på port 8883. I CONNECT-paketet ska enheten använda följande värden:

  • I fältet ClientId använder du registrationId.

  • I fältet Användarnamn använder du {idScope}/registrations/{registration_id}/api-version=2019-03-31 , där är {idScope} idScope för DPS.

  • I fältet Lösenord använder du en SAS-token. Formatet för SAS-token är samma som för både HTTPS- och AMQP-protokollen:

    SharedAccessSignature sr={URL-encoded-resourceURI}&sig={signature-string}&se={expiry}&skn=registration ResourceURI ska ha formatet {idScope}/registrations/{registration_id} . Principnamnet ska vara registration .

    Anteckning

    Om du använder X.509-certifikatautentisering krävs inga SAS-tokenlösenord.

    Mer information om hur du genererar SAS-token finns i avsnittet säkerhetstoken i Kontrollera åtkomst till DPS.

Följande är en lista över DPS-implementeringsspecifika beteenden:

  • DPS stöder inte funktionen i CleanSession-flaggan som anges till 0.

  • När en enhetsapp prenumererar på ett ämne med QoS 2 beviljar DPS högsta QoS-nivå 1 i SUBACK-paketet. Därefter levererar DPS meddelanden till enheten med hjälp av QoS 1.

TLS/SSL-konfiguration

Om du vill använda MQTT-protokollet direkt måste klienten ansluta via TLS 1.2. Försöker hoppa över det här steget misslyckas med anslutningsfel.

Registrera en enhet

Om du vill registrera en enhet via DPS bör en enhet prenumerera med hjälp $dps/registrations/res/# av som ett ämnesfilter. Jokertecknet på flera nivåer i ämnesfiltret används endast för att tillåta # att enheten tar emot ytterligare egenskaper i ämnesnamnet. DPS tillåter inte användning av # jokertecken ? eller för filtrering av underämnen. Eftersom DPS inte är en allmän koordinatortjänst för pub-sub-meddelanden har den endast stöd för dokumenterade ämnesnamn och ämnesfilter.

Enheten bör publicera ett registermeddelande till DPS med hjälp $dps/registrations/PUT/iotdps-register/?$rid={request_id} av som ett ämnesnamn. Nyttolasten ska innehålla objektet Enhetsregistrering i JSON-format. I ett lyckat scenario får enheten ett svar på ämnesnamnet där $dps/registrations/res/202/?$rid={request_id}&retry-after=x x är återförsöksvärdet i sekunder. Nyttolasten för svaret innehåller objektet RegistrationOperationStatus i JSON-format.

Avsökning efter status för registreringsåtgärd

Enheten måste avse tjänsten regelbundet för att få resultatet av enhetsregistreringsåtgärden. Förutsatt att enheten redan prenumererar på ämnet som anges ovan kan den publicera ett $dps/registrations/res/# get operationstatus-meddelande till $dps/registrations/GET/iotdps-get-operationstatus/?$rid={request_id}&operationId={operationId} ämnesnamnet. Åtgärds-ID:t i det här meddelandet ska vara det värde som togs emot i svarsmeddelandet RegistrationOperationStatus i föregående steg. Om det lyckas svarar tjänsten på $dps/registrations/res/200/?$rid={request_id} ämnet. Nyttolasten för svaret innehåller objektet RegistrationOperationStatus. Enheten bör fortsätta avse tjänsten om svarskoden är 202 efter en fördröjning som motsvarar återförsöket efter perioden. Enhetsregistreringen lyckas om tjänsten returnerar statuskoden 200.

Ansluta via Websocket

När du ansluter via Websocket anger du underprotocol som mqtt . Följ RFC 6455.

Nästa steg

Mer information om MQTT-protokollet finns i MQTT-dokumentationen.

Mer information om funktionerna i DPS finns i: