Azure IoT Hub (Python) ile cihazınızdan buluta dosya yükleme

Bu makalede, Python kullanarak IoT Hub'ın azure blob depolamaya dosya yükleme özelliklerinin nasıl yüklendiği gösterilmektedir.

Cihazdan IoT hub'ına telemetri gönderme hızlı başlangıcı ve IoT Hub ile buluttan cihaza iletiler gönderme makalesinde IoT Hub'ın cihazdan buluta ve buluttan cihaza mesajlaşma işlevleri gösterilir. IoT Hub ile İleti Yönlendirmeyi Yapılandırma öğreticisi, cihazdan buluta iletileri Microsoft Azure blob depolama alanında güvenilir bir şekilde depolamanın bir yolunu gösterir. Ancak bazı senaryolarda, cihazlarınızın gönderdiği verileri IoT Hub'ın kabul ettikleri görece küçük cihazdan buluta iletilere kolayca eşleyemezsiniz. Örneğin:

  • Videolar
  • Görüntü içeren büyük dosyalar
  • Yüksek frekansta örneklenen titreşim verileri
  • Önceden işlenmiş verilerin bir biçimi.

Bu dosyalar genellikle Azure Data Factory veya Hadoop yığını gibi araçlar kullanılarak bulutta toplu olarak işlenir. Bir cihazdan dosya yüklemeniz gerektiğinde IoT Hub'ın güvenliğini ve güvenilirliğini kullanmaya devam edebilirsiniz. Bu makalede nasıl yapıldığını görebilirsiniz.

Bu makalenin sonunda, Python Cihaz SDK'sını kullanarak depolamaya dosya yükleyen Python konsol uygulamasını FileUpload.py çalıştırırsınız.

Not

IoT Hub, Azure IoT cihaz SDK'ları aracılığıyla birçok cihaz platform ve dilini (C, Java, Python ve JavaScript dahil) destekler. Cihazınızı Azure IoT Hub'a bağlamayı öğrenmek için Azure IoT Geliştirici Merkezi'ne bakın.

Önemli

X.509 sertifika yetkilisi (CA) kimlik doğrulaması kullanan cihazlarda dosya yükleme işlevi genel önizleme aşamasındadır ve önizleme modunun etkinleştirilmesi gerekir. Azure Cihaz Sağlama Hizmeti ile X.509 parmak izi kimlik doğrulaması veya X.509 sertifika kanıtlama kullanan cihazlarda genel olarak kullanılabilir. IoT Hub ile X.509 kimlik doğrulaması hakkında daha fazla bilgi edinmek için bkz . Desteklenen X.509 sertifikaları.

Önkoşullar

  • Etkin bir Azure hesabı. (Hesabınız yoksa, yalnızca birkaç dakika içinde ücretsiz bir hesap oluşturabilirsiniz.)

  • Bir IoT hub'ı. CLI veya Azure portalı ile bir tane oluşturun.

  • Kayıtlı bir cihaz. Azure portalında bir tane kaydedin.

  • Python sürüm 3.7 veya üzeri önerilir. Kurulumunuzun gereksinimine uygun olarak 32 bit veya 64 bit yüklemeyi kullanmaya dikkat edin. Yükleme sırasında istendiğinde, platforma özgü ortam değişkeninize Python’u eklediğinizden emin olun.

  • Güvenlik duvarınızda 8883 numaralı bağlantı noktası açık olmalıdır. Bu makaledeki cihaz örneği, 8883 numaralı bağlantı noktası üzerinden iletişim kuran MQTT protokollerini kullanır. Bu bağlantı noktası bazı kurumsal ve eğitim ağı ortamlarında engellenebilir. Bu sorunu çözmenin daha fazla bilgi ve yolları için bkz. IoT Hub'a (MQTT) Bağlan.

Azure Depolama hesabını IoT Hub ile ilişkilendirme

Bir cihazdan dosya yüklemek için IoT hub'ınız ile ilişkilendirilmiş bir Azure Depolama hesabınız ve Azure Blob Depolama kapsayıcınız olmalıdır. Depolama hesabını ve kapsayıcıyı IoT hub'ınızla ilişkilendirdikten sonra, IoT hub'ınız bir cihaz tarafından istendiğinde SAS URI'sinin öğelerini sağlayabilir. Cihaz daha sonra azure Depolama kimlik doğrulaması yapmak ve blob kapsayıcısına dosya yüklemek için kullandığı SAS URI'sini oluşturmak için bu öğeleri kullanabilir.

Azure Depolama hesabını IoT hub'ınızla ilişkilendirmek için:

  1. Hub ayarları'nın altında IoT hub'ınızın sol bölmesinden Dosya yükleme'yi seçin.

    Portaldan dosya yükleme ayarlarını seçmeyi gösteren ekran görüntüsü.

  2. Dosya karşıya yükleme bölmesinde Azure Depolama Kapsayıcısı'nı seçin. Bu makale için depolama hesabınızın ve IoT Hub'ınızın aynı bölgede bulunması önerilir.

    • Kullanmak istediğiniz bir depolama hesabınız varsa listeden seçin.

    • Yeni bir depolama hesabı oluşturmak için +Depolama hesabı seçin. Depolama hesabı için bir ad girin ve Konum'un IoT hub'ınız ile aynı bölgeye ayarlandığından emin olun, ardından Tamam'ı seçin. Yeni hesap, IoT hub'ınız ile aynı kaynak grubunda oluşturulur. Dağıtım tamamlandığında, listeden depolama hesabını seçin.

    Depolama hesabını seçtikten sonra Kapsayıcılar bölmesi açılır.

  3. Kapsayıcılar bölmesinde blob kapsayıcısını seçin.

    • Kullanmak istediğiniz bir blob kapsayıcınız zaten varsa, listeden kapsayıcıyı seçin ve Seç'e tıklayın.

    • Yeni bir blob kapsayıcısı oluşturmak için + Kapsayıcı'yı seçin. Yeni kapsayıcı için bir ad belirtin. Bu makalenin amaçları doğrultusunda, diğer tüm alanları varsayılan değerlerinde bırakabilirsiniz. Oluştur'u belirleyin. Dağıtım tamamlandığında, listeden kapsayıcıyı seçin ve Seç'e tıklayın.

  4. Dosya karşıya yükleme bölmesine döndüğünüzde dosya bildirimlerinin Açık olarak ayarlandığından emin olun. Diğer tüm ayarları varsayılan değerlerinde bırakabilirsiniz. Kaydet'i seçin ve sonraki bölüme geçmeden önce ayarların tamamlanmasını bekleyin.

    Portalda dosya yükleme ayarlarını onaylamayı gösteren ekran görüntüsü.

Azure Depolama hesabı oluşturma hakkında daha ayrıntılı yönergeler için bkz. Depolama hesabı oluşturma. Depolama hesabını ve blob kapsayıcısını IoT hub'ı ile ilişkilendirme hakkında daha ayrıntılı yönergeler için bkz . Azure portalını kullanarak dosya yüklemelerini yapılandırma.

Cihaz uygulamasından dosya yükleme

Bu bölümde, IoT hub'ına dosya yüklemek için cihaz uygulamasını oluşturacaksınız.

  1. Komut isteminizde aşağıdaki komutu çalıştırarak azure-iot-device paketini yükleyin. Dosya yükleme işlemini IoT hub'ınızla koordine etmek için bu paketi kullanırsınız.

    pip install azure-iot-device
    
  2. Komut isteminizde aşağıdaki komutu çalıştırarak azure.storage.blob paketini yükleyin. Dosya karşıya yükleme işlemini gerçekleştirmek için bu paketi kullanırsınız.

    pip install azure.storage.blob
    
  3. Blob depolamaya yükleyebileceğiniz bir test dosyası oluşturun.

  4. Metin düzenleyicisi kullanarak çalışma klasörünüzde bir FileUpload.py dosyası oluşturun.

  5. FileUpload.py dosyasının başlangıcına aşağıdaki import deyimleri ve değişkenleri ekleyin.

    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. dosyanızda öğesini IoT hub cihazınızın bağlantı dizesi ile değiştirin[Device Connection String]. öğesini, oluşturduğunuz test dosyasının veya cihazınızda karşıya yüklemek istediğiniz herhangi bir dosyanın yoluyla değiştirin [Full path to local file] .

  7. Dosyayı blob depolamaya yüklemek için bir işlev oluşturun:

    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)
    

    Bu işlev, azure.storage.blob.BlobClient başlatmak için kullandığı bir URL oluşturmak için içine geçirilen blob_info yapısını ayrıştırıyor. Ardından bu istemciyi kullanarak dosyanızı Azure blob depolamaya yükler.

  8. İstemciyi bağlamak ve dosyayı karşıya yüklemek için aşağıdaki kodu ekleyin:

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

    Bu kod bir IoTHubDeviceClient oluşturur ve IoT hub'ınızla dosya yükleme işlemini yönetmek için aşağıdaki API'leri kullanır:

    • get_storage_info_for_blob, IoT hub'ınızdan daha önce oluşturduğunuz bağlantılı Depolama Hesabı hakkında bilgi alır. Bu bilgiler konak adını, kapsayıcı adını, blob adını ve SAS belirtecini içerir. Depolama bilgileri store_blob işlevine geçirilir (önceki adımda oluşturulur), böylece bu işlevdeki BlobClient Azure depolama ile kimlik doğrulaması yapabilir. get_storage_info_for_blob yöntemi ayrıca notify_blob_upload_status yönteminde kullanılan bir correlation_id döndürür. correlation_id, IoT Hub'ın üzerinde çalıştığınız blobu işaretleme yöntemidir.

    • notify_blob_upload_status blob depolama işleminizin durumunu IoT Hub'a bildirir. get_storage_info_for_blob yöntemi tarafından elde edilen correlation_id geçirirsiniz. IoT Hub tarafından dosya yükleme görevinin durumu hakkında bildirim dinleyen herhangi bir hizmeti bilgilendirmek için kullanılır.

  9. FileUpload.py dosyasını kaydedin ve kapatın.

Uygulamayı çalıştırma

Artık uygulamayı çalıştırmaya hazırsınız.

  1. Çalışma klasörünüzdeki bir komut isteminde aşağıdaki komutu çalıştırın:

    python FileUpload.py
    
  2. Aşağıdaki ekran görüntüsünde FileUpload uygulamasının çıkışı gösterilmektedir :

    FileUpload uygulamasını çalıştırmanın çıkışını gösteren ekran görüntüsü.

  3. Karşıya yüklenen dosyayı yapılandırdığınız depolama kapsayıcısında görüntülemek için portalı kullanabilirsiniz:

    Azure portalında karşıya yüklenen dosyayı gösteren kapsayıcının ekran görüntüsü.

Sonraki adımlar

Bu makalede, cihazlardan dosya yükleme işlemini basitleştirmek için IoT Hub'ın dosya yükleme özelliğini kullanmayı öğrendiniz. Aşağıdaki makalelerle bu özelliği keşfetmeye devam edebilirsiniz:

Aşağıdaki bağlantılarla Azure Blob Depolama hakkında daha fazla bilgi edinin: