Sdílet prostřednictvím


Principy zasílání zpráv z cloudu do zařízení z IoT Hubu

Zprávy typu cloud-to-device jsou jednosměrná oznámení z backendu vašeho systému k aplikaci zařízení. Pro další informace o možnostech komunikace cloud-to-zařízení podporovaných službou Azure IoT Hub viz Pokyny pro komunikaci z cloudu na zařízení.

Poznámka:

Funkce popsané v tomto článku jsou k dispozici pouze na úrovni Standard služby IoT Hub. Další informace o úrovních Basic a Standard/Free IoT Hub najdete v tématu Volba správné úrovně a velikosti služby IoT Hub pro vaše řešení.

Zprávy typu cloud-to-device odesíláte prostřednictvím služebního koncového bodu /messages/devicebound. Zařízení pak přijímá zprávy prostřednictvím koncového bodu specifického pro zařízení , /devices/{deviceId}/messages/devicebound.

K cílení každé zprávy typu cloud-zařízení na jedno zařízení váš IoT rozbočovač nastaví vlastnost na /devices/{deviceId}/messages/devicebound.

Každá fronta zařízení obsahuje nejvýše 50 zpráv typu cloud-to-device. Pokud se pokusíte odeslat více zpráv do stejného zařízení, dojde k chybě.

Tento článek rozebírá koncepty a procesy týkající se zpráv z cloudového úložiště na zařízení. Pokyny k vývoji aplikací, které zpracovávají zprávy typu cloud-zařízení, najdete v tématu Odesílání a přijímání zpráv typu cloud-zařízení.

Životní cyklus zpráv z cloudu na zařízení

Aby se zajistilo aspoň jedno doručení zpráv, vaše centrum IoT udržuje zprávy typu cloud-zařízení ve frontách jednotlivých zařízení. Zařízení musí explicitně potvrdit dokončení zprávy, aby služba IoT Hub odebrala zprávu z fronty. Tento přístup zaručuje odolnost proti chybám připojení a zařízení.

Graf stavu životního cyklu se zobrazuje v následujícím diagramu:

Diagram znázorňující graf stavu životního cyklu zpráv typu cloud-zařízení

Když služba IoT Hub odešle zprávu do zařízení, služba nastaví stav zprávy na zařazeno do fronty. Když je vlákno zařízení připravené k přijetí zprávy, IoT Hub zprávu uzamkne nastavením stavu Neviditelný. Tento stav umožňuje jiným vláknům v zařízení začít přijímat další zprávy. Když vlákno zařízení dokončí zpracování zprávy, upozorní ioT Hub dokončením zprávy. Centrum IoT pak nastaví stav Dokončeno.

Zařízení může také:

  • Zamítněte zprávu, která způsobí, že centrum IoT nastaví stav nedoručených zpráv. Pro obnovení těchto zpráv neexistuje žádná fronta nedoručených zpráv. Zařízení připojená přes protokol Message Queuing Telemetry Transport (MQTT) nemohou odmítnout cloudové zprávy pro zařízení.

  • Opusťte zprávu, která způsobí, že centrum IoT vloží zprávu zpět do fronty se stavem nastaveným na Zařazení do fronty. Zařízení, která se připojují přes protokol MQTT, nemohou ignorovat zprávy z cloudu na zařízení.

Vlákno může selhat při zpracování té zprávy bez upozornění IoT Hubu. V tomto případě zprávy automaticky přejdou z neviditelného stavu zpět do stavu zařazení do fronty po vypršení časového limitu viditelnosti (nebo vypršení časového limitu uzamčení). Délka tohoto časového limitu je jedna minuta a nedá se změnit.

Vlastnost maximálního počtu doručení ve službě IoT Hub určuje maximální počet, kolikrát může zpráva přecházet mezi stavy Enqueued a Neviditelné . Po uplynutí tohoto počtu přechodů nastaví IoT centrum stav zprávy na mrtvá pošta. Podobně centrum IoT nastaví stav zprávy na Dead lettered po vypršení platnosti.

Zařízení obvykle dokončí zprávu typu cloud až k zařízení, když ztráta zprávy nemá vliv na logiku aplikace. Příkladem tohoto dokončení může být, když zařízení zachová obsah zprávy místně nebo úspěšně spustí operaci. Zpráva může obsahovat také přechodné informace, jejichž ztráta by neměla vliv na funkčnost aplikace. V některých případech můžete v případě dlouhotrvajících úloh:

  • Po uložení popisu úlohy do místního úložiště dokončete zprávu typu cloud-k-zařízení.

  • Informujte serverovou část řešení pomocí jedné nebo více zpráv z zařízení do cloudu o různých fázích postupu úlohy.

Vypršení platnosti zprávy (doba života)

Každá zpráva z cloudu do zařízení má dobu vypršení platnosti. Na jednu z následujících možností se nastaví doba vypršení platnosti:

  • Vlastnost ExpiryTimeUtc ve službě
  • IoT Hub s použitím výchozí doby do vypršení platnosti zadané jako vlastnost IoT hubu

Další informace o vypršení platnosti zpráv najdete v tématu Možnosti konfigurace Cloud-to-Device.

Běžným způsobem, jak využít vypršení platnosti zprávy a vyhnout se odesílání zpráv do odpojených zařízení, je nastavit krátkou dobu života hodnot. Tento přístup dosáhne stejného výsledku jako udržování stavu připojení zařízení, ale je efektivnější. Když požádáte o potvrzení zpráv, ioT Hub vás upozorní, která zařízení:

  • Jsou schopny přijímat zprávy.
  • Nejsou online nebo nefungují.

Zpětná vazba ke zprávě

Když odešlete zprávu z cloudu do zařízení, může služba požádat o doručení zpětné vazby na zprávu o konečném stavu této zprávy. Zpětnou vazbu zpráv můžete nakonfigurovat nastavením vlastnosti aplikace iothub-ack ve zprávě z cloudu do zařízení, která se nastavuje na jednu z následujících čtyř hodnot:

Hodnota vlastnosti Ack Chování
Žádná Výchozí. Centrum IoT negeneruje zprávu zpětné vazby.
pozitivní Pokud zpráva z cloudu do zařízení dosáhne stavu Dokončeno, IoT centrum vygeneruje zprávu zpětné vazby.
negativní Pokud zpráva typu cloud-zařízení dosáhne stavu mrtvého písma, IoT Hub vygeneruje zprávu zpětné vazby.
úplný Centrum IoT vygeneruje zprávu zpětné vazby v obou případech.

Pokud je hodnota vlastnosti Ack nastavená na plnou a neobdržíte zprávu zpětné vazby, znamená to, že vypršela platnost zprávy zpětné vazby. Služba nemůže vědět, co se stalo s původní zprávou. V praxi by služba měla zajistit, aby před vypršením platnosti zpracovávala zpětnou vazbu. Maximální doba vypršení platnosti je dva dny, což ponechá čas na opětovné spuštění služby, pokud dojde k selhání.

Jak je vysvětleno v koncových bodech služby IoT Hub, služba IoT Hub poskytuje zpětnou vazbu prostřednictvím koncového bodu směřujícího ke službě , /messages/servicebound/feedback, jako zprávy. Sémantika přijímání zpětné vazby je stejná jako u zpráv z cloudu do zařízení. Kdykoli je to možné, zpětná vazba zpráv se dávkuje do jedné zprávy s následujícím formátem:

Vlastnost Popis
EnqueuedTime Časové razítko, které označuje, kdy centrum obdrželo zprávu zpětné vazby.
ID uživatele {iot hub name}
Typ obsahu application/vnd.microsoft.iothub.feedback.json

Systém odešle zpětnou vazbu buď v případě, že dávka dosáhne 64 zpráv, nebo za 15 sekund od posledního odeslání podle toho, co nastane dříve.

Tělo je serializované pole záznamů JSON, z nichž každý má následující vlastnosti:

Vlastnost Popis
enqueuedTimeUtc Časové razítko, které označuje, kdy došlo k výsledku zprávy. Například časové razítko, které označuje, kdy centrum obdrželo zprávu zpětné vazby nebo platnost původní zprávy vypršela.
originalMessageId MessageId zprávy z cloudu do zařízení, ke které se tyto informace zpětné vazby vztahují.
stavový kód Požadovaný řetězec používaný službou IoT Hub při generování zpráv zpětné vazby:
Úspěch
Platnost vypršela
Překročen počet doručení
Odmítnuto
Očištěný
popis Řetězcové hodnoty pro StatusCode.
ID zařízení Id zařízení cílového zařízení zprávy typu cloud-to-device, s níž souvisí tato část zpětné vazby.
deviceGenerationId DeviceGenerationId cílového zařízení zprávy z cloudu do zařízení, se kterou tato část zpětné vazby souvisí.

Služba musí zadat MessageId, aby mohla zpráva typu cloud-zařízení korelovat svou zpětnou vazbu s původní zprávou.

Text zprávy zpětné vazby se zobrazí v následujícím příkladu kódu:

[
  {
    "originalMessageId": "0987654321",
    "enqueuedTimeUtc": "2015-07-28T16:24:48.789Z",
    "statusCode": "Success",
    "description": "Success",
    "deviceId": "123",
    "deviceGenerationId": "abcdefghijklmnopqrstuvwxyz"
  },
  {
    ...
  },
  ...
]

Čekající zpětná vazba na odstraněná zařízení

Když se zařízení odstraní, odstraní se také veškerá nevyřízená zpětná vazba. Zpětná vazba z zařízení je odesílána v dávkách. Úzké okno, které je často kratší než jedna sekunda, může nastat mezi tím, kdy zařízení potvrdí přijetí zprávy a kdy je připravena další dávka zpětné vazby. Pokud se v daném úzkém okně odstraní nějaké zařízení, zpětná vazba se nezobrazí.

Toto chování můžete vyřešit tak, že před odstraněním zařízení počkáte na dobu, po kterou se čeká na odeslání zpětné vazby. Po odstranění zařízení by se měla předpokládat ztráta zpětné vazby související se zprávou.

Možnosti konfigurace cloud-zařízení

Každé centrum IoT zpřístupňuje následující možnosti konfigurace pro zasílání zpráv z cloudu na zařízení:

Vlastnost Popis Rozsah a výchozí nastavení
defaultTtlAsIso8601 Výchozí hodnota TTL pro zprávy z cloudu na zařízení ISO_8601 časový interval až dva dny (minimálně jedna minuta); výchozí: jedna hodina
maximálníPočetDoručení Maximální počet doručení pro fronty z cloudu do zařízení jednotlivých zařízení 1 až 100; výchozí hodnota: 10
feedback.ttlAsIso8601 Uchovávání zpětnovazebních zpráv vázaných na službu ISO_8601 časový interval až dva dny (minimálně jedna minuta); výchozí: jedna hodina
feedback.maxDeliveryCount Maximální počet doručení ve frontě zpětné vazby 1 až 100; výchozí hodnota: 10
feedback.lockDurationAsIso8601 Doba trvání uzamčení fronty zpětné vazby ISO_8601 interval od 5 do 300 sekund (minimálně pět sekund); výchozí hodnota: 60 sekund.

Možnosti konfigurace můžete nastavit na webu Azure Portal nebo v Azure CLI:

  • Azure portal: V části Nastavení Hubu na vašem IoT Hubu vyberte Předdefinované koncové body a přejděte na Cloud-to-Device zasílání zpráv. (Nastavení vlastnosti feedback.maxDeliveryCount nebo feedback.lockDurationAsIso8601 se v současné době na webu Azure Portal nepodporuje.)

    Nastavení konfiguračních možností pro zasílání zpráv z cloudu do zařízení v portálu

  • Azure CLI: Použijte příkaz az iot hub update.

    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.defaultTtlAsIso8601=PT1H0M0S
    
    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.maxDeliveryCount=10
    
    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.feedback.ttlAsIso8601=PT1H0M0S
    
    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.feedback.maxDeliveryCount=10
    
    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.feedback.lockDurationAsIso8601=PT0H1M0S
    

Další kroky

Informace o sadách SDK, které můžete použít ke zpracování zpráv typu cloud-zařízení, najdete v tématu Sady SDK služby Azure IoT Hub.

Pokyny k vývoji aplikací, které zpracovávají zprávy typu cloud-zařízení, najdete v tématu Odesílání a přijímání zpráv typu cloud-zařízení.