Sdílet prostřednictvím


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

Zprávy typu cloud-zařízení jsou jednosměrná oznámení z back-endu vašeho řešení do aplikace zařízení. Diskuzi o dalších možnostech cloud-zařízení podporovaných službou Azure IoT Hub najdete v doprovodných materiálech ke komunikaci typu Cloud-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 Služby IoT Hub úrovně Basic a Standard/Free najdete v tématu Volba správné úrovně IoT Hubu pro vaše řešení.

Zprávy typu cloud-zařízení odesíláte prostřednictvím koncového bodu směřujícího ke službě , /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.

Pokud chcete každou zprávu typu cloud-zařízení cílit na jedno zařízení, vaše centrum IoT nastaví vlastnost na /devices/{deviceId}/messages/devicebound.

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

Tento článek popisuje koncepty a procesy týkající se zpráv typu cloud-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 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í, která se připojují přes protokol MQTT (Message Queuing Telemetry Transport), nemůžou odmítnout zprávy typu cloud-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 opustit zprávy typu cloud-zařízení.

Vlákno může selhat zpracovat zprávu 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í centrum IoT stav zprávy na Nedoručené dopisy. Podobně centrum IoT nastaví stav zprávy na nedoručené dopisy po vypršení platnosti.

Zařízení obvykle dokončí zprávu typu cloud-zařízení, když ztráta zprávy nemá vliv na logiku aplikace. Příkladem tohoto dokončení může být to, že zařízení přechovává obsah zprávy místně nebo úspěšně spustilo 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 zachování popisu úlohy v místním úložišti dokončete zprávu typu cloud-zařízení.

  • Upozorněte back-end řešení na jednu nebo více zpráv typu zařízení-cloud v různých fázích průběhu úlohy.

Vypršení platnosti zprávy (doba do provozu)

Každá zpráva typu cloud-zařízení má čas vypršení platnosti. Tentokrát je nastavená některou z následujících možností:

  • Vlastnost ExpiryTimeUtc ve službě
  • IoT Hub s použitím výchozího času k živému , který je určený jako vlastnost IoT Hubu

Další informace o vypršení platnosti zpráv najdete v tématu Možnosti konfigurace typu Cloud-zařízení.

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 na živé hodnoty. 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:

  • Je možné přijímat zprávy.
  • Nejsou online nebo selhaly.

Zpětná vazba ke zprávě

Když odešlete zprávu typu cloud-zařízení, může služba požádat o doručení zpětné vazby na jednotlivé zprávy 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ě typu cloud-zařízení, která se odesílá 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 typu cloud-zařízení dosáhne stavu Dokončeno , centrum IoT vygeneruje zprávu zpětné vazby.
negativní Pokud zpráva typu cloud-zařízení dosáhne stavu nedoručených zpráv, centrum IoT 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 plný 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ž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 pro příjem zpětné vazby je stejná jako u zpráv typu cloud-zařízení. Kdykoli je to možné, zpětná vazba zprávy se dávková 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}
ContentType 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 typu cloud-zařízení, ke které tyto informace zpětné vazby souvisejí.
statusCode Požadovaný řetězec používaný ve zprávách zpětné vazby generovaných centrem IoT:
Úspěch
Platnost vypršela
DeliveryCountExceeded
Odmítnuto
Očištěný
description Řetězcové hodnoty pro StatusCode.
deviceId Id zařízení cílového zařízení zprávy typu cloud-zařízení, ke které tato část zpětné vazby souvisí.
deviceGenerationId DeviceGenerationId cílového zařízení zprávy typu cloud-zařízení, ke které tato část zpětné vazby souvisí.

Služba musí zadat MessageId , aby zpráva typu cloud-zařízení mohl korelovat svůj názor 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é všechny nevyřízené názory. Zpětná vazba zařízení se odesílá 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 zveřejňuje následující možnosti konfigurace pro zasílání zpráv cloud-zařízení:

Vlastnost Popis Rozsah a výchozí nastavení
defaultTtlAsIso8601 Výchozí hodnota TTL pro zprávy z cloudu na zařízení ISO_8601 interval až dva dny (minimálně jedna minuta); výchozí: jedna hodina
maxDeliveryCount Maximální počet doručení pro fronty cloud-zařízení na zařízení 1 až 100; výchozí hodnota: 10
feedback.ttlAsIso8601 Uchovávání zpráv zpětné vazby vázané na službu ISO_8601 interval až dva dny (minimálně jedna minuta); výchozí: jedna hodina
feedback.maxDeliveryCount Maximální počet doručení fronty 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í centra ve službě IoT Hub vyberte Předdefinované koncové body a přejděte do cloudu do zasílání zpráv zařízení. (Nastavení vlastností feedback.maxDeliveryCount a feedback.lockDurationAsIso8601 se v současné době na webu Azure Portal nepodporuje.)

    Nastavení možností konfigurace pro zasílání zpráv cloud-zařízení na 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í.