Odesílání zpráv typu cloud-zařízení pomocí IoT Hubu (.NET)
Azure IoT Hub je plně spravovaná služba, která pomáhá zajistit spolehlivou a zabezpečenou obousměrnou komunikaci mezi miliony zařízení a back-endem řešení.
V tomto článku se dozvíte, jak:
Odesílání zpráv typu cloud-zařízení (C2D) z back-endu řešení do jednoho zařízení prostřednictvím IoT Hubu
Příjem zpráv typu cloud-zařízení na zařízení
Potvrzení o doručení žádosti (zpětná vazba) z back-endu vašeho řešení pro zprávy odeslané do zařízení ze služby IoT Hub
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í.
Na konci tohoto článku spustíte dvě konzolové aplikace .NET.
MessageReceiveSample: ukázková aplikace zařízení, která je součástí sady Microsoft Azure IoT SDK pro .NET, která se připojuje k centru IoT a přijímá zprávy typu cloud-zařízení.
SendCloudToDevice: aplikace služby, která odešle zprávu typu cloud-zařízení do aplikace zařízení prostřednictvím služby IoT Hub a pak obdrží potvrzení o doručení.
Poznámka:
IoT Hub podporuje řadu platforem a jazyků zařízení (C, Java, Python a JavaScript) prostřednictvím sad SDK pro zařízení Azure IoT.
Další informace o zprávách typu cloud-zařízení najdete v D2C a C2D Messaging pomocí IoT Hubu.
Požadavky
Předplatné Azure. Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.
Centrum IoT ve vašem předplatném Azure Pokud centrum ještě nemáte, můžete postupovat podle kroků v tématu Vytvoření centra IoT.
Zařízení zaregistrované ve službě IoT Hub. Pokud ve službě IoT Hub nemáte zařízení, postupujte podle pokynů v části Registrace zařízení.
Tento článek používá ukázkový kód ze sady Azure IoT SDK pro jazyk C#.
- Stáhněte nebo naklonujte úložiště sady SDK z GitHubu do vývojového počítače.
- Ujistěte se, že je na vývojovém počítači nainstalované rozhraní .NET Core 3.0.0 nebo novější. V případě potřeby zkontrolujte verzi spuštěním
dotnet --version
a stažením .NET .
Ujistěte se, že je v bráně firewall otevřený port 8883. Ukázka zařízení v tomto článku používá protokol MQTT, který komunikuje přes port 8883. Tento port může být blokovaný v některých podnikových a vzdělávacích síťových prostředích. Další informace a způsoby řešení tohoto problému najdete v tématu Připojení ke službě IoT Hub (MQTT).
Visual Studio.
Získání připojovacího řetězce zařízení
V tomto článku spustíte ukázkovou aplikaci, která simuluje zařízení, které přijímá zprávy typu cloud-zařízení odesílané prostřednictvím služby IoT Hub. Ukázková aplikace MessageReceiveSample , která je součástí sady Microsoft Azure IoT SDK pro .NET , se připojuje k vašemu centru IoT a funguje jako simulované zařízení. Ukázka používá primární připojovací řetězec zaregistrovaného zařízení ve službě IoT Hub.
Pokud chcete získat primární připojovací řetězec pro zařízení zaregistrované ve službě IoT Hub, postupujte takto:
Na webu Azure Portal vyberte skupiny prostředků. Vyberte skupinu prostředků, ve které se nachází vaše centrum, a pak vyberte centrum ze seznamu prostředků.
V levém podokně centra IoT v části Správa zařízení vyberte Zařízení.
V seznamu zařízení vyberte příslušné zařízení.
Zkopírujte primární připojovací řetězec a uložte hodnotu.
Příjem zpráv v aplikaci zařízení
V této části spusťte ukázkovou aplikaci zařízení MessageReceiveSample pro příjem zpráv C2D odesílaných prostřednictvím centra IoT. Otevřete nový příkazový řádek a přejděte do složky azure-iot-sdk-csharp\iothub\device\samples\getting started\MessageReceiveSample ve složce, do které jste rozbalili sadu SDK Azure IoT C#. Spusťte následující příkazy a nahraďte {Your device connection string}
zástupnou hodnotu zařízením, připojovací řetězec jste zkopírovali z registrovaného zařízení ve službě IoT Hub.
dotnet restore
dotnet run --c "{Your device connection string}"
Následující výstup pochází z ukázkové aplikace zařízení po úspěšném spuštění a připojení k centru IoT:
5/22/2023 11:13:18 AM> Press Control+C at any time to quit the sample.
5/22/2023 11:13:18 AM> Device waiting for C2D messages from the hub...
5/22/2023 11:13:18 AM> Use the Azure Portal IoT hub blade or Azure IoT Explorer to send a message to this device.
5/22/2023 11:13:18 AM> Trying to receive C2D messages by polling using the ReceiveAsync() method. Press 'n' to move to the next phase.
Ukázková aplikace zařízení se dotazuje na zprávy pomocí metod ReceiveAsync a CompleteAsync . Metoda ReceiveC2dMessagesPollingAndCompleteAsync
používá metodu ReceiveAsync
, která asynchronně vrátí přijatou zprávu v době, kdy zařízení obdrží zprávu. ReceiveAsync
vrátí hodnotu null po specifikovatelném časovém limitu. V tomto příkladu se použije výchozí hodnota jedné minuty. Když zařízení obdrží hodnotu null, mělo by pokračovat v čekání na nové zprávy. Tento požadavek je důvodem, proč ukázková aplikace v metodě obsahuje následující blok kódu ReceiveC2dMessagesPollingAndCompleteAsync
:
if (receivedMessage == null)
{
continue;
}
Volání CompleteAsync
metody oznámí službě IoT Hub, že zpráva byla úspěšně zpracována a že zprávu lze bezpečně odebrat z fronty zařízení. Zařízení by mělo tuto metodu volat, když se jeho zpracování úspěšně dokončí bez ohledu na protokol, který používá.
S protokoly AMQP a HTTPS, ale ne s protokolem MQTT, může zařízení také:
- Opusťte zprávu, která vede k tomu, že IoT Hub uchovává zprávu ve frontě zařízení pro budoucí spotřebu.
- Zamítnout zprávu, která trvale odebere zprávu z fronty zařízení.
Pokud se stane něco, co brání zařízení v dokončení, opuštění nebo odmítnutí zprávy, IoT Hub zařadí zprávu znovu do fronty po uplynutí časového limitu. Z tohoto důvodu musí být logika zpracování zpráv v aplikaci zařízení idempotentní, takže přijetí stejné zprávy několikrát způsobí stejný výsledek.
Další informace o životním cyklu zpráv typu cloud-zařízení a o tom, jak IoT Hub zpracovává zprávy typu cloud-zařízení, najdete v tématu Odesílání zpráv typu cloud-zařízení ze služby IoT Hub.
Poznámka:
Při použití HTTPS místo MQTT nebo AMQP jako přenosu ReceiveAsync
vrátí metoda okamžitě. Podporovaný vzor zpráv typu cloud-zařízení s protokolem HTTPS je přerušovaně připojená zařízení, která kontrolují zprávy zřídka (minimálně každých 25 minut). Vydání dalšího protokolu HTTPS přijímá výsledky omezování požadavků ve službě IoT Hub. Další informace o rozdílech mezi podporou MQTT, AMQP a HTTPS najdete v pokynech ke komunikaci typu Cloud-zařízení a volba komunikačního protokolu.
Získání připojovací řetězec centra IoT
V tomto článku vytvoříte back-endovou službu pro odesílání zpráv typu cloud-zařízení prostřednictvím služby IoT Hub. K odesílání zpráv typu cloud-zařízení potřebuje vaše služba oprávnění pro připojení ke službě. Ve výchozím nastavení se každá služba IoT Hub vytvoří pomocí zásady sdíleného přístupu s názvem služby , která toto oprávnění uděluje.
Pokud chcete získat připojovací řetězec ioT Hubu pro zásady služby, postupujte takto:
Na webu Azure Portal vyberte skupiny prostředků. Vyberte skupinu prostředků, ve které se nachází vaše centrum, a pak vyberte centrum ze seznamu prostředků.
V levém podokně centra IoT vyberte zásady sdíleného přístupu.
V seznamu zásad vyberte zásadu služby .
Zkopírujte primární připojovací řetězec a uložte hodnotu.
Odeslání zprávy typu cloud-zařízení
V této části vytvoříte konzolovou aplikaci .NET, která odesílá zprávy typu cloud-zařízení do aplikace simulovaného zařízení. Potřebujete ID zařízení ze svého zařízení a připojovací řetězec ioT Hubu.
V sadě Visual Studio vyberte Soubor>nový>projekt. V části Vytvořit nový projekt vyberte Konzolová aplikace (.NET Framework) a pak vyberte Další.
Pojmenujte projekt SendCloudToDevice a pak vyberte Další.
Přijměte nejnovější verzi rozhraní .NET Framework. Vyberte Vytvořit a vytvořte projekt.
V Průzkumník řešení klikněte pravým tlačítkem myši na nový projekt a pak vyberte Spravovat balíčky NuGet.
Ve správě balíčků NuGet vyberte Procházet a vyhledejte a vyberte Microsoft.Azure.Devices. Vyberte volbu Instalovat.
Tento krok stáhne, nainstaluje a přidá odkaz na balíček NuGet sady SDK služby Azure IoT.
Do horní části souboru Program.cs přidejte následující
using
příkaz.using Microsoft.Azure.Devices;
Do třídy Program přidejte následující pole.
{iot hub connection string}
Nahraďte zástupnou hodnotu připojovací řetězec IoT Hub, kterou jste si poznamenali dříve v připojovací řetězec Get the IoT Hub.{device id}
Nahraďte zástupnou hodnotu ID zařízení registrovaného zařízení ve službě IoT Hub.static ServiceClient serviceClient; static string connectionString = "{iot hub connection string}"; static string targetDevice = "{device id}";
Přidejte do třídy Program následující metodu pro odeslání zprávy do zařízení.
private async static Task SendCloudToDeviceMessageAsync() { var commandMessage = new Message(Encoding.ASCII.GetBytes("Cloud to device message.")); await serviceClient.SendAsync(targetDevice, commandMessage); }
Nakonec do metody Main přidejte následující řádky.
Console.WriteLine("Send Cloud-to-Device message\n"); serviceClient = ServiceClient.CreateFromConnectionString(connectionString); Console.WriteLine("Press any key to send a C2D message."); Console.ReadLine(); SendCloudToDeviceMessageAsync().Wait(); Console.ReadLine();
Stisknutím klávesy F5 spusťte ukázkovou aplikaci služby. Vyberte okno SendCloudToDevice a stiskněte Enter. Měla by se zobrazit zpráva přijatá ukázkovou aplikací zařízení, jak je znázorněno v následujícím příkladu výstupu.
5/22/2023 11:13:18 AM> Press Control+C at any time to quit the sample. 5/22/2023 11:13:18 AM> Device waiting for C2D messages from the hub... 5/22/2023 11:13:18 AM> Use the Azure Portal IoT hub blade or Azure IoT Explorer to send a message to this device. 5/22/2023 11:13:18 AM> Trying to receive C2D messages by polling using the ReceiveAsync() method. Press 'n' to move to the next phase. 5/22/2023 11:15:18 AM> Polling using ReceiveAsync() - received message with Id= 5/22/2023 11:15:18 AM> Received message: [Cloud to device message.] Content type: 5/22/2023 11:15:18 AM> Completed C2D message with Id=.
Příjem zpětné vazby k doručení
Pro každou zprávu typu cloud-zařízení je možné požádat o potvrzení o doručení (nebo vypršení platnosti) ze služby IoT Hub. Tato možnost umožňuje back-endu řešení snadno informovat, opakovat nebo kompenzační logiku. Další informace o zpětné vazbě z cloudu na zařízení najdete v tématu D2C a zasílání zpráv C2D se službou IoT Hub.
V této části upravíte ukázkovou aplikaci služby SendCloudToDevice tak, aby požadovala zpětnou vazbu, a obdržíte ji z centra IoT.
V sadě Visual Studio v projektu SendCloudToDevice přidejte do třídy Program následující metodu.
private async static void ReceiveFeedbackAsync() { var feedbackReceiver = serviceClient.GetFeedbackReceiver(); Console.WriteLine("\nReceiving c2d feedback from service"); while (true) { var feedbackBatch = await feedbackReceiver.ReceiveAsync(); if (feedbackBatch == null) continue; Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Received feedback: {0}", string.Join(", ", feedbackBatch.Records.Select(f => f.StatusCode))); Console.ResetColor(); await feedbackReceiver.CompleteAsync(feedbackBatch); } }
Všimněte si, že tento vzor příjmu je stejný jako při příjmu zpráv z aplikace zařízení z cloudu na zařízení.
Do metody Main přidejte následující řádek hned za
serviceClient = ServiceClient.CreateFromConnectionString(connectionString)
.ReceiveFeedbackAsync();
Pokud chcete požádat o zpětnou vazbu k doručení zprávy typu cloud-zařízení, musíte zadat vlastnost v metodě SendCloudToDeviceMessageAsync . Přidejte následující řádek hned za
var commandMessage = new Message(...);
řádek.commandMessage.Ack = DeliveryAcknowledgement.Full;
Ujistěte se, že je aplikace ukázkového zařízení spuštěná, a pak spusťte ukázkovou aplikaci služby stisknutím klávesy F5. Vyberte okno konzoly SendCloudToDevice a stiskněte Enter. Měla by se zobrazit zpráva přijatá ukázkovou aplikací zařízení a po několika sekundách měla být zpráva zpětné vazby přijatá vaší aplikací SendCloudToDevice . Následující výstup ukazuje zprávu zpětné vazby přijaté ukázkovou aplikací služby:
Send Cloud-to-Device message Receiving c2d feedback from service Press any key to send a C2D message. Received feedback: Success
Poznámka:
Pro zjednodušení tento článek neimplementuje žádné zásady opakování. V produkčním kódu byste měli implementovat zásady opakování, jako je exponenciální zpochybnění, jak navrhuje zpracování přechodných chyb.
Další kroky
V tomto článku jste se dozvěděli, jak odesílat a přijímat zprávy typu cloud-zařízení.
Další informace o zprávách typu cloud-zařízení najdete v tématu Odesílání zpráv typu cloud-zařízení z centra IoT.
Další informace o formátech zpráv ioT Hubu najdete v tématu Vytváření a čtení zpráv ioT Hubu.
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