Odesílání zpráv z cloudu do zařízení ze služby IoT Hub

Pokud chcete do aplikace zařízení odesílat jednosměrná oznámení z back-endu řešení, odesílejte zprávy z cloudu do zařízení ze služby IoT Hub do zařízení. Diskuzi o dalších možnostech cloud-zařízení, které Azure IoT Hub podporuje, najdete v pokynech ke komunikaci mezi cloudem a zařízením.

Poznámka

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

Zprávy z cloudu do zařízení se odesílají prostřednictvím 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.

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

Každá fronta zařízení obsahuje maximálně 50 zpráv z cloudu do zařízení. Při pokusu o odeslání dalších zpráv do stejného zařízení dojde k chybě.

Životní cyklus zpráv cloud-zařízení

Aby bylo zaručeno alespoň jedno doručení zpráv, vaše centrum IoT udržuje zprávy z cloudu na zařízení ve frontách pro jednotlivá zařízení. Zařízení musí před odebráním zprávy z fronty explicitně potvrdit dokončení zprávy. Tento přístup zaručuje odolnost proti chybám připojení a zařízení.

Graf stavu životního cyklu je zobrazený 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 do zařízení zprávu, nastaví stav zprávy na Zařazení do fronty. Když chce zařízení přijmout zprávu, centrum IoT zprávu uzamkne nastavením stavu Neviditelné. Tento stav umožňuje, aby ostatní vlákna na zařízení začala přijímat další zprávy. Když vlákno zařízení dokončí zpracování zprávy, upozorní centrum IoT dokončením zprávy. Centrum IoT pak nastaví stav na Dokončeno.

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

  • Zamítnout zprávu, což způsobí, že centrum IoT nastaví zprávu do stavu Nedoručené . Zařízení, která se připojují přes protokol MQTT (Message Queuing Telemetry Transport), nemůžou odmítnout zprávy cloud-zařízení.

  • Opustit zprávu, což způsobí, že IoT Hub vrátí zprávu zpět do fronty se stavem nastaveným na Enqueued. Zařízení, která se připojují přes protokol MQTT, nemůžou opustit zprávy z cloudu do zařízení.

Vlákno může selhat při zpracování zprávy bez upozornění centra IoT. V takovém případě se zprávy po vypršení časového limitu viditelnosti (nebo vypršení časového limituuzamčení) automaticky přemístit ze stavu Neviditelné zpět do stavu Zařazení do fronty. Hodnota tohoto časového limitu je jedna minuta a nelze ji změnit.

Vlastnost max delivery count ve službě IoT Hub určuje maximální počet přechodů zpráv mezi stavy Zařazení do fronty a Neviditelné . Po uplynutí tohoto počtu přechodů nastaví Centrum IoT stav zprávy na Nedoručené. Centrum IoT podobně nastaví stav zprávy na Nedoručené po vypršení platnosti zprávy. Další informace najdete v tématu Vypršení platnosti zprávy (doba života).

Článek How to send cloud-to-device messages with IoT Hub ukazuje, jak odesílat zprávy cloud-zařízení z cloudu a přijímat je na zařízení.

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, když zařízení zachová obsah zprávy místně nebo úspěšně provedlo operaci. Zpráva může také obsahovat přechodné informace, jejichž ztráta by neměla vliv na funkčnost aplikace. V některých případech můžete u dlouhotrvajících úloh:

  • Jakmile zařízení zachová popis úlohy v místním úložišti, dokončete zprávu cloud-zařízení.

  • Upozorněte back-end řešení pomocí jedné 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 života)

Každá zpráva z cloudu do zařízení má čas vypršení platnosti. Tento čas je nastaven některou z následujících možností:

  • Vlastnost ExpiryTimeUtc ve službě
  • IoT Hub s použitím výchozí hodnoty time to live , která je zadaná jako vlastnost IoT Hubu.

Další informace o vypršení platnosti zpráv najdete v tématu Možnosti konfigurace z cloudu do zařízení.

Běžným způsobem, jak využít výhod vypršení platnosti zprávy a vyhnout se odesílání zpráv do odpojených zařízení, je nastavit krátké hodnoty času 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ávy, ioT Hub vás upozorní, která zařízení jsou:

  • Je možné přijímat zprávy.
  • Nejste online nebo došlo k selhání.

Zpětná vazba na zprávu

Když odešlete zprávu typu cloud-zařízení, může služba požádat o doručení zpětné vazby pro jednotlivé zprávy týkající se konečného stavu této zprávy. Zpětnou vazbu ke 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é Default (Výchozí). Centrum IoT nevygeneruje zpětnou vazbu.
pozitivní Pokud zpráva z cloudu do zařízení dosáhne stavu Dokončeno , centrum IoT vygeneruje zpětnou vazbu.
negativní Pokud zpráva z cloudu do zařízení dosáhne nedoručených zpráv, centrum IoT vygeneruje zpětnou vazbu.
Plné IoT Hub v obou případech vygeneruje zpětnou vazbu.

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

Jak je vysvětleno v tématu Koncové body, centrum IoT poskytuje zpětnou vazbu prostřednictvím koncového bodu / messages/servicebound/feedback jako zprávy. Sémantika pro příjem zpětné vazby je stejná jako u zpráv z cloudu do zařízení. Kdykoli je to možné, je zpětná vazba na zprávu dávková v jedné zprávě v následujícím formátu:

Vlastnost Popis
EnqueuedTime Časové razítko, které označuje, kdy centrum přijalo zprávu o zpětné vazbě.
UserId {iot hub name}
Contenttype application/vnd.microsoft.iothub.feedback.json

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

Tělo je serializované pole záznamů JSON s následujícími vlastnostmi:

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 přijalo zprávu o zpětné vazbě nebo kdy původní zpráva vypršela.
originalMessageId MessageId zprávy typu cloud-zařízení, ke které se tyto informace o zpětné vazbě vztahují.
statusCode Požadovaný řetězec, který se používá ve zprávách zpětné vazby generovaných službou IoT Hub:
Success
Platnost vypršela
DeliveryCountExceeded
Zamítnuto
Vymazány
description Řetězcové hodnoty pro StatusCode.
deviceId DeviceId cílového zařízení zprávy typu cloud-zařízení, ke kterému se tato zpětná vazba vztahuje.
deviceGenerationId DeviceGenerationId cílového zařízení zprávy typu cloud-zařízení, ke kterému se tato zpětná vazba vztahuje.

Služba musí zadat MessageId , aby zpráva z cloudu do zařízení mohl korelovat svoji zpětnou vazbu s původní zprávou.

Text zprávy zpětné vazby je znázorněn 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 pro odstraněná zařízení

Při odstranění zařízení se odstraní také veškerá nevyřízená zpětná vazba. Zpětná vazba zařízení se odesílá v dávkách. Mezi potvrzením přijetí zprávy zařízením a přípravou další dávky zpětné vazby může dojít k úzkému intervalu, často kratším než jedna sekunda. Pokud se zařízení odstraní v úzkém okně, zpětná vazba se nezobrazí.

Toto chování můžete vyřešit tak, že před odstraněním zařízení nějakou dobu počkáte, než dorazí nevyřízená zpětná vazba. Po odstranění zařízení byste měli považovat za ztracenou zpětnou vazbu související zprávy.

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 do zařízení:

Vlastnost Popis Rozsah a výchozí nastavení
defaultTtlAsIso8601 Výchozí hodnota TTL pro zprávy cloud-zařízení ISO_8601 interval do dvou dnů (minimálně 1 minuta); výchozí: 1 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žby ISO_8601 interval do dvou dnů (minimálně 1 minuta); výchozí: 1 hodina
feedback.maxDeliveryCount Maximální počet doručení pro frontu 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 jedním z následujících způsobů:

  • Azure Portal: V části Nastavení centra ve službě IoT Hub vyberte Integrované koncové body a přejděte do části Zasílání zpráv z cloudu do zařízení. (Nastavení vlastností feedback.maxDeliveryCount a feedback.lockDurationAsIso8601 se v Azure Portal v současné době nepodporuje.)

Nastavení možností konfigurace pro zasílání zpráv z cloudu do 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 k příjmu zpráv cloud-zařízení, najdete v tématu Azure IoT Hub sady SDK.

Pokud si chcete vyzkoušet příjem zpráv z cloudu do zařízení, přečtěte si kurz Odesílání cloud-zařízení .