Komunikace se službou DPS pomocí protokolu MQTT

DPS umožňuje zařízením komunikovat s koncovým bodem zařízení DPS pomocí:

DPS není plnohodnotný zprostředkovatel MQTT a nepodporuje všechna chování specifikovaná ve standardu MQTT v3.1.1. Tento článek popisuje, jak mohou zařízení používat podporovaná chování MQTT ke komunikaci se službou DPS.

Veškerá komunikace zařízení se službou DPS musí být zabezpečená protokolem TLS/SSL. Proto DPS nepodporuje nezabezpečená připojení přes port 1883.

Poznámka

DPS v současné době nepodporuje zařízení používající mechanismus ověření tpm přes protokol MQTT.

Připojení ke službě DPS

Zařízení se může pomocí protokolu MQTT připojit k DPS pomocí kterékoli z následujících možností.

Přímé použití protokolu MQTT (jako zařízení)

Pokud zařízení nemůže používat sdk zařízení, může se pořád připojit ke koncovým bodům veřejných zařízení pomocí protokolu MQTT na portu 8883. V paketu CONNECT by zařízení mělo používat následující hodnoty:

  • Pro pole ClientId použijte registrationId.

  • V poli Uživatelské jméno použijte {idScope}/registrations/{registration_id}/api-version=2019-03-31 , kde je {idScope} idScope služby DPS.

  • V poli Heslo použijte token SAS. Formát tokenu SAS je stejný jako pro protokoly HTTPS i AMQP:

    SharedAccessSignature sr={URL-encoded-resourceURI}&sig={signature-string}&se={expiry}&skn=registration Identifikátor resourceURI by měl být ve formátu {idScope}/registrations/{registration_id} . Název zásady by měl být registration .

    Poznámka

    Pokud používáte ověřování pomocí certifikátu X.509, hesla tokenů SAS se nepožaduje.

    Další informace o tom, jak generovat tokeny SAS, najdete v části Tokeny zabezpečení tématu Řízení přístupu k DPS.

Následuje seznam chování specifických pro implementaci DPS:

  • DPS nepodporuje funkci příznaku CleanSession nastavenou na hodnotu 0.

  • Když se aplikace zařízení přihlásí k odběru tématu pomocí technologie QoS 2, služba DPS v paketu SUBACK udělí maximální úroveň QoS 1. Potom dps doručí zprávy do zařízení pomocí QoS 1.

Konfigurace TLS/SSL

Pokud chcete protokol MQTT používat přímo, musí se váš klient připojit přes protokol TLS 1.2. Pokusy o přeskočení tohoto kroku selžou s chybami připojení.

Registrace zařízení

Pokud chcete zaregistrovat zařízení přes DPS, mělo by se přihlásit k odběru pomocí $dps/registrations/res/# jako filtr témat. Zástupný znak na více úrovních ve filtru témat slouží pouze k tomu, aby zařízení obdrželo další # vlastnosti v názvu tématu. DPS neumožňuje použití zástupných znaků nebo # ? pro filtrování dílčích témat. Vzhledem k tomu, že DPS není zprostředkovatelem zasílání zpráv pub-sub pro obecné účely, podporuje pouze zdokumentované názvy témat a filtry témat.

Zařízení by mělo publikovat registrační zprávu do DPS pomocí $dps/registrations/PUT/iotdps-register/?$rid={request_id} jako názvu tématu. Datová část by měla obsahovat objekt Registrace zařízení ve formátu JSON. V úspěšném scénáři obdrží zařízení odpověď na název tématu, kde x je hodnota $dps/registrations/res/202/?$rid={request_id}&retry-after=x opakování v sekundách. Datová část odpovědi bude obsahovat objekt RegistrationOperationStatus ve formátu JSON.

Dotazování na stav operace registrace

Zařízení se musí pravidelně dotazovat služby na příjem výsledku operace registrace zařízení. Za předpokladu, že se zařízení už přihlásilo k odběru tématu, jak je uvedeno výše, může publikovat do názvu tématu zprávu $dps/registrations/res/# get $dps/registrations/GET/iotdps-get-operationstatus/?$rid={request_id}&operationId={operationId} operationstatus. ID operace v této zprávě by měla být hodnota přijatá ve zprávě odpovědi RegistrationOperationStatus v předchozím kroku. V případě úspěchu bude služba na toto téma $dps/registrations/res/200/?$rid={request_id} reagovat. Datová část odpovědi bude obsahovat objekt RegistrationOperationStatus. Zařízení by mělo službu dotazovat, pokud je kód odpovědi 202 po prodlevě, která odpovídá době opakování po. Operace registrace zařízení je úspěšná, pokud služba vrátí stavový kód 200.

Připojení přes WebSocket

Při připojování přes Websocket zadejte podprotokol jako mqtt . Postupujte podle DOKUMENTU RFC 6455.

Další kroky

Další informace o protokolu MQTT najdete v dokumentaci k MQTT.

Další informace o možnostech služby DPS najdete v těchto tématu: