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

Ez a cikk bemutatja, hogyan tölthet fel fájlokat az IoT Hub a Python használatával az Azure Blob Storage-ba.

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 IoT Hub-cikkekkel 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 oktatóanyag bemutatja az eszközről a felhőbe irányuló üzenetek megbízható tárolásának módját 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 futtatja a Python-konzolalkalmazást FileUpload.py, amely feltölt egy fájlt a tárolóba a Python Device SDK használatával.

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

  • Aktív Azure-fiók. (Ha nincs fiókja, létrehozhat egy ingyenes fiókot néhány perc alatt.)

  • 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 Python 3.7-es vagy újabb verziója ajánlott. Mindenképp a rendszernek megfelelő, 32 vagy 64 bites telepítést használja. Amikor a rendszer erre kéri, mindenképp adja hozzá a Pythont a platformspecifikus környezeti változóhoz.

  • A 8883-as portnak nyitva kell lennie a tűzfalon. A cikkben szereplő eszközminta 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 szakaszban az eszközalkalmazást hozza létre egy fájl IoT Hubba való feltöltéséhez.

  1. A parancssorban futtassa a következő parancsot az azure-iot-device csomag telepítéséhez. Ezzel a csomaggal koordinálhatja a fájlfeltöltést az IoT Hubbal.

    pip install azure-iot-device
    
  2. A parancssorban futtassa a következő parancsot az azure.storage.blob csomag telepítéséhez. Ezzel a csomagval hajthatja végre a fájlfeltöltést.

    pip install azure.storage.blob
    
  3. Hozzon létre egy tesztfájlt, amelyet feltölt a Blob Storage-ba.

  4. Szövegszerkesztővel hozzon létre egy FileUpload.py fájlt a munkamappában.

  5. Adja hozzá az alábbi import utasításokat és változókat a FileUpload.py fájl elején.

    import os
    from azure.iot.device import IoTHubDeviceClient
    from azure.core.exceptions import AzureError
    from azure.storage.blob import BlobClient
    
    CONNECTION_STRING = "[Device Connection String]"
    PATH_TO_FILE = r"[Full path to local file]"
    
  6. A fájlban cserélje le [Device Connection String] az IoT Hub-eszköz kapcsolati sztring. Cserélje le [Full path to local file] a létrehozott tesztfájl elérési útjára vagy az eszközön a feltölteni kívánt fájlra.

  7. Hozzon létre egy függvényt a fájl blobtárolóba való feltöltéséhez:

    def store_blob(blob_info, file_name):
        try:
            sas_url = "https://{}/{}/{}{}".format(
                blob_info["hostName"],
                blob_info["containerName"],
                blob_info["blobName"],
                blob_info["sasToken"]
            )
    
            print("\nUploading file: {} to Azure Storage as blob: {} in container {}\n".format(file_name, blob_info["blobName"], blob_info["containerName"]))
    
            # Upload the specified file
            with BlobClient.from_blob_url(sas_url) as blob_client:
                with open(file_name, "rb") as f:
                    result = blob_client.upload_blob(f, overwrite=True)
                    return (True, result)
    
        except FileNotFoundError as ex:
            # catch file not found and add an HTTP status code to return in notification to IoT Hub
            ex.status_code = 404
            return (False, ex)
    
        except AzureError as ex:
            # catch Azure errors that might result from the upload operation
            return (False, ex)
    

    Ez a függvény elemzi a neki átadott blob_info struktúrát, és létrehoz egy URL-címet, amelyet az azure.storage.blob.BlobClient inicializálásához használ. Ezután feltölti a fájlt az Azure Blob Storage-ba ezzel az ügyféllel.

  8. Adja hozzá az alábbi kódot az ügyfél csatlakoztatásához és a fájl feltöltéséhez:

    def run_sample(device_client):
        # Connect the client
        device_client.connect()
    
        # Get the storage info for the blob
        blob_name = os.path.basename(PATH_TO_FILE)
        storage_info = device_client.get_storage_info_for_blob(blob_name)
    
        # Upload to blob
        success, result = store_blob(storage_info, PATH_TO_FILE)
    
        if success == True:
            print("Upload succeeded. Result is: \n") 
            print(result)
            print()
    
            device_client.notify_blob_upload_status(
                storage_info["correlationId"], True, 200, "OK: {}".format(PATH_TO_FILE)
            )
    
        else :
            # If the upload was not successful, the result is the exception object
            print("Upload failed. Exception is: \n") 
            print(result)
            print()
    
            device_client.notify_blob_upload_status(
                storage_info["correlationId"], False, result.status_code, str(result)
            )
    
    def main():
        device_client = IoTHubDeviceClient.create_from_connection_string(CONNECTION_STRING)
    
        try:
            print ("IoT Hub file upload sample, press Ctrl-C to exit")
            run_sample(device_client)
        except KeyboardInterrupt:
            print ("IoTHubDeviceClient sample stopped")
        finally:
            # Graceful exit
            device_client.shutdown()
    
    
    if __name__ == "__main__":
        main()
    

    Ez a kód létrehoz egy IoTHubDeviceClientet , és az alábbi API-kkal kezeli a fájlfeltöltést az IoT Hubon:

    • get_storage_info_for_blob adatokat kap az IoT Hubtól a korábban létrehozott társított tárfiókról. Ezek az információk tartalmazzák a gazdagép nevét, a tároló nevét, a blobnevet és egy SAS-jogkivonatot. A tárolási adatokat a rendszer átadja a store_blob függvénynek (amelyet az előző lépésben hoztak létre), így a függvény BlobClientje hitelesíthető az Azure Storage-ral. A get_storage_info_for_blob metódus egy correlation_id is visszaad, amelyet a notify_blob_upload_status metódus használ. A correlation_id az IoT Hub azon módja, hogy megjelölje, melyik blobon dolgozik.

    • notify_blob_upload_status értesíti az IoT Hubot a blobtároló művelet állapotáról. A get_storage_info_for_blob metódus által kapott correlation_id adja át. Az IoT Hub arra használja, hogy értesítést küldjön minden olyan szolgáltatásnak, amely figyelheti a fájlfeltöltési feladat állapotáról szóló értesítést.

  9. Mentse és zárja be a FileUpload.py fájlt.

Az alkalmazás futtatása

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

  1. Futtassa a következő parancsot a munkamappában található parancssorban:

    python FileUpload.py
    
  2. Az alábbi képernyőképen a FileUpload alkalmazás kimenete látható:

    Képernyőkép a FileUpload alkalmazás futtatásának kimenetéről.

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

    Képernyőkép az Azure Portalon található tárolóról, amely a feltöltött fájlt jeleníti meg.

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:

További információ az Azure Blob Storage-ról az alábbi hivatkozásokkal: