Komunikace s centrem IoT pomocí protokolu MQTT

IoT Hub umožňuje zařízením komunikovat s koncovými IoT Hub zařízení pomocí:

  • MQTT v3.1.1 na portu 8883
  • MQTT v3.1.1 přes WebSocket na portu 443.

IoT Hub není plnohodnotný zprostředkovatel protokolu MQTT a nepodporuje všechna chování uvedená ve standardu protokolu MQTT v3.1.1. Tento článek popisuje, jak mohou zařízení používat podporovaná chování MQTT ke komunikaci s IoT Hub.

Poznámka

Některé funkce uvedené v tomto článku, jako je zasílání zpráv z cloudu do zařízení, dvojčata zařízení a správa zařízení, jsou k dispozici ve službě IoT Hub pouze na úrovni Standard. Další informace o úrovních Basic a Standard služby IoT Hub najdete v návodu k výběru správné úrovně služby IoT Hub.

Veškerá komunikace zařízení s IoT Hub musí být zabezpečená pomocí TLS/SSL. Proto IoT Hub nepodporuje nezabezpečená připojení přes port 1883.

Připojení k IoT Hub

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

Port MQTT (8883) je v mnoha podnikových a vzdělávacích síťových prostředích blokovaný. Pokud ve své bráně firewall nemůžete otevřít port 8883, doporučujeme použít MQTT přes webové sokety. MQTT přes webové sokety komunikuje přes port 443, který je téměř vždy otevřený v síťových prostředích. Informace o tom, jak při použití sdk Azure IoT určit protokoly MQTT a MQTT přes webové sokety, najdete v tématu Použití sdk pro zařízení.

Použití sdk pro zařízení

Pro Javu, Node.js, C, C# a Python jsou k dispozici verze SDK pro zařízení, které podporují protokol MQTT. K navázání připojení k centru IoT IoT Hub standardní připojovací řetězec pro zařízení. Pokud chcete použít protokol MQTT, musí být parametr protokolu klienta nastavený na MQTT. V parametru protokolu klienta můžete také zadat MQTT přes webové sokety. Ve výchozím nastavení se sady SDK zařízení připojují k IoT Hub s příznakem CleanSession nastaveným na 0 a používají QoS 1 pro výměnu zpráv se službou IoT Hub. I když je možné nakonfigurovat QoS 0 pro rychlejší výměnu zpráv, měli byste si uvědomit, že doručení není zaručeno ani potvrzeno. Z tohoto důvodu se QoS 0 často označuje jako "fire and forget".

Když je zařízení připojené k centru IoT, poskytují tyto sdk metody, které zařízení umožňují vyměňovat si zprávy s centrem IoT.

Následující tabulka obsahuje odkazy na ukázky kódu pro každý podporovaný jazyk a určuje parametr, který se má použít k navázání připojení k IoT Hub pomocí protokolu MQTT nebo MQTT přes webové sokety.

Jazyk Parametr protokolu MQTT Parametr protokolu MQTT přes webové sokety
Node.js azure-iot-device-mqtt. Mqtt azure-iot-device-mqtt. MqttWs
Java IotHubClientProtocol. MQTT IotHubClientProtocol.MQTT_WS
C MQTT_Protocol MQTT_WebSocket_Protocol
C# TransportType. Mqtt TransportType.Mqtt se vrátí do MQTT přes webové sokety, pokud selže MQTT. Pokud chcete zadat pouze MQTT přes webové sokety, použijte TransportType.Mqtt_WebSocket_Only
Python Ve výchozím nastavení podporuje MQTT. Přidání websockets=True volání pro vytvoření klienta

Následující fragment ukazuje, jak zadat protokol MQTT přes webové sokety při použití sady Azure IoT Node.js SDK:

var Client = require('azure-iot-device').Client;
var Protocol = require('azure-iot-device-mqtt').MqttWs;
var client = Client.fromConnectionString(deviceConnectionString, Protocol);

Následující fragment ukazuje, jak zadat MQTT přes protokol Web Sockets při použití sady Azure IoT Python SDK:

from azure.iot.device.aio import IoTHubDeviceClient
device_client = IoTHubDeviceClient.create_from_connection_string(deviceConnectionString, websockets=True)

Výchozí časový limit udržovat

Aby se zajistilo, že připojení klienta nebo IoT Hub zůstane v provozu, služba i klient pravidelně vzájemně odesílat příkaz ping pro udržování připojení. Klient, který používá sadu IoT SDK, odešle hodnotu keep-alive v intervalu definovaném v následující tabulce:

Jazyk Výchozí interval udržování Konfigurovatelné
Node.js 180 sekund No
Java 230 sekund No
C 240 sekund Ano
C# 300 sekund Ano
Python 60 sekund No

Podle specifikace MQTTIoT Hub interval příkazu ping pro udržování připojení klienta 1,5násobek hodnoty pro udržování připojení klienta. Maximální časový IoT Hub na straně serveru ale omezuje na 29,45 minut (1767 sekund), protože všechny služby Azure jsou vázané na časový limit nečinnosti TCP nástroje pro vyrovnávání zatížení Azure, což je 29,45 minuty.

Například zařízení, které používá sadu Java SDK, odešle příkaz ping pro udržový příkaz ping a pak ztratí připojení k síti. Po 230 sekundách zařízení příkaz ping pro udržový režim zmešká, protože je offline. Pokud IoT Hub připojení okamžitě nezavře , počká další sekundy, než zařízení odpojí s chybou (230 * 1.5) - 230 = 115 404104 DeviceConnectionClosedRem y.

Maximální hodnota pro udržovatelnou hodnotu klienta, kterou můžete nastavit, je 1767 / 1.5 = 1177 sekundy. Jakýkoli provoz obnoví udržovací nastavení. Úspěšná aktualizace tokenu SAS například resetuje udržovací token.

Migrace aplikace zařízení z AMQP do MQTT

Pokud používáte sdk pro zařízení,přepnutí z používání AMQP na MQTT vyžaduje změnu parametru protokolu v inicializaci klienta, jak je uvedeno výše.

Nezapomeňte přitom zkontrolovat následující položky:

  • AMQP vrací chyby pro mnoho podmínek, zatímco MQTT ukončí připojení. V důsledku toho může logika zpracování výjimek vyžadovat určité změny.

  • MQTT nepodporuje operace zamítnutí při přijímání zpráv z cloudu do zařízení. Pokud vaše back-endová aplikace potřebuje obdržet odpověď z aplikace zařízení, zvažte použití přímých metod.

  • Sada Python SDK nepodporuje AMQP.

Příklad v jazyce C s využitím MQTT bez sady Azure IoT SDK

V úložišti ukázek IoT MQTTnajdete několik ukázkových projektů C/C++, které ukazují, jak odesílat telemetrické zprávy a přijímat události pomocí centra IoT bez použití sady Azure IoT C SDK.

Tyto ukázky používají knihovnu Eclipse Mosquitto k odesílání zpráv do Zprostředkovatele MQTT implementované v centru IoT.

Informace o tom, jak přizpůsobit ukázky pro použití konvencí azure IoT Plug and Play, najdete v tématu Kurz – Použití MQTTk vývoji klienta IoT Plug and Play zařízení.

Toto úložiště obsahuje:

Ve Windows:

  • TelemetryMQTTWin32: Obsahuje kód pro odeslání zprávy telemetrie do služby Azure IoT Hub, která je sestavená a spuštěná na Windows počítači.

  • SubscribeMQTTWin32: Obsahuje kód pro přihlášení k odběru událostí daného centra IoT na Windows počítači.

  • DeviceTwinMQTTWin32: Obsahuje kód pro dotazování a přihlášení k odběru událostí dvojčete zařízení v centru Azure IoT na Windows počítači.

  • PnPMQTTWin32: Obsahuje kód pro odesílání telemetrických zpráv s funkcemi zařízení IoT Plug and Play do služby Azure IoT Hub, kterou sestavíte a spustíte na Windows počítači. Další informace najdete v IoT Plug and Play

V Linuxu:

  • MQTTLinux: Obsahuje kód a skript sestavení pro spuštění v Linuxu (zatím jsme otestovali WSL, Ubuntu a Rasp ubuntu).

  • LinuxConsoleVS2019: obsahuje stejný kód, ale v projektu VS2019, který cílí na WSL (Windows dílčí systém Linux). Tento projekt umožňuje ladit kód spuštěný v Linuxu krok za krokem z Visual Studio.

Pro mosquitto_pub:

Tato složka obsahuje dva vzorové příkazy používané mosquitto_pub nástrojem, který poskytuje Mosquitto.org.

  • Mosquitto_sendmessage: Odeslání jednoduché textové zprávy do služby Azure IoT Hub, která se chová jako zařízení.

  • Mosquitto_subscribe: Zobrazení událostí, ke kterým dochází v Centru Azure IoT.

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:

  • V poli ClientId použijte deviceId.

  • V poli Uživatelské jméno použijte {iothubhostname}/{device_id}/?api-version=2018-06-30 , kde je úplný název {iothubhostname} CName centra IoT.

    Pokud je například název vašeho centra IoT contoso.azure-devices.net a název vašeho zařízení je MyDevice01, mělo by úplné pole Uživatelské jméno obsahovat:

    contoso.azure-devices.net/MyDevice01/?api-version=2018-06-30

    Důrazně doporučujeme do pole zahrnout api-version. V opačném případě by mohlo dojít k neočekávanému chování.

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

    SharedAccessSignature sig={signature-string}&se={expiry}&sr={URL-encoded-resourceURI}

    Poznámka

    Pokud používáte ověřování pomocí certifikátu X.509, hesla tokenů SAS se nepožaduje. Další informace najdete v tématu Nastavení zabezpečení X.509 ve vašem Azure IoT Hub a postupujte podle pokynů ke kódu v části Konfigurace TLS/SSL.

    Další informace o tom, jak generovat tokeny SAS, najdete v části o zařízení v tématu Použití IoT Hub tokenů zabezpečení.

    Při testování můžete také použít více platforem Azure IoT Tools pro Visual Studio Code nebo příkaz rozšíření cli az iot hub generate-sas-token k rychlému vygenerování tokenu SAS, který můžete zkopírovat a vložit do vlastního kódu.

Pro Azure IoT Tools

  1. Rozbalte kartu ZAŘÍZENÍ AZURE IOT HUB v levém dolním rohu Visual Studio Code.

  2. Klikněte pravým tlačítkem na zařízení a jako Zařízení vyberte Vygenerovat token SAS.

  3. Nastavte čas vypršení platnosti a stiskněte Enter.

  4. Token SAS se vytvoří a zkopíruje do schránky.

    Vygenerovaný token SAS má následující strukturu:

    HostName={your hub name}.azure-devices.net;DeviceId=javadevice;SharedAccessSignature=SharedAccessSignature sr={your hub name}.azure-devices.net%2Fdevices%2FMyDevice01%2Fapi-version%3D2016-11-14&sig=vSgHBMUG.....Ntg%3d&se=1456481802

    Část tohoto tokenu, která se použije jako pole Heslo pro připojení pomocí MQTT:

    SharedAccessSignature sr={your hub name}.azure-devices.net%2Fdevices%2FMyDevice01%2Fapi-version%3D2016-11-14&sig=vSgHBMUG.....Ntg%3d&se=1456481802

V případě připojení a odpojení paketů MQTT IoT Hub událost v kanálu monitorování operací. Tato událost obsahuje další informace, které vám můžou pomoct při řešení potíží s připojením.

Aplikace zařízení může v paketu CONNECT zadat zprávu Will. Aplikace zařízení by měla použít nebo jako název tématu Will k definování zpráv Will, které se budou předávat jako devices/{device_id}/messages/events/ devices/{device_id}/messages/events/{property_bag} telemetrická zpráva. V takovém případě, pokud je síťové připojení uzavřeno, ale paket DISCONNECT nebyl dříve přijat ze zařízení, odešle IoT Hub zprávu Will dodané v paketu CONNECT do kanálu telemetrie. Kanál telemetrie může být buď výchozím koncovým bodem Událostí, nebo vlastním koncovým bodem definovaným IoT Hub směrováním. Zpráva má vlastnost iothub-MessageType s přiřazenou hodnotou Will.

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

Připojení k IoT Hub přes MQTT pomocí identity modulu se podobá zařízení (popsanému v části o přímém použití protokolu MQTT jako zařízení),ale musíte použít následující:

  • Nastavte ID klienta na {device_id}/{module_id} .

  • Pokud se k ověřování používá uživatelské jméno a heslo, nastavte uživatelské jméno na a jako heslo použijte token SAS přidružený <hubname>.azure-devices.net/{device_id}/{module_id}/?api-version=2018-06-30 k identitě modulu.

  • Používá devices/{device_id}/modules/{module_id}/messages/events/ se jako téma pro publikování telemetrie.

  • Použijte devices/{device_id}/modules/{module_id}/messages/events/ jako téma WILL.

  • Témata o dvojčatech GET a PATCH jsou pro moduly a zařízení stejná.

  • Téma stavu dvojčete je pro moduly a zařízení stejné.

Konfigurace TLS/SSL

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

Pokud chcete vytvořit připojení TLS, možná budete muset stáhnout kořenový certifikát DigiCert Baltimore a odkazovat na ho. Tento certifikát azure používá k zabezpečení připojení. Tento certifikát najdete v úložišti Azure-iot-sdk-c. Další informace o těchto certifikátech najdete na webu společnosti Digicert.

Příklad implementace tohoto řešení pomocí pythonové verze knihovny Paho MQTT od Eclipse Foundation může vypadat takto.

Nejprve nainstalujte knihovnu Paho z prostředí příkazového řádku:

pip install paho-mqtt

Pak implementujte klienta ve skriptu Pythonu. Zástupné symboly nahraďte následujícím způsobem:

  • <local path to digicert.cer> je cesta k místnímu souboru, který obsahuje certifikát DigiCert Baltimore Root. Tento soubor můžete vytvořit zkopírováním informací o certifikátu z certs.c v sadě Azure IoT SDK pro jazyk C. Zahrňte řádky a , odeberte značky na začátku a konci každého řádku a odeberte znaky na konci každého -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- " \r\n řádku.

  • <device id from device registry> je ID zařízení, které jste přidali do centra IoT.

  • <generated SAS token> je token SAS pro zařízení vytvořené podle předchozího popisu v tomto článku.

  • <iot hub name> název vašeho centra IoT.

from paho.mqtt import client as mqtt
import ssl

path_to_root_cert = "<local path to digicert.cer file>"
device_id = "<device id from device registry>"
sas_token = "<generated SAS token>"
iot_hub_name = "<iot hub name>"


def on_connect(client, userdata, flags, rc):
    print("Device connected with result code: " + str(rc))


def on_disconnect(client, userdata, rc):
    print("Device disconnected with result code: " + str(rc))


def on_publish(client, userdata, mid):
    print("Device sent message")


client = mqtt.Client(client_id=device_id, protocol=mqtt.MQTTv311)

client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.on_publish = on_publish

client.username_pw_set(username=iot_hub_name+".azure-devices.net/" +
                       device_id + "/?api-version=2018-06-30", password=sas_token)

client.tls_set(ca_certs=path_to_root_cert, certfile=None, keyfile=None,
               cert_reqs=ssl.CERT_REQUIRED, tls_version=ssl.PROTOCOL_TLSv1_2, ciphers=None)
client.tls_insecure_set(False)

client.connect(iot_hub_name+".azure-devices.net", port=8883)

client.publish("devices/" + device_id + "/messages/events/", '{"id":123}', qos=1)
client.loop_forever()

Pokud chcete provést ověření pomocí certifikátu zařízení, aktualizujte výše uvedený fragment kódu následujícími změnami (informace o přípravě na ověřování pomocí certifikátů najdete v tématu Jak získat certifikát certifikační autority X.509):

# Create the client as before
# ...

# Set the username but not the password on your client
client.username_pw_set(username=iot_hub_name+".azure-devices.net/" +
                       device_id + "/?api-version=2018-06-30", password=None)

# Set the certificate and key paths on your client
cert_file = "<local path to your certificate file>"
key_file = "<local path to your device key file>"
client.tls_set(ca_certs=path_to_root_cert, certfile=cert_file, keyfile=key_file,
               cert_reqs=ssl.CERT_REQUIRED, tls_version=ssl.PROTOCOL_TLSv1_2, ciphers=None)

# Connect as before
client.connect(iot_hub_name+".azure-devices.net", port=8883)

Odesílání zpráv ze zařízení do cloudu

Po úspěšném připojení může zařízení odesílat zprávy do služby IoT Hub devices/{device_id}/messages/events/ pomocí nebo jako název devices/{device_id}/messages/events/{property_bag} tématu. Element {property_bag} umožňuje zařízení odesílat zprávy s dalšími vlastnostmi ve formátu s kódováním URL. Například:

RFC 2396-encoded(<PropertyName1>)=RFC 2396-encoded(<PropertyValue1>)&RFC 2396-encoded(<PropertyName2>)=RFC 2396-encoded(<PropertyValue2>)…

Poznámka

Tento {property_bag} element používá stejné kódování jako řetězce dotazů v protokolu HTTPS.

Následuje seznam chování specifických IoT Hub implementaci:

  • IoT Hub nepodporuje zprávy QoS 2. Pokud aplikace zařízení publikuje zprávu s QoS 2, IoT Hub připojení k síti zavře.

  • IoT Hub nezachová zachovat zprávy. Pokud zařízení odešle zprávu s příznakem RETAIN nastaveným na hodnotu 1, IoT Hub do zprávy přidá vlastnost aplikace mqtt-retain. V tomto případě místo zachování zprávy o zachování IoT Hub předá do back-endové aplikace.

  • IoT Hub podporuje pouze jedno aktivní připojení MQTT na jedno zařízení. Jakékoli nové připojení MQTT jménem stejného ID zařízení způsobí, že IoT Hub zahodí stávající připojení a 400027 ConnectionForcefullyClosedOnNewConnection se přihlásí k IoT Hub protokolům.

Další informace najdete v příručce pro vývojáře zasílání zpráv.

Příjem zpráv z cloudu do zařízení

Pokud chcete přijímat zprávy z IoT Hub, zařízení by se mělo přihlásit k odběru devices/{device_id}/messages/devicebound/# pomocí jako filtru 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. IoT Hub nepodporuje použití zástupných znaků nebo pro # ? filtrování dílčích témat. Protože IoT Hub 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í neobdrží žádné zprávy z IoT Hub dokud se úspěšně nepřidá ke svému koncovému bodu specifickému pro zařízení reprezentované devices/{device_id}/messages/devicebound/# filtrem tématu. Po nastavení odběru přijímá zařízení zprávy z cloudu do zařízení, které do něj byly odeslány po uplynutí doby odběru. Pokud se zařízení připojí s příznakem CleanSession nastaveným na hodnotu 0, předplatné se zachová napříč různými relacemi. V takovém případě se zařízení při příštím připojení pomocí relace CleanSession 0 dostane všechny nevyřízené zprávy, které mu budou odeslány při odpojení. Pokud ale zařízení používá příznak CleanSession nastavený na hodnotu 1, nepřijme žádné zprávy od IoT Hub dokud se nepřijme ke svému koncovému bodu zařízení.

IoT Hub zprávy s názvem tématu nebo pokud devices/{device_id}/messages/devicebound/ existují vlastnosti devices/{device_id}/messages/devicebound/{property_bag} zprávy. {property_bag} obsahuje dvojice klíč/hodnota zakódované do adresy URL vlastností zprávy. Do sáček vlastností jsou zahrnuté jenom vlastnosti aplikace a uživatelsky nastavené systémové vlastnosti (například messageId nebo correlationId). Názvy systémových vlastností mají předponu , vlastnosti aplikace používají $ původní název vlastnosti bez předpony. Další podrobnosti o formátu souboru vlastností najdete v tématu Odesílání zpráv ze zařízení do cloudu.

Ve zprávách z cloudu do zařízení jsou hodnoty v souboru property bag reprezentované jako v následující tabulce:

Hodnota vlastnosti Reprezentace Description
null key V souboru property bag se zobrazí pouze klíč.
prázdný řetězec key= Klíč následovaný znaménkem rovná se bez hodnoty
nenulová, neprázdná hodnota key=value Klíč následovaný znaménkem rovná se a hodnotou

Následující příklad ukazuje sáček vlastností, který obsahuje tři vlastnosti aplikace: prop1 s hodnotou null ; prop2– prázdný řetězec (""); a prop3 s hodnotou "řetězec".

/?prop1&prop2=&prop3=a%20string

Když se aplikace zařízení přihlásí k odběru tématu pomocí QoS 2, IoT Hub maximální úroveň QoS 1 v paketu SUBACK. Potom IoT Hub zprávy do zařízení pomocí QoS 1.

Načtení vlastností dvojčete zařízení

Nejprve se zařízení přihlásí k odběru $iothub/twin/res/# , aby obdrželo odpovědi operace. Pak odešle do tématu prázdnou zprávu s $iothub/twin/GET/?$rid={request id} vyplněnou hodnotou PRO ID požadavku. Služba pak odešle zprávu odpovědi obsahující data dvojčete zařízení v tématu s použitím $iothub/twin/res/{status}/?$rid={request id} stejného ID požadavku jako požadavek.

ID požadavku může být libovolná platná hodnota pro hodnotu vlastnosti zprávy podle příručky vývojáře zasílání zpráv IoT Huba stav se ověřuje jako celé číslo.

Text odpovědi obsahuje část properties dvojčete zařízení, jak je znázorněno v následujícím příkladu odpovědi:

{
    "desired": {
        "telemetrySendFrequency": "5m",
        "$version": 12
    },
    "reported": {
        "telemetrySendFrequency": "5m",
        "batteryLevel": 55,
        "$version": 123
    }
}

Možné stavové kódy:

Status Popis
200 Success
429 Příliš mnoho požadavků (hrottled) podle IoT Hub omezování
5** Chyby serveru

Další informace najdete v příručce pro vývojáře dvojčat zařízení.

Aktualizace ohlášených vlastností dvojčete zařízení

Pokud chcete aktualizovat ohlášené vlastnosti, zařízení vydá požadavek na IoT Hub prostřednictvím publikování určeného tématu MQTT. Po zpracování požadavku IoT Hub na stav úspěchu nebo neúspěchu operace aktualizace prostřednictvím publikování do jiného tématu. Toto téma může zařízení přihlásit k odběru, aby ho informovalo o výsledku žádosti o aktualizaci dvojčete. K implementaci tohoto typu interakce s požadavky a odpověďmi v MQTT využíváme v žádosti o aktualizaci teto id požadavku ( ), které zařízení původně $rid poskytlo. Toto ID požadavku je také součástí odpovědi od IoT Hub, aby zařízení mohla korelovat odpověď s konkrétním dřívějším požadavkem.

Následující postup popisuje, jak zařízení aktualizuje ohlášené vlastnosti ve dvojčete zařízení v IoT Hub:

  1. Zařízení se musí nejprve přihlásit k odběru tématu, aby z tohoto tématu $iothub/twin/res/# IoT Hub.

  2. Zařízení odešle zprávu, která obsahuje aktualizaci dvojčete zařízení do $iothub/twin/PATCH/properties/reported/?$rid={request id} tématu. Tato zpráva obsahuje hodnotu ID požadavku.

  3. Služba pak odešle zprávu odpovědi, která obsahuje novou hodnotu ETag pro kolekci ohlášených vlastností v tématu $iothub/twin/res/{status}/?$rid={request id} . Tato zpráva odpovědi používá stejné ID požadavku jako požadavek.

Text zprávy požadavku obsahuje dokument JSON, který obsahuje nové hodnoty ohlášených vlastností. Každý člen v dokumentu JSON se aktualizuje nebo přidá odpovídajícího člena do dokumentu dvojčete zařízení. Člen nastavený na null odstraní člena z objektu, který ho obsahuje. Například:

{
    "telemetrySendFrequency": "35m",
    "batteryLevel": 60
}

Možné stavové kódy:

Status Popis
204 Úspěch (žádný obsah se nevrátil)
400 Chybný požadavek. Poškozený kód JSON
429 Příliš mnoho požadavků (hrottled) podle IoT Hub omezování
5** Chyby serveru

Následující fragment kódu Pythonu ukazuje proces aktualizace hlášených vlastností dvojčete přes MQTT (pomocí klienta Paho MQTT):

from paho.mqtt import client as mqtt

# authenticate the client with IoT Hub (not shown here)

client.subscribe("$iothub/twin/res/#")
rid = "1"
twin_reported_property_patch = "{\"firmware_version\": \"v1.1\"}"
client.publish("$iothub/twin/PATCH/properties/reported/?$rid=" +
               rid, twin_reported_property_patch, qos=0)

Po úspěchu operace aktualizace ohlášených vlastností dvojčete výše bude zpráva publikování z IoT Hub mít následující téma: , kde je stavový kód označující úspěch, odpovídá ID požadavku poskytnutému zařízením v kódu a odpovídá verzi oddílu ohlášených vlastností dvojčat zařízení po $iothub/twin/res/204/?$rid=1&$version=6 204 $rid=1 $version aktualizaci.

Další informace najdete v příručce pro vývojáře dvojčat zařízení.

Příjem oznámení o aktualizacích požadovaných vlastností

Když je zařízení připojené, IoT Hub oznámení do tématu , které obsahuje obsah aktualizace provedené $iothub/twin/PATCH/properties/desired/?$version={new version} back-endem řešení. Například:

{
    "telemetrySendFrequency": "5m",
    "route": null,
    "$version": 8
}

Pokud jde o aktualizace null vlastností, hodnoty znamenají, že se člen objektu JSON odstraní. Všimněte si $version také, že označuje novou verzi oddílu požadovaných vlastností dvojčete.

Důležité

IoT Hub oznámení o změně generuje pouze v případě, že jsou zařízení připojená. Nezapomeňte implementovat tok opětovného připojení zařízení, aby se požadované vlastnosti synchronizované mezi IoT Hub a aplikací zařízení.

Další informace najdete v příručce pro vývojáře dvojčat zařízení.

Reakce na přímou metodu

Nejprve se zařízení musí přihlásit k odběru $iothub/methods/POST/# . IoT Hub odešle požadavky metody do tématu s platným json nebo $iothub/methods/POST/{method name}/?$rid={request id} prázdným textem.

Aby zařízení reagovalo, odešle do tématu zprávu s platným json nebo prázdným $iothub/methods/res/{status}/?$rid={request id} textem. V této zprávě musí ID požadavku odpovídat ID ve zprávě požadavku a stav musí být celé číslo.

Další informace najdete v příručce pro vývojáře přímých metod.

Další aspekty

Pokud potřebujete přizpůsobit chování protokolu MQTT na straně cloudu, měli byste zkontrolovat bránu protokolu Azure IoT. Tento software umožňuje nasadit vysoce výkonovou vlastní bránu protokolu, která se bude rozhraním přímo IoT Hub. Brána protokolu Azure IoT umožňuje přizpůsobit protokol zařízení tak, aby vyhovoval brownfieldům nasazení MQTT nebo jiným vlastním protokolům. Tento přístup ale vyžaduje, že spustíte a provozujete vlastní bránu protokolu.

Další kroky

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

Další informace o plánování nasazení IoT Hub najdete v tématu:

Pokud chcete dále prozkoumat možnosti IoT Hub, projděte si: