Nahrání souborů ze zařízení do cloudu pomocí Azure IoT Hubu (.NET)

Tento článek ukazuje, jak nahrát možnosti nahrávání souborů služby IoT Hub nahrání souboru do úložiště objektů blob v Azure pomocí sad SDK služby a zařízení Azure IoT .NET.

Rychlé zprovoznění odesílání telemetrických dat ze zařízení do centra IoT a odesílání zpráv typu cloud-zařízení pomocí služby IoT Hub ukazují základní funkce zasílání zpráv typu zařízení-cloud a cloud-zařízení služby IoT Hub. Článek Konfigurace směrování zpráv se službou IoT Hub ukazuje způsob spolehlivého ukládání zpráv typu zařízení-cloud ve službě Microsoft Azure Blob Storage. V některých scénářích ale nemůžete snadno namapovat data, která zařízení odesílají, do relativně malých zpráv typu zařízení-cloud, které IoT Hub přijímá. Příklad:

  • Videa
  • Velké soubory obsahující obrázky
  • Data kmitání vzorkovaná ve vysoké frekvenci
  • Některá forma předzpracovaných dat

Tyto soubory se obvykle dávkově zpracovávají v cloudu pomocí nástrojů, jako je Azure Data Factory nebo stack Hadoop . Pokud potřebujete nahrát soubory ze zařízení, můžete dál používat zabezpečení a spolehlivost ioT Hubu. V tomto článku se dozvíte, jak na to.

Na konci tohoto článku spustíte dvě konzolové aplikace .NET:

  • FileUploadSample. Tato aplikace zařízení nahraje soubor do úložiště pomocí identifikátoru URI SAS poskytnutého centrem IoT. Tato ukázka pochází z úložiště azure IoT C# SDK, které si stáhnete v požadavcích.

  • ReadFileUploadNotification. Tato aplikace služby přijímá oznámení o nahrávání souborů z centra IoT. Tuto aplikaci vytvoříte.

Poznámka:

IoT Hub podporuje mnoho platforem a jazyků zařízení (včetně C, Javy, Pythonu a JavaScriptu) prostřednictvím sad SDK pro zařízení Azure IoT. Informace o připojení zařízení k Azure IoT Hubu najdete v Centru pro vývojáře Azure IoT.

Důležité

Funkce nahrávání souborů na zařízeních, která používají ověřování certifikační autority (CA) X.509, je ve verzi Public Preview a musí být povolený režim náhledu. Je obecně dostupná na zařízeních, která používají ověřování kryptografického otisku X.509 nebo ověření identity certifikátu X.509 se službou Azure Device Provisioning. Další informace o ověřování X.509 ve službě IoT Hub najdete v tématu Podporované certifikáty X.509.

Požadavky

  • IoT Hub. Vytvořte ho pomocí rozhraní příkazového řádku nebo webu Azure Portal.

  • Registrované zařízení. Zaregistrujte si ho na webu Azure Portal.

  • Ukázkové aplikace, které spustíte v tomto článku, jsou napsané pomocí jazyka C# s .NET Core.

    Stáhněte sadu .NET Core SDK pro více platforem z .NET.

    Pomocí následujícího příkazu ověřte aktuální verzi sady .NET Core SDK na vývojovém počítači:

    dotnet --version
    
  • Stáhněte si sadu Azure IoT SDK jazyka C# z ukázky stažení a extrahujte archiv ZIP.

  • Port 8883 by měl být otevřený v bráně firewall. Ukázka 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, jak tento problém obejít, najdete v tématu Připojení pro IoT Hub (MQTT).

Přidružení účtu Azure Storage ke službě IoT Hub

Pokud chcete nahrát soubory ze zařízení, musíte mít účet Azure Storage a kontejner Azure Blob Storage přidružený k vašemu centru IoT. Jakmile přidružíte účet úložiště a kontejner k centru IoT, může centrum IoT poskytnout prvky identifikátoru URI SAS při vyžádání zařízením. Zařízení pak může tyto prvky použít k vytvoření identifikátoru URI SAS, který používá k ověření ve službě Azure Storage a nahrání souborů do kontejneru objektů blob.

Přidružení účtu Azure Storage k centru IoT:

  1. V části Nastavení centra vyberte Nahrání souboru v levém podokně centra IoT.

    Snímek obrazovky zobrazující nastavení pro výběr nahrání souboru z portálu

  2. V podokně Nahrání souboru vyberte Kontejner služby Azure Storage. Pro účely tohoto článku se doporučuje, aby se váš účet úložiště a IoT Hub nacházely ve stejné oblasti.

    • Pokud už máte účet úložiště, který chcete použít, vyberte ho ze seznamu.

    • Pokud chcete vytvořit nový účet úložiště, vyberte +Storage. Zadejte název účtu úložiště a ujistěte se, že je umístění nastavené na stejnou oblast jako vaše centrum IoT, a pak vyberte OK. Nový účet se vytvoří ve stejné skupině prostředků jako vaše centrum IoT. Po dokončení nasazení vyberte ze seznamu účet úložiště.

    Po výběru účtu úložiště se otevře podokno Kontejnery .

  3. V podokně Kontejnery vyberte kontejner objektů blob.

    • Pokud už máte kontejner objektů blob, který chcete použít, vyberte ho ze seznamu a klikněte na Vybrat.

    • Pokud chcete vytvořit nový kontejner objektů blob, vyberte + Kontejner. Zadejte název nového kontejneru. Pro účely tohoto článku můžete ponechat všechna ostatní pole ve výchozím nastavení. Vyberte Vytvořit. Po dokončení nasazení vyberte v seznamu kontejner a klikněte na Vybrat.

  4. Zpět v podokně Nahrání souboru se ujistěte, že jsou oznámení souborů nastavená na Zapnuto. Všechna ostatní nastavení můžete ponechat ve výchozím nastavení. Než přejdete k další části, vyberte Uložit a počkejte na dokončení nastavení.

    Snímek obrazovky s potvrzením nastavení nahrávání souborů na portálu

Podrobnější pokyny k vytvoření účtu Azure Storage najdete v tématu Vytvoření účtu úložiště. Podrobnější pokyny k přidružení účtu úložiště a kontejneru objektů blob ke službě IoT Hub najdete v tématu Konfigurace nahrávání souborů pomocí webu Azure Portal.

Nahrání souboru z aplikace zařízení

V tomto článku použijete ukázku z úložiště azure IoT C# SDK, které jste si stáhli dříve jako aplikaci zařízení. Následující soubory můžete otevřít pomocí sady Visual Studio, Visual Studio Code nebo textového editoru podle vašeho výběru.

Ukázka se nachází v azure-iot-sdk-csharp/iothub/device/samples/getting started/FileUploadSample ve složce, ve které jste extrahovali sadu AZURE IoT C# SDK.

Prozkoumejte kód v FileUpLoadSample.cs. Tento soubor obsahuje hlavní ukázkovou logiku. Po vytvoření klienta zařízení IoT Hub se řídí standardním třídílným postupem pro nahrávání souborů ze zařízení:

  1. Kód volá metodu GetFileUploadSasUriAsync v klientovi zařízení, aby získal identifikátor URI SAS ze služby IoT Hub:

    var fileUploadSasUriRequest = new FileUploadSasUriRequest
    {
        BlobName = fileName
    };
    
    // Lines removed for clarity
    
    FileUploadSasUriResponse sasUri = await _deviceClient.GetFileUploadSasUriAsync(fileUploadSasUriRequest);
    Uri uploadUri = sasUri.GetBlobUri();
    
  2. Kód k nahrání souboru do úložiště Azure používá identifikátor URI SAS. V této ukázce pomocí identifikátoru URI SAS vytvoří klienta objektů blob bloku úložiště Azure a nahraje soubor:

    var blockBlobClient = new BlockBlobClient(uploadUri);
    await blockBlobClient.UploadAsync(fileStreamSource, new BlobUploadOptions());
    
  3. Kód oznámí centru IoT, že dokončil nahrávání. To službě IoT Hub říká, že může uvolnit prostředky přidružené k nahrání (identifikátor URI SAS). Pokud jsou povolená oznámení o nahrávání souborů, služba IoT Hub odešle zprávu s oznámením do back-endových služeb.

    var successfulFileUploadCompletionNotification = new FileUploadCompletionNotification
    {
        // Mandatory. Must be the same value as the correlation id returned in the sas uri response
        CorrelationId = sasUri.CorrelationId,
    
        // Mandatory. Will be present when service client receives this file upload notification
        IsSuccess = true,
    
        // Optional, user defined status code. Will be present when service client receives this file upload notification
        StatusCode = 200,
    
        // Optional, user-defined status description. Will be present when service client receives this file upload notification
        StatusDescription = "Success"
    };
    
    await _deviceClient.CompleteFileUploadAsync(successfulFileUploadCompletionNotification);
    

Pokud prozkoumáte soubor parameter.cs , uvidíte následující:

  • Ukázka vyžaduje předání parametru p, který přebírá připojovací řetězec zařízení.

  • Ve výchozím nastavení používá ukázka zařízení ke komunikaci se službou IoT Hub protokol MQTT. Parametr t můžete použít ke změně tohoto přenosového protokolu. Bez ohledu na tento výběr klient objektů blob Azure vždy používá jako protokol HTTPS k nahrání souboru úložiště Azure.

Získání připojovací řetězec centra IoT

V tomto článku vytvoříte back-endovou službu pro příjem zpráv oznámení o nahrání souboru z centra IoT. K příjmu zpráv s oznámením o nahrání souboru 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:

  1. 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ů.

  2. V levém podokně centra IoT vyberte zásady sdíleného přístupu.

  3. V seznamu zásad vyberte zásadu služby .

  4. Zkopírujte primární připojovací řetězec a uložte hodnotu.

Snímek obrazovky znázorňující, jak načíst připojovací řetězec ze služby IoT Hub na webu Azure Portal

Další informace ozásadách

Přijetí oznámení o nahrání souboru

V této části vytvoříte konzolovou aplikaci jazyka C#, která přijímá zprávy s oznámením o nahrání souboru z centra IoT.

  1. Otevřete příkazové okno a přejděte do složky, do které chcete projekt vytvořit. Vytvořte složku s názvem ReadFileUploadNotifications a změňte adresáře na tuto složku.

    mkdir ReadFileUploadNotification
    cd ReadFileUploadNotification
    
  2. Spuštěním následujícího příkazu vytvořte projekt konzoly jazyka C#. Po spuštění příkazu bude složka obsahovat soubor Program.cs a soubor ReadFileUploadNotification.csproj .

    dotnet new console --language c#
    
  3. Spuštěním následujícího příkazu přidejte balíček Microsoft.Azure.Devices do souboru projektu. Tento balíček je sada SDK služby Azure IoT .NET.

    dotnet add package Microsoft.Azure.Devices
    
  4. Otevřete soubor Program.cs a na začátek souboru přidejte následující příkaz:

    using Microsoft.Azure.Devices;
    
  5. Do třídy Program přidejte následující pole. {iot hub connection string} Nahraďte zástupnou hodnotu připojovací řetězec IoT Hubu, kterou jste zkopírovali dříve v připojovací řetězec Get the IoT Hub:

    static ServiceClient serviceClient;
    static string connectionString = "{iot hub connection string}";
    
  6. Do třídy Program přidejte následující metodu.

    private async static void ReceiveFileUploadNotificationAsync()
    {
        var notificationReceiver = serviceClient.GetFileNotificationReceiver();
        Console.WriteLine("\nReceiving file upload notification from service");
        while (true)
        {
            var fileUploadNotification = await notificationReceiver.ReceiveAsync();
            if (fileUploadNotification == null) continue;
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("Received file upload notification: {0}", 
              string.Join(", ", fileUploadNotification.BlobName));
            Console.ResetColor();
            await notificationReceiver.CompleteAsync(fileUploadNotification);
        }
    }
    

    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í.

  7. Nakonec nahraďte řádky v metodě Main následujícím kódem:

    Console.WriteLine("Receive file upload notifications\n");
    serviceClient = ServiceClient.CreateFromConnectionString(connectionString);
    ReceiveFileUploadNotificationAsync();
    Console.WriteLine("Press Enter to exit\n");
    Console.ReadLine();
    

Spuštění aplikací

Teď jste připraveni spustit aplikace.

  1. Nejprve spusťte aplikaci služby pro příjem oznámení o nahrání souboru z centra IoT. Na příkazovém řádku ve složce ReadFileUploadNotification spusťte následující příkazy:

    dotnet restore
    dotnet run
    

    Aplikace se spustí a čeká na oznámení o nahrání souboru ze služby IoT Hub:

    Receive file upload notifications
    
    
    Receiving file upload notification from service
    Press Enter to exit
    
  2. Potom spusťte aplikaci zařízení a nahrajte soubor do úložiště Azure. Otevřete nový příkazový řádek a změňte složky na azure-iot-sdk-csharp\iothub\device\samples\getting started\FileUploadSample ve složce, do které jste rozbalili sadu Azure IoT C# SDK. Spusťte následující příkazy. {Your device connection string} Zástupnou hodnotu v druhém příkazu nahraďte připojovací řetězec zařízení, které jste viděli při registraci zařízení v IoT Hubu.

    dotnet restore
    dotnet run --p "{Your device connection string}"
    

    Po dokončení nahrávání se z aplikace zařízení zobrazí následující výstup:

      Uploading file TestPayload.txt
      Getting SAS URI from IoT Hub to use when uploading the file...
      Successfully got SAS URI (https://contosostorage.blob.core.windows.net/contosocontainer/MyDevice%2FTestPayload.txt?sv=2018-03-28&sr=b&sig=x0G1Baf%2BAjR%2BTg3nW34zDNKs07p6dLzkxvZ3ZSmjIhw%3D&se=2021-05-04T16%3A40%3A52Z&sp=rw) from IoT Hub
      Uploading file TestPayload.txt using the Azure Storage SDK and the retrieved SAS URI for authentication
      Successfully uploaded the file to Azure Storage
      Notified IoT Hub that the file upload succeeded and that the SAS URI can be freed.
      Time to upload file: 00:00:01.5077954.
      Done.
    
  3. Všimněte si, že aplikace služby ukazuje, že obdržela oznámení o nahrání souboru:

    Receive file upload notifications
    
    
    Receiving file upload notification from service
    Press Enter to exit
    
    Received file upload notification: myDeviceId/TestPayload.txt
    

Ověření nahrání souboru

Na portálu můžete zobrazit nahraný soubor v kontejneru úložiště, který jste nakonfigurovali:

  1. Na webu Azure Portal přejděte ke svému účtu úložiště.

  2. V levém podokně účtu úložiště vyberte Kontejnery.

  3. Vyberte kontejner, do který jste soubor nahráli.

  4. Vyberte složku pojmenovanou po zařízení.

  5. Vyberte objekt blob, do kterého jste soubor nahráli. V tomto článku se jedná o objekt blob s názvem TestPayload.txt.

    Snímek obrazovky s výběrem nahraného souboru na webu Azure Portal

  6. Zobrazte vlastnosti objektu blob na stránce, která se otevře. Soubor si můžete stáhnout a zobrazit jeho obsah místně.

Další kroky

V tomto článku jste se dozvěděli, jak pomocí funkce pro nahrání souborů ve službě IoT Hub zjednodušit nahrávání souborů ze zařízení. Tuto funkci můžete dál zkoumat pomocí následujících článků: