Sdílet prostřednictvím


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

Tento článek ukazuje, jak pomocí Pythonu nahrát možnosti nahrávání souborů služby IoT Hub do úložiště objektů blob v Azure.

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í ve službě IoT Hub. Kurz 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 v úložišti objektů blob Microsoft Azure. 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ějaká forma předem zpracovaný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 konzolovou aplikaci Pythonu FileUpload.py, která nahraje soubor do úložiště pomocí sady Python Device SDK.

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

  • Aktivní účet Azure (Pokud účet nemáte, můžete si během několika minut vytvořit bezplatný účet.)

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

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

  • Doporučuje se Python verze 3.7 nebo novější . Ujistěte se, že používáte 32bitovou, nebo 64bitovou instalaci podle požadavků vašeho nastavení. Po zobrazení výzvy v průběhu instalace nezapomeňte přidat Python do proměnné prostředí pro konkrétní platformu.

  • Port 8883 by měl být otevřený v bráně firewall. 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).

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 této části vytvoříte aplikaci zařízení pro nahrání souboru do ioT Hubu.

  1. Na příkazovém řádku spusťte následující příkaz a nainstalujte balíček azure-iot-device . Tento balíček použijete ke koordinaci nahrávání souborů s centrem IoT.

    pip install azure-iot-device
    
  2. Na příkazovém řádku spusťte následující příkaz a nainstalujte balíček azure.storage.blob . Tento balíček použijete k nahrání souboru.

    pip install azure.storage.blob
    
  3. Vytvořte testovací soubor, který nahrajete do úložiště objektů blob.

  4. Pomocí textového editoru vytvořte ve své pracovní složce soubor FileUpload.py .

  5. Na začátek souboru FileUpload.py přidejte následující import příkazy a proměnné.

    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. V souboru nahraďte [Device Connection String] připojovací řetězec vašeho zařízení IoT Hub. Nahraďte [Full path to local file] cestou k testovacímu souboru, který jste vytvořili, nebo libovolným souborem na zařízení, které chcete nahrát.

  7. Vytvořte funkci pro nahrání souboru do úložiště objektů blob:

    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)
    

    Tato funkce parsuje blob_info strukturu předanou do ní a vytvoří adresu URL, kterou používá k inicializaci azure.storage.blob.BlobClient. Pak soubor nahraje do úložiště objektů blob v Azure pomocí tohoto klienta.

  8. Přidejte následující kód pro připojení klienta a nahrajte soubor:

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

    Tento kód vytvoří IoTHubDeviceClient a použije následující rozhraní API ke správě nahrání souboru ve službě IoT Hub:

    • get_storage_info_for_blob získá informace z vašeho centra IoT o propojeném účtu úložiště, který jste vytvořili dříve. Tyto informace zahrnují název hostitele, název kontejneru, název objektu blob a token SAS. Informace o úložišti se předají funkci store_blob (vytvořenou v předchozím kroku), aby se objekt BlobClient v této funkci mohl ověřit pomocí úložiště Azure. Metoda get_storage_info_for_blob také vrátí correlation_id, který se používá v metodě notify_blob_upload_status . Correlation_id je způsob označení objektu blob, na kterém pracujete.

    • notify_blob_upload_status ioT Hub upozorní na stav vaší operace úložiště objektů blob. Předáte ho correlation_id získané metodou get_storage_info_for_blob . IoT Hub ho používá k upozornění jakékoli služby, která může naslouchat oznámení o stavu úlohy nahrání souboru.

  9. Uložte a zavřete soubor FileUpload.py .

Spuštění aplikace

Teď jste připraveni spustit aplikaci.

  1. Na příkazovém řádku v pracovní složce spusťte následující příkaz:

    python FileUpload.py
    
  2. Následující snímek obrazovky ukazuje výstup z aplikace FileUpload :

    Snímek obrazovky znázorňující výstup spuštění aplikace FileUpload

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

    Snímek obrazovky kontejneru na webu Azure Portal, který zobrazuje nahraný soubor

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ů:

Další informace o službě Azure Blob Storage najdete na následujících odkazech: