Mengunggah file dari perangkat Anda ke cloud dengan Azure IoT Hub (Python)

Artikel ini memperlihatkan cara mengunggah file kemampuan pengunggahan file IoT Hub ke penyimpanan Azure blob, menggunakan Python.

Mulai cepat Mengirim telemetri dari perangkat ke hub IoT dan artikel Mengirim pesan cloud-ke-perangkat dengan IoT Hub menunjukkan fungsionalitas dasar olahpesan perangkat-ke-cloud dan cloud-ke-perangkat IoT Hub. Tutorial Mengonfigurasi Perutean Pesan dengan IoT Hub menunjukkan cara untuk menyimpan pesan perangkat ke cloud secara andal dalam penyimpanan blob Microsoft Azure. Namun, dalam beberapa skenario Anda tidak dapat dengan mudah memetakan data yang dikirim perangkat Anda ke pesan perangkat ke cloud yang relatif kecil yang diterima IoT Hub. Contohnya:

  • Video
  • File besar yang berisi gambar
  • Data getaran yang diambil sampelnya pada frekuensi tinggi
  • Beberapa formulir data yang telah diproses sebelumnya.

File tersebut biasanya diproses secara batch di cloud menggunakan alat seperti Azure Data Factory atau tumpukan Hadoop. Saat Anda perlu mengunggah file dari perangkat, Anda masih dapat menggunakan keamanan dan keandalan IoT Hub. Artikel ini menunjukkan cara.

Di akhir artikel ini, Anda menjalankan aplikasi konsol Python FileUpload.py, yang mengunggah file ke penyimpanan menggunakan Python Device SDK.

Catatan

IoT Hub mendukung banyak platform dan bahasa perangkat, (termasuk C, Java, Python, dan JavaScript) melalui Azure IoT device SDK. Lihat Azure IoT Developer Center untuk mempelajari cara menghubungkan perangkat Anda ke Azure IoT Hub.

Penting

Fungsionalitas pengunggahan file pada perangkat yang menggunakan autentikasi otoritas sertifikat (OS) X.509 berada dalam pratinjau publik, dan mode pratinjau harus diaktifkan. Ini umumnya tersedia di perangkat yang menggunakan autentikasi thumbprint X.509 atau pengesahan sertifikat X.509 dengan Layanan Provisi Perangkat Azure. Untuk mempelajari selengkapnya tentang autentikasi X.509 dengan IoT Hub, lihat Sertifikat X.509 yang didukung.

Prasyarat

  • Akun Azure aktif. (Jika Anda tidak memiliki akun, Anda dapat membuat akun gratis hanya dalam beberapa menit.)

  • Hub IoT. Membuat satu dengan CLI atau portal Azure.

  • Perangkat yang terdaftar. Daftarkan perangkat di portal Azure.

  • Python versi 3.7 atau yang lebih baru disarankan. Pastikan untuk menggunakan penginstalan 32-bit atau 64-bit sesuai kebutuhan penyiapan Anda. Saat diminta selama instalasi, pastikan untuk menambahkan Python ke variabel lingkungan khusus platform Anda.

  • Port 8883 harus terbuka di firewall Anda. Sampel perangkat dalam artikel ini menggunakan protokol MQTT, yang berkomunikasi melalui port 8883. Port ini dapat diblokir di beberapa lingkungan jaringan perusahaan dan pendidikan. Untuk informasi selengkapnya dan cara mengatasi masalah ini, lihat Menyambungkan ke Azure IoT Hub (MQTT).

Mengaitkan akun Microsoft Azure Storage dengan IoT Hub

Untuk mengunggah file dari perangkat, Anda harus memiliki akun Azure Storage dan kontainer Azure Blob Storage yang terkait dengan hub IoT Anda. Setelah Anda mengaitkan akun penyimpanan dan kontainer dengan hub IoT, hub IoT Anda dapat menyediakan elemen URI SAS saat diminta oleh perangkat. Perangkat kemudian dapat menggunakan elemen ini untuk membangun URI SAS yang digunakan untuk melakukan autentikasi dengan Azure Storage dan mengunggah file ke kontainer blob.

Untuk mengaitkan akun Azure Storage dengan hub IoT Anda:

  1. Di bagian Pengaturan Hub, pilih Unggah file di panel kiri IoT hub Anda.

    Cuplikan layar yang menunjukkan pilih pengaturan pengunggahan file tertentu dari portal.

  2. Di panel Unggahan file, pilih Kontainer Azure Storage. Untuk artikel ini, sebaiknya akun penyimpanan dan IoT Hub Anda berada di wilayah yang sama.

    • Jika Anda sudah memiliki akun penyimpanan yang ingin digunakan, pilih dari daftar.

    • Pilih +Akun Storage untuk membuat akun penyimpanan. Masukkan nama akun penyimpanan dan pastikan Lokasi diatur ke wilayah yang sama dengan hub IoT Anda, lalu pilih OK. Akun baru dibuat dalam grup sumber daya yang sama dengan hub IoT Anda. Saat penyebaran selesai, pilih akun penyimpanan dari daftar.

    Setelah akun penyimpanan dipilih, panel Kontainer akan terbuka.

  3. Di halaman Kontainer, pilih kontainer blob.

    • Jika Anda sudah memiliki kontainer blob yang ingin digunakan, pilih dari daftar dan klik Pilih.

    • Pilih + Kontainer untuk membuat kontainer blob baru. Masukkan nama kontainer baru. Untuk tujuan artikel ini, Anda dapat membiarkan semua bidang lainnya dengan opsi default-nya. Pilih Buat. Setelah penyebaran selesai, pilih kontainer dari daftar dan klik Pilih.

  4. Kembali ke panel Unggahan file, pastikan bahwa pemberitahuan file diatur ke Aktif. Anda dapat membiarkan pengaturan lainnya dengan opsi default-nya. Pilih Simpan dan tunggu hingga pengaturan selesai sebelum berpindah ke bagian selanjutnya.

    Cuplikan layar yang menunjukkan konfirmasi pengaturan pengunggahan file di portal.

Untuk petunjuk yang lebih mendetail tentang cara membuat akun Azure Storage, lihat Membuat akun penyimpanan. Untuk petunjuk selengkapnya tentang cara mengaitkan akun penyimpanan dan kontainer blob dengan hub IoT, lihat Mengonfigurasi unggahan file menggunakan portal Azure.

Mengunggah file dari aplikasi perangkat

Di bagian ini, Anda membuat aplikasi perangkat untuk mengunggah file ke hub IoT.

  1. Pada perintah Anda, jalankan perintah berikut untuk menginstal paket azure-iot-device. Anda menggunakan paket ini untuk mengoordinasikan unggahan file dengan hub IoT Anda.

    pip install azure-iot-device
    
  2. Pada perintah Anda, jalankan perintah berikut untuk menginstal paket azure.storage.blob. Anda menggunakan paket ini untuk melakukan unggahan file.

    pip install azure.storage.blob
    
  3. Buat file uji yang akan Anda unggah ke penyimpanan blob.

  4. Menggunakan editor teks, buat file FileUpload.py di folder kerja Anda.

  5. Tambahkan pernyataan import dan variabel berikut di awal file FileUpload.py.

    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. Dalam file Anda, ganti [Device Connection String] dengan string koneksi perangkat hub IoT Anda. Ganti [Full path to local file] dengan jalur ke file uji yang Anda buat atau file apa pun di perangkat yang ingin Anda unggah.

  7. Buat fungsi untuk mengunggah file ke penyimpanan 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)
    

    Fungsi ini mengurai struktur blob_info yang diteruskan ke dalamnya untuk membuat URL yang digunakan untuk menginisialisasi azure.storage.blob.BlobClient. Fungsi ini selanjutnya mengunggah file Anda ke penyimpanan Azure blob menggunakan klien ini.

  8. Tambahkan kode berikut untuk menghubungkan klien dan mengunggah file:

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

    Kode ini membuat IoTHubDeviceClient dan menggunakan API berikut untuk mengelola unggahan file dengan hub IoT Anda:

    • get_storage_info_for_blob mendapatkan informasi dari hub IoT Anda tentang Akun Penyimpanan tertaut yang Anda buat sebelumnya. Informasi ini mencakup nama host, nama kontainer, nama blob, dan token SAS. Info penyimpanan diteruskan ke fungsi store_blob (dibuat pada langkah sebelumnya), sehingga BlobClient dalam fungsi tersebut dapat mengautentikasi dengan penyimpanan Azure. Metode get_storage_info_for_blob juga mengembalikan correlation_id, yang digunakan dalam metode notify_blob_upload_status ini. correlation_id adalah cara IoT Hub untuk menandai blob mana yang sedang Anda kerjakan.

    • notify_blob_upload_status memberi tahu IoT Hub tentang status operasi penyimpanan blob Anda. Anda memberikannya correlation_id yang diperoleh dengan metode get_storage_info_for_blob. Ini digunakan oleh IoT Hub untuk memberi tahu layanan apa pun yang mungkin mendengarkan pemberitahuan tentang status tugas unggahan file.

  9. Simpan dan tutup file FileUpload.py.

Jalankan aplikasi

Sekarang Anda siap untuk menjalankan aplikasi.

  1. Pada perintah di folder kerja Anda, jalankan perintah berikut:

    python FileUpload.py
    
  2. Cuplikan layar berikut menunjukkan output dari aplikasi FileUpload:

    Cuplikan layar yang menunjukkan keluaran dari menjalankan aplikasi FileUpload.

  3. Anda dapat menggunakan portal untuk menampilkan file yang diunggah di kontainer penyimpanan yang Anda konfigurasikan:

    Cuplikan layar kontainer di portal Microsoft Azure menunjukkan file yang diunggah.

Langkah berikutnya

Dalam artikel ini, Anda mempelajari cara menggunakan fitur pengunggahan file IoT Hub untuk menyederhanakan pengunggahan file dari perangkat. Anda dapat terus menjelajahi fitur ini dengan artikel berikut:

Pelajari selengkapnya tentang Azure Blob Storage dengan tautan berikut ini: