Delen via


Bestanden uploaden van uw apparaat naar de cloud met Azure IoT Hub (Python)

In dit artikel wordt gedemonstreert hoe u mogelijkheden voor het uploaden van bestanden van IoT Hub een bestand uploadt naar Azure Blob Storage met behulp van Python.

De quickstart voor het verzenden van telemetrie van een apparaat naar een IoT Hub en cloud-naar-apparaat-berichten verzenden met IoT Hub-artikelen tonen de basisfunctionaliteit voor apparaat-naar-cloud- en cloud-naar-apparaatberichten van IoT Hub. In de zelfstudie Berichtroutering configureren met IoT Hub ziet u een manier om apparaat-naar-cloud-berichten betrouwbaar op te slaan in Microsoft Azure Blob Storage. In sommige scenario's kunt u echter niet eenvoudig de gegevens toewijzen die uw apparaten verzenden naar de relatief kleine apparaat-naar-cloud-berichten die IoT Hub accepteert. Voorbeeld:

  • Video's
  • Grote bestanden die afbeeldingen bevatten
  • Voorbeeld van trillingsgegevens met hoge frequentie
  • Een vorm van vooraf verwerkte gegevens.

Deze bestanden worden doorgaans in batches verwerkt in de cloud, met behulp van hulpprogramma's zoals Azure Data Factory of de Hadoop-stack . Wanneer u bestanden van een apparaat wilt uploaden, kunt u nog steeds de beveiliging en betrouwbaarheid van IoT Hub gebruiken. In dit artikel wordt uitgelegd hoe u dit doet.

Aan het einde van dit artikel voert u de Python-console-app uit FileUpload.py, waarmee een bestand naar de opslag wordt geüpload met behulp van de Python Device SDK.

Notitie

IoT Hub ondersteunt veel apparaatplatformen en -talen (waaronder C, Java, Python en JavaScript) via Azure IoT-apparaat-SDK's. Raadpleeg het Azure IoT Developer Center voor meer informatie over het verbinden van uw apparaat met Azure IoT Hub.

Belangrijk

De functionaliteit voor het uploaden van bestanden op apparaten die X.509-verificatie (CA) gebruiken, is in openbare preview en de preview-modus moet zijn ingeschakeld. Het is algemeen beschikbaar op apparaten die gebruikmaken van X.509-vingerafdrukverificatie of X.509-certificaatattestation met Azure Device Provisioning Service. Zie Ondersteunde X.509-certificaten voor meer informatie over X.509-verificatie met IoT Hub.

Vereisten

  • Een actief Azure-account. (Als u geen account hebt, kunt u binnen een paar minuten een gratis account maken.)

  • Een IoT-hub. Maak er een met de CLI of Azure Portal.

  • Een apparaat dat is geregistreerd in uw IoT-hub. Als u geen apparaat in uw IoT-hub hebt, volgt u de stappen in Een apparaat registreren.

  • Python versie 3.7 of hoger wordt aanbevolen. Zorg ervoor dat u de 32-bits of 64-bits installatie gebruikt, zoals vereist door uw configuratie. Zorg ervoor dat u Python toevoegt aan uw platformspecifieke omgevingsvariabele als u hierom wordt gevraagd tijdens de installatie.

  • Poort 8883 moet zijn geopend in uw firewall. Het apparaatvoorbeeld in dit artikel maakt gebruik van het MQTT-protocol, dat via poort 8883 communiceert. Deze poort is in sommige netwerkomgevingen van bedrijven en onderwijsinstellingen mogelijk geblokkeerd. Zie Verbinding maken met IoT Hub (MQTT) voor meer informatie en manieren om dit probleem te omzeilen.

Een Azure Storage-account koppelen aan IoT Hub

Als u bestanden vanaf een apparaat wilt uploaden, moet u een Azure Storage-account en een Azure Blob Storage-container hebben die is gekoppeld aan uw IoT-hub. Zodra u het opslagaccount en de container aan uw IoT-hub hebt gekoppeld, kan uw IoT-hub de elementen van een SAS-URI opgeven wanneer dit door een apparaat wordt aangevraagd. Het apparaat kan deze elementen vervolgens gebruiken om de SAS-URI te maken die wordt gebruikt om te verifiëren met Azure Storage en bestanden te uploaden naar de blobcontainer.

Een Azure Storage-account koppelen aan uw IoT-hub:

  1. Selecteer onder Hub-instellingen het uploaden van bestanden in het linkerdeelvenster van uw IoT-hub.

    Schermopname met de instellingen voor het uploaden van bestanden in de portal.

  2. Selecteer Azure Storage-container in het deelvenster Bestand uploaden. Voor dit artikel wordt aanbevolen dat uw opslagaccount en IoT Hub zich in dezelfde regio bevinden.

    • Als u al een opslagaccount hebt dat u wilt gebruiken, selecteert u dit in de lijst.

    • Als u een nieuw opslagaccount wilt maken, selecteert u +Storage-account. Geef een naam op voor het opslagaccount en zorg ervoor dat de locatie is ingesteld op dezelfde regio als uw IoT-hub en selecteer VERVOLGENS OK. Het nieuwe account wordt gemaakt in dezelfde resourcegroep als uw IoT-hub. Wanneer de implementatie is voltooid, selecteert u het opslagaccount in de lijst.

    Nadat u het opslagaccount hebt geselecteerd, wordt het deelvenster Containers geopend.

  3. Selecteer in het deelvenster Containers de blobcontainer.

    • Als u al een blobcontainer hebt die u wilt gebruiken, selecteert u deze in de lijst en klikt u op Selecteren.

    • Als u een nieuwe blobcontainer wilt maken, selecteert u + Container. Geef een naam op voor de nieuwe container. Voor de doeleinden van dit artikel kunt u alle andere velden op hun standaardwaarde laten staan. Selecteer Maken. Wanneer de implementatie is voltooid, selecteert u de container in de lijst en klikt u op Selecteren.

  4. Controleer of bestandsmeldingen zijn ingesteld op Aan in het deelvenster Bestand uploaden. U kunt alle andere instellingen op de standaardinstellingen laten staan. Selecteer Opslaan en wacht totdat de instellingen zijn voltooid voordat u verdergaat met de volgende sectie.

    Schermopname met instellingen voor het uploaden van bestanden bevestigen in de portal.

Zie Een opslagaccount maken voor gedetailleerdere instructies voor het maken van een Azure Storage-account. Zie Bestandsuploads configureren met behulp van Azure Portal voor gedetailleerde instructies over het koppelen van een opslagaccount en blobcontainer aan een IoT-hub.

Een bestand uploaden vanuit een apparaat-app

In deze sectie maakt u de apparaat-app om een bestand te uploaden naar IoT Hub.

  1. Voer bij de opdrachtprompt de volgende opdracht uit om het pakket azure-iot-device te installeren. U gebruikt dit pakket om het uploaden van bestanden te coördineren met uw IoT-hub.

    pip install azure-iot-device
    
  2. Voer bij de opdrachtprompt de volgende opdracht uit om het pakket azure.storage.blob te installeren. U gebruikt dit pakket om het uploaden van het bestand uit te voeren.

    pip install azure.storage.blob
    
  3. Maak een testbestand dat u gaat uploaden naar blobopslag.

  4. Maak met behulp van een teksteditor een FileUpload.py-bestand in uw werkmap.

  5. Voeg de volgende import instructies en variabelen toe aan het begin van het FileUpload.py-bestand .

    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. Vervang in uw bestand door [Device Connection String] de verbindingsreeks van uw IoT Hub-apparaat. Vervang [Full path to local file] door het pad naar het testbestand dat u hebt gemaakt of een bestand op uw apparaat dat u wilt uploaden.

  7. Maak een functie om het bestand te uploaden naar blobopslag:

    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)
    

    Met deze functie wordt de blob_info structuur geparseerd die erin is doorgegeven om een URL te maken die wordt gebruikt om een azure.storage.blob.BlobClient te initialiseren. Vervolgens wordt uw bestand geüpload naar Azure Blob Storage met behulp van deze client.

  8. Voeg de volgende code toe om de client te verbinden en het bestand te uploaden:

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

    Met deze code maakt u een IoTHubDeviceClient en gebruikt u de volgende API's voor het beheren van het uploaden van bestanden met uw IoT-hub:

    • get_storage_info_for_blob gegevens ophaalt uit uw IoT-hub over het gekoppelde opslagaccount dat u eerder hebt gemaakt. Deze informatie omvat de hostnaam, containernaam, blobnaam en een SAS-token. De opslaggegevens worden doorgegeven aan de store_blob-functie (gemaakt in de vorige stap), zodat de BlobClient in die functie kan worden geverifieerd met Azure Storage. De methode get_storage_info_for_blob retourneert ook een correlation_id, die wordt gebruikt in de methode notify_blob_upload_status . De correlation_id is de manier waarop IoT Hub markeert aan welke blob u werkt.

    • notify_blob_upload_status ioT Hub op de hoogte stelt van de status van uw blobopslagbewerking. U geeft deze door aan de correlation_id die u hebt verkregen door de get_storage_info_for_blob methode. Het wordt door IoT Hub gebruikt om een service op de hoogte te stellen die mogelijk luistert naar een melding over de status van de bestandsuploadtaak.

  9. Sla het FileUpload.py-bestand op en sluit het.

De toepassing uitvoeren

Nu bent u klaar om de toepassing uit te voeren.

  1. Voer bij een opdrachtprompt in uw werkmap de volgende opdracht uit:

    python FileUpload.py
    
  2. In de volgende schermopname ziet u de uitvoer van de FileUpload-app :

    Schermopname van uitvoer van het uitvoeren van de FileUpload-app.

  3. U kunt de portal gebruiken om het geüploade bestand weer te geven in de opslagcontainer die u hebt geconfigureerd:

    Schermopname van de container in Azure Portal met het geüploade bestand.

Volgende stappen

In dit artikel hebt u geleerd hoe u de functie voor het uploaden van bestanden van IoT Hub gebruikt om het uploaden van bestanden vanaf apparaten te vereenvoudigen. U kunt deze functie blijven verkennen met de volgende artikelen:

Meer informatie over Azure Blob Storage vindt u via de volgende koppelingen: