Sdílet prostřednictvím


Komunikace s DPS pomocí protokolu MQTT

Služba Azure IoT Device Provisioning Service (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í zadaná ve standardu MQTT v3.1.1. Tento článek popisuje, jak můžou zařízení používat podporované chování MQTT ke komunikaci s DPS.

Veškerá komunikace zařízení s DPS musí být zabezpečená pomocí protokolu TLS/SSL. Služba DPS proto nepodporuje nezabezpečená připojení přes port 1883.

Poznámka:

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

Připojení do DPS

Zařízení může použít protokol MQTT pro připojení k instanci DPS pomocí některé z následujících možností.

Použití protokolu MQTT přímo (jako zařízení)

Pokud zařízení nemůže používat sady SDK zařízení, může se stále připojovat ke koncovým bodům veřejného 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 id registrace.

  • Pro pole Uživatelské jméno použijte {idScope}/registrations/{registration_id}/api-version=2019-03-31, kde {idScope} je obor ID DPS a {registration_id} je ID registrace pro vaše zařízení.

    Poznámka:

    Pokud používáte ověřování certifikátu X.509, ID registrace je poskytováno běžným názvem subjektu certifikátu typu list vašeho zařízení (koncová entita). {registration_id}v poli Uživatelské jméno se musí shodovat s běžným názvem.

  • Pro pole 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 (skn) by měl být nastavený na registration.

    Poznámka:

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

    Další informace o generování tokenů SAS najdete v části Tokeny zabezpečení v části Řízení přístupu k DPS.

Následující seznam obsahuje chování specifické pro implementaci DPS:

  • Služba DPS nepodporuje trvalé relace. Považuje každou relaci za trvalou bez ohledu na hodnotu příznaku CleanSession . Doporučujeme nastavit hodnotu CleanSession na hodnotu true.

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

Konfigurace PROTOKOLU TLS/SSL

Pokud chcete použít protokol MQTT 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í prostřednictvím DPS, musí se zařízení přihlásit k odběru pomocí $dps/registrations/res/# filtru témat. Zástupný znak # s více úrovněmi ve filtru tématu slouží pouze k tomu, aby zařízení mohlo přijímat více vlastností v názvu tématu. Služba DPS neumožňuje použití zástupných # ? znaků pro filtrování dílčích témat. Vzhledem k tomu, že DPS není zprostředkovatelem zasílání zpráv pro obecné účely, podporuje pouze zdokumentované názvy témat a filtry témat.

Zařízení by mělo publikovat zprávu o registraci do DPS pomocí $dps/registrations/PUT/iotdps-register/?$rid={request_id} 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 zařízení obdrží odpověď na $dps/registrations/res/202/?$rid={request_id}&retry-after=x název tématu, kde x je hodnota opakování za sekundu.

Dotazování na stav operace registrace

Zařízení musí pravidelně dotazovat službu, aby získalo výsledek operace registrace zařízení. Za předpokladu, že se zařízení už přihlásilo k odběru $dps/registrations/res/# tématu, může publikovat stavovou zprávu operace get do $dps/registrations/GET/iotdps-get-operationstatus/?$rid={request_id}&operationId={operationId} názvu tématu. ID operace v této zprávě by mělo být hodnota přijatá ve zprávě odpovědi RegistrationOperationStatus v předchozím kroku. V úspěšném případě služba reaguje na $dps/registrations/res/200/?$rid={request_id} dané téma. Datová část odpovědi obsahuje Objekt RegistrationOperationStatus. Pokud je kód odpovědi 202 po prodlevě rovnající se intervalu opakování, zařízení by mělo službu dotazovat. 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 subprotocol jako mqtt. Postupujte podle dokumentu RFC 6455.

Další kroky

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

Pokud chcete procházet vzorový kód MQTT, projděte si ukázky aplikací MQTT.

Další informace o možnostech SLUŽBY DPS najdete v těchto tématech: