Fájlok feltöltése az eszközről a felhőbe az Azure IoT Hub (.NET) használatával

Ez a cikk bemutatja, hogyan tölthet fel fájlokat az IoT Hub az Azure Blob Storage-ba egy Azure IoT .NET-eszköz és szolgáltatás SDK használatával.

Az eszközről az IoT Hubra irányuló telemetriai adatok küldése rövid útmutatója és a felhőből az eszközre irányuló üzenetek küldése az IoT Hubbal című cikk az IoT Hub alapvető eszközről felhőbe és felhőről eszközre üzenetkezelési funkcióját mutatja be. Az Üzenet-útválasztás konfigurálása az IoT Hub használatával című cikk bemutatja, hogyan tárolhatja megbízhatóan az eszközről a felhőbe irányuló üzeneteket a Microsoft Azure Blob Storage-ban. Bizonyos esetekben azonban nem lehet egyszerűen leképezni azokat az adatokat, amelyeket az eszközök az IoT Hub által elfogadott, viszonylag kis méretű, eszközről felhőbe irányuló üzenetekbe küldenek. Példa:

  • Videók
  • Képeket tartalmazó nagyméretű fájlok
  • Nagy gyakorisággal mintavételezett rezgési adatok
  • Az előre feldolgozott adatok valamilyen formája

Ezeket a fájlokat általában a felhőben, olyan eszközökkel dolgozzák fel, mint az Azure Data Factory vagy a Hadoop-verem . Ha fájlokat kell feltöltenie egy eszközről, továbbra is használhatja az IoT Hub biztonságát és megbízhatóságát. Ez a cikk bemutatja, hogyan.

A cikk végén két .NET-konzolalkalmazást futtat:

  • FileUploadSample. Ez az eszközalkalmazás feltölt egy fájlt a tárolóba az IoT Hub által biztosított SAS URI használatával. Ez a minta az előfeltételekben letöltött Azure IoT C# SDK-adattárból származik.

  • ReadFileUploadNotification. Ez a szolgáltatásalkalmazás fájlfeltöltési értesítéseket fogad az IoT Hubról. Ezt az alkalmazást ön hozza létre.

Feljegyzés

Az IoT Hub számos eszközplatformot és nyelvet (például C, Java, Python és JavaScript) támogat az Azure IoT-eszköz SDK-kkal. Az eszköz Azure IoT Hubhoz való csatlakoztatásáról az Azure IoT Developer Centerben olvashat.

Fontos

Az X.509 hitelesítésszolgáltatói (CA) hitelesítést használó eszközökön a fájlfeltöltési funkció nyilvános előzetes verzióban érhető el, és engedélyezni kell az előnézeti módot. Általánosan elérhető x.509 ujjlenyomat-hitelesítést vagy X.509-tanúsítványigazolást használó eszközökön az Azure Device Provisioning Service-ben. Az IoT Hub x.509-hitelesítésével kapcsolatos további információkért lásd a támogatott X.509-tanúsítványokat.

Előfeltételek

  • Egy IoT Hub. Hozzon létre egyet a parancssori felülettel vagy az Azure Portallal.

  • Regisztrált eszköz. Regisztráljon egyet az Azure Portalon.

  • A cikkben futtatott mintaalkalmazások a C# és a .NET Core használatával vannak megírva.

    Töltse le a .NET Core SDK-t több platformhoz a .NET-ből.

    Ellenőrizze a .NET Core SDK aktuális verzióját a fejlesztői gépen az alábbi paranccsal:

    dotnet --version
    
  • Töltse le az Azure IoT C# SDK-t a letöltési mintából, és bontsa ki a ZIP-archívumot.

  • A 8883-as portnak nyitva kell lennie a tűzfalon. A cikkben szereplő minta MQTT protokollt használ, amely a 8883-es porton keresztül kommunikál. Ez a port néhány vállalati és oktatási hálózati környezetben blokkolható. További információkért és a probléma megoldásának módjaiért tekintse meg az IoT Hubra (MQTT) való Csatlakozás.

Azure Storage-fiók társítása az IoT Hubhoz

Ha fájlokat szeretne feltölteni egy eszközről, rendelkeznie kell az IoT Hubhoz társított Azure Storage-fiókkal és Azure Blob Storage-tárolóval. Miután hozzárendelte a tárfiókot és a tárolót az IoT Hubhoz, az IoT Hub képes biztosítani az SAS URI elemeit, amikor egy eszköz kéri. Az eszköz ezután ezeket az elemeket használhatja az Azure Storage-hitelesítéshez használt SAS URI létrehozásához és fájlok blobtárolóba való feltöltéséhez.

Azure Storage-fiók társítása az IoT Hubhoz:

  1. A Központi beállítások területen válassza a Fájlfeltöltés lehetőséget az IoT Hub bal oldali paneljén.

    Képernyőfelvétel a portál fájlfeltöltési beállításainak kiválasztásával.

  2. A Fájlfeltöltés panelen válassza az Azure Storage Container lehetőséget. Ebben a cikkben javasoljuk, hogy a tárfiók és az IoT Hub ugyanabban a régióban legyen.

    • Ha már van használni kívánt tárfiókja, jelölje ki a listából.

    • Új tárfiók létrehozásához válassza a +Tárfiók lehetőséget. Adjon nevet a tárfióknak, és győződjön meg arról, hogy a hely az IoT Hubéval azonos régióra van állítva, majd válassza az OK gombot. Az új fiók ugyanabban az erőforráscsoportban jön létre, mint az IoT Hub. Amikor az üzembe helyezés befejeződött, válassza ki a tárfiókot a listából.

    A tárfiók kiválasztása után megnyílik a Tárolók panel.

  3. A Tárolók panelen válassza ki a blobtárolót.

    • Ha már rendelkezik használni kívánt blobtárolóval, jelölje ki a listából, és kattintson a Kiválasztás gombra.

    • Új blobtároló létrehozásához válassza a + Tároló lehetőséget. Adja meg az új tároló nevét. A cikk alkalmazásában az összes többi mezőt az alapértelmezett értéken hagyhatja. Válassza a Létrehozás lehetőséget. Amikor az üzembe helyezés befejeződött, válassza ki a tárolót a listából, és kattintson a Kiválasztás gombra.

  4. A Fájlfeltöltés panelen ellenőrizze, hogy a fájlértesítések be vannak-e kapcsolva. Az összes többi beállítást az alapértelmezett értékükön hagyhatja meg. Válassza a Mentés lehetőséget, és várja meg, amíg a beállítások befejeződnek, mielőtt továbblépne a következő szakaszra.

    Képernyőfelvétel a fájlfeltöltési beállítások megerősítéséről a portálon.

Az Azure Storage-fiók létrehozásával kapcsolatos részletesebb útmutatásért lásd : Tárfiók létrehozása. A tárfiókok és blobtárolók IoT Hubhoz való társítására vonatkozó részletesebb útmutatásért lásd : Fájlfeltöltések konfigurálása az Azure Portal használatával.

Fájl feltöltése eszközalkalmazásból

Ebben a cikkben egy, az eszközalkalmazásként korábban letöltött Azure IoT C# SDK-adattárból származó mintát használ. Az alábbi fájlokat a Visual Studio, a Visual Studio Code vagy egy tetszőleges szövegszerkesztő használatával nyithatja meg.

A minta az azure-iot-sdk-csharp/iothub/device/samples/getting started/FileUploadSample helyen található abban a mappában, ahol az Azure IoT C# SDK-t kinyerte.

Vizsgálja meg a kódot a FileUpLoadSample.cs. Ez a fájl tartalmazza a fő mintalogikát. Az IoT Hub-eszközügyfél létrehozása után a szabványos háromrészes eljárást követi a fájlok eszközről való feltöltéséhez:

  1. A kód meghívja az eszközügyfél GetFileUploadSasUriAsync metódusát, hogy sas URI-t kapjon az IoT Hubról:

    var fileUploadSasUriRequest = new FileUploadSasUriRequest
    {
        BlobName = fileName
    };
    
    // Lines removed for clarity
    
    FileUploadSasUriResponse sasUri = await _deviceClient.GetFileUploadSasUriAsync(fileUploadSasUriRequest);
    Uri uploadUri = sasUri.GetBlobUri();
    
  2. A kód az SAS URI használatával tölti fel a fájlt az Azure Storage-ba. Ebben a mintában az SAS URI használatával hoz létre egy Azure Storage-blokkblob-ügyfelet, és feltölti a fájlt:

    var blockBlobClient = new BlockBlobClient(uploadUri);
    await blockBlobClient.UploadAsync(fileStreamSource, new BlobUploadOptions());
    
  3. A kód értesíti az IoT Hubot, hogy befejezte a feltöltést. Ez tájékoztatja az IoT Hubot, hogy a feltöltéshez (SAS URI) társított erőforrásokat is felszabadíthatja. Ha a fájlfeltöltési értesítések engedélyezve vannak, az IoT Hub értesítést küld a háttérszolgáltatásoknak.

    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);
    

Ha megvizsgálja a parameter.cs fájlt, a következőt látja:

  • A mintához meg kell adnia egy p paramétert, amely egy eszköz kapcsolati sztring.

  • Az eszközminta alapértelmezés szerint az MQTT protokollt használja az IoT Hubbal való kommunikációhoz. A t paraméter használatával módosíthatja ezt az átviteli protokollt. Ettől függetlenül az Azure Blob-ügyfél mindig HTTPS protokollt használ az Azure Storage fájl feltöltéséhez.

Az IoT Hub kapcsolati sztring lekérése

Ebben a cikkben egy háttérszolgáltatást hoz létre a fájlfeltöltési értesítési üzenetek fogadásához az IoT Hubról. A fájlfeltöltési értesítési üzenetek fogadásához a szolgáltatásnak a szolgáltatás csatlakoztatási engedélyére van szüksége. Alapértelmezés szerint minden IoT Hub egy megosztott hozzáférési szabályzattal jön létre, amely ezt az engedélyt biztosítja.

Az IoT Hub kapcsolati sztring szolgáltatásszabályzathoz való lekéréséhez kövesse az alábbi lépéseket:

  1. Az Azure Portalon válassza ki az Erőforráscsoportokat. Válassza ki azt az erőforráscsoportot, ahol a központ található, majd válassza ki a központot az erőforrások listájából.

  2. Az IoT Hub bal oldali ablaktábláján válassza a Megosztott hozzáférési szabályzatok lehetőséget.

  3. A szabályzatok listájában válassza ki a szolgáltatásházirendet.

  4. Másolja ki az elsődleges kapcsolati sztring, és mentse az értéket.

Képernyőkép arról, hogyan kérhető le a kapcsolati sztring az IoT Hubról az Azure Portalon.

További információ az IoT Hub megosztott hozzáférési szabályzatairól és engedélyeiről: Hozzáférés-vezérlés és engedélyek.

Fájlfeltöltési értesítés fogadása

Ebben a szakaszban egy C#-konzolalkalmazást hoz létre, amely fájlfeltöltési értesítési üzeneteket fogad az IoT Hubról.

  1. Nyisson meg egy parancsablakot, és lépjen arra a mappára, ahol létre szeretné hozni a projektet. Hozzon létre egy ReadFileUploadNotifications nevű mappát, és módosítsa a könyvtárakat erre a mappára.

    mkdir ReadFileUploadNotification
    cd ReadFileUploadNotification
    
  2. Futtassa a következő parancsot egy C#-konzolprojekt létrehozásához. A parancs futtatása után a mappa egy Program.cs fájlt és egy ReadFileUploadNotification.csproj fájlt tartalmaz.

    dotnet new console --language c#
    
  3. Futtassa a következő parancsot a Microsoft.Azure.Devices csomag projektfájlhoz való hozzáadásához. Ez a csomag az Azure IoT .NET szolgáltatás SDK.

    dotnet add package Microsoft.Azure.Devices
    
  4. Nyissa meg a Program.cs fájlt, és adja hozzá a következő utasítást a fájl tetején:

    using Microsoft.Azure.Devices;
    
  5. Adja hozzá a Program osztályhoz a következő mezőket: Cserélje le a {iot hub connection string} helyőrző értékét az IoT Hub kapcsolati sztring, amelyet korábban az IoT Hub lekérése kapcsolati sztring:

    static ServiceClient serviceClient;
    static string connectionString = "{iot hub connection string}";
    
  6. Adja hozzá a Program osztályhoz a következő módszert:

    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);
        }
    }
    

    Vegye figyelembe, hogy ez a fogadási minta ugyanaz, mint a felhőből az eszközre irányuló üzenetek fogadásához az eszközalkalmazásból.

  7. Végül cserélje le a Main metódus sorait a következőre:

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

Az alkalmazások futtatása

Most már készen áll az alkalmazások futtatására.

  1. Először futtassa a szolgáltatásalkalmazást a fájlfeltöltési értesítések fogadásához az IoT Hubról. A ReadFileUploadNotification mappában található parancssorban futtassa a következő parancsokat:

    dotnet restore
    dotnet run
    

    Az alkalmazás elindul, és vár egy fájlfeltöltési értesítésre az IoT Hubról:

    Receive file upload notifications
    
    
    Receiving file upload notification from service
    Press Enter to exit
    
  2. Ezután futtassa az eszközalkalmazást a fájl Azure Storage-ba való feltöltéséhez. Nyisson meg egy új parancssort, és módosítsa a mappákat az azure-iot-sdk-csharp\iothub\device\samples\getting started\FileUploadSample mappára az Azure IoT C# SDK kibontásakor. Futtassa az alábbi parancsokat. Cserélje le a {Your device connection string} második parancs helyőrző értékét arra az eszközre, kapcsolati sztring, amikor regisztrált egy eszközt az IoT Hubon.

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

    A következő kimenet az eszközalkalmazásból származik a feltöltés befejezése után:

      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. Figyelje meg, hogy a szolgáltatásalkalmazás azt mutatja, hogy megkapta a fájlfeltöltési értesítést:

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

A fájlfeltöltés ellenőrzése

A portálon megtekintheti a feltöltött fájlt a konfigurált tárolóban:

  1. Lépjen a tárfiókjára az Azure Portalon.

  2. A tárfiók bal oldali ablaktábláján válassza a Tárolók lehetőséget.

  3. Válassza ki azt a tárolót, amelybe feltöltötte a fájlt.

  4. Válassza ki az eszközről elnevezett mappát.

  5. Válassza ki azt a blobot, amelybe feltöltötte a fájlt. Ebben a cikkben ez a TestPayload.txt nevű blob.

    Képernyőkép a feltöltött fájl kiválasztásáról az Azure Portalon.

  6. A megnyíló lapon megtekintheti a blobtulajdonságokat. A Letöltés lehetőséget választva letöltheti a fájlt, és megtekintheti annak tartalmát helyileg.

Következő lépések

Ebben a cikkben megismerhette, hogyan egyszerűsítheti az eszközökről történő fájlfeltöltést az IoT Hub fájlfeltöltési funkciójával. Ezt a funkciót a következő cikkekkel folytathatja: