Freigeben über


Kommunikation mit DPS über das MQTT-Protokoll

Azure IoT Device Provisioning Service (DPS) ermöglicht Geräten die Kommunikation mit dem DPS-Geräteendpunkt mithilfe von:

DPS ist kein vollständiger MQTT-Broker und unterstützt nicht alle im MQTT v3.1.1-Standard angegebenen Verhaltensweisen. In diesem Artikel wird beschrieben, wie Geräte unterstützte MQTT-Verhaltensweisen für die Kommunikation mit DPS verwenden können.

Die gesamte Gerätekommunikation mit DPS muss mithilfe von TLS/SSL gesichert werden. Daher unterstützt DPS keine unsicheren Verbindungen über Port 1883.

Hinweis

DPS unterstützt derzeit keine Geräte, die den TPM-Nachweismechanismus über das MQTT-Protokoll nutzen.

Verbinden mit DPS

Ein Gerät kann das MQTT-Protokoll zum Herstellen einer Verbindung mit einer DPS-Instanz über eine der folgenden Optionen verwenden.

Direktes Verwenden des Protokolls MQTT (als Gerät)

Wenn ein Gerät die Geräte-SDKs nicht verwenden kann, lässt es sich dennoch mithilfe des MQTT-Protokolls an Port 8883 mit den öffentlichen Geräteendpunkten verbinden. Das Gerät sollte im CONNECT-Paket die folgenden Werte verwenden:

  • Verwenden Sie im Feld ClientId den Wert registrationId.

  • Verwenden Sie {idScope}/registrations/{registration_id}/api-version=2019-03-31 für das Feld Benutzername, wobei {idScope} der ID-Bereich des DPS und {registration_id} die Registrierungs-ID für Ihr Gerät ist.

    Hinweis

    Wenn Sie die X.509-Zertifikatauthentifizierung verwenden, wird die Registrierungs-ID vom allgemeinen Antragstellernamen (Subject Common Name, CN) Ihres Geräteblattzertifikats (Endentität) bereitgestellt. {registration_id} im Feld Benutzername muss mit dem allgemeinen Namen übereinstimmen.

  • Verwenden Sie im Feld Kennwort ein SAS-Token. Das Format des SAS-Tokens ist das gleiche wie das für die Protokolle HTTPS und AMQP:

    SharedAccessSignature sr={URL-encoded-resourceURI}&sig={signature-string}&se={expiry}&skn=registration Der „resourceURI“ sollte das Format {idScope}/registrations/{registration_id}haben. Der Richtlinienname (skn) sollte auf registration festgelegt werden.

    Hinweis

    Bei Verwendung der X.509-Zertifikatauthentifizierung sind keine SAS-Tokenkennwörter erforderlich.

    Weitere Informationen zum Generieren von SAS-Token finden Sie im Abschnitt „Sicherheitstoken“ von Control access to DPS (Steuern des Zugriffs auf DPS).

Die folgende Liste enthält DPS-implementierungsspezifische Verhaltensweisen:

  • DPS unterstützt keine persistenten Sitzungen. Jede Sitzung wird unabhängig vom Wert des CleanSession-Flags als nicht persistent behandelt. Es wird empfohlen, CleanSession auf „true“ festzulegen.

  • Wenn eine Geräte-App ein Thema mit QoS 2 abonniert, gewährt DPS im Paket SUBACK maximal die QoS-Ebene 1. Danach übermittelt DPS Nachrichten mithilfe von QoS 1 an das Gerät.

TLS/SSL-Konfiguration

Damit Sie das MQTT-Protokoll direkt verwenden können, muss Ihr Client die Verbindung über TLS 1.2 herstellen. Wenn Sie versuchen, diesen Schritt zu überspringen, treten Verbindungsfehler auf.

Registrieren eines Geräts

Zum Registrieren eines Geräts über DPS sollte es abonnieren und dazu $dps/registrations/res/# als Themenfilter verwenden. Der Platzhalter mit mehreren Ebenen # im Themenfilter wird nur verwendet, um dem Gerät das Empfangen von weiteren Eigenschaften im Themennamen zu ermöglichen. DPS lässt die Verwendung der # oder ? Wildcards zum Filtern von Untertopiken nicht zu. Da DPS kein allgemeiner Pub-Sub-Messaging-Broker ist, unterstützt es nur die dokumentierten Themennamen und Themenfilter.

Das Gerät sollte eine Registrierungsmeldung an DPS veröffentlichen und dabei $dps/registrations/PUT/iotdps-register/?$rid={request_id} als Themennamen verwenden. Die Nutzlast sollte das Objekt Geräteregistrierung im JSON-Format enthalten. In einem erfolgreichen Szenario empfängt das Gerät eine Antwort auf den Namen des $dps/registrations/res/202/?$rid={request_id}&retry-after=x Themas, wobei x der Wiederholungswert in Sekunden ist.

Abrufen des Registrierungsvorgangsstatus

Das Gerät muss den Dienst in regelmäßigen Abständen abrufen, um das Ergebnis des Geräteregistrierungsvorgangsstatus zu erhalten. Vorausgesetzt, dass das Gerät bereits das Thema $dps/registrations/res/# abonniert hat, kann es eine Statusmeldung zum Abrufen des Vorgangs im $dps/registrations/GET/iotdps-get-operationstatus/?$rid={request_id}&operationId={operationId} Themennamen veröffentlichen. Die Vorgangs-ID in dieser Nachricht sollte der Wert sein, der im vorherigen Schritt in der Antwortnachricht „RegistrationOperationStatus“ empfangen wurde. Im Erfolgsfall antwortet der Dienst auf das $dps/registrations/res/200/?$rid={request_id}Thema. Die Nutzlast der Antwort enthält das RegistrationOperationStatus-Objekt. Nach einer Verzögerung gleich dem Retry-After-Zeitraum sollte das Gerät den Dienst weiterhin abrufen, wenn der Antwortcode „202“ lautet. Der Geräteregistrierungsvorgang ist erfolgreich, wenn der Dienst den Statuscode „200 “zurückgibt.

Herstellen einer Verbindung über WebSocket

Geben Sie beim Herstellen einer Verbindung über WebSocket das Unterprotokoll als mqtt an. Befolgen Sie RFC 6455.

Nächste Schritte

Weitere Informationen zum MQTT-Protokoll finden Sie in der MQTT-Dokumentation.

Informationen zum Durchsuchen des MQTT-Beispielcodes finden Sie unter MQTT-Anwendungsbeispiele.

Weitere Informationen zu den Funktionen von DPS finden Sie unter: