Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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:
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.)
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í.