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:
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.)
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í .
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro