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

Bu makalede, Bir Azure IoT .NET cihazı ve hizmet SDK'larını kullanarak IoT Hub'ın dosya yükleme özelliklerinin Azure blob depolamaya nasıl yüklendiği gösterilmektedir.

Bir cihazdan IoT hub'ına telemetri gönderme hızlı başlangıcı ve IoT Hub ile buluttan cihaza ileti gönderme makalesinde IoT Hub'ın temel cihazdan buluta ve buluttan cihaza mesajlaşma işlevi gösterilir. IoT Hub ile İleti Yönlendirmeyi Yapılandırma makalesi, 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 iki .NET konsol uygulaması çalıştıracaksınız:

  • FileUploadSample. Bu cihaz uygulaması, IoT hub'ınız tarafından sağlanan SAS URI'sini kullanarak depolamaya bir dosya yükler. Bu örnek, önkoşullarda indirdiğiniz Azure IoT C# SDK deposundan alınmalıdır.

  • ReadFileUploadNotification. Bu hizmet uygulaması IoT hub'ınızdan dosya yükleme bildirimleri alır. Bu uygulamayı siz oluşturursunuz.

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

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

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

  • Bu makalede çalıştırdığınız örnek uygulamalar ,NET Core ile C# kullanılarak yazılmıştır.

    .NET'ten birden çok platform için .NET Core SDK'sını indirin.

    Aşağıdaki komutu kullanarak geliştirme makinenizde .NET Core SDK'sının geçerli sürümünü doğrulayın:

    dotnet --version
    
  • Örneği indir bölümünden Azure IoT C# SDK'sını indirin ve ZIP arşivini ayıklayın.

  • Güvenlik duvarınızda 8883 numaralı bağlantı noktası açık olmalıdır. Bu makaledeki örnekte 8883 numaralı bağlantı noktası üzerinden iletişim kuran MQTT protokolü kullanılmaktadı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.

Bir cihaz uygulamasından dosya yükleme

Bu makalede, daha önce cihaz uygulaması olarak indirdiğiniz Azure IoT C# SDK deposundan bir örnek kullanacaksınız. Visual Studio, Visual Studio Code veya istediğiniz bir metin düzenleyicisini kullanarak aşağıdaki dosyaları açabilirsiniz.

Örnek, Azure IoT C# SDK'sını ayıkladığınız klasörde azure-iot-sdk-csharp/iothub/device/samples/getting started/FileUploadSample konumunda bulunur.

FileUpLoadSample.cs kodu inceleyin. Bu dosya ana örnek mantığı içerir. IoT Hub cihaz istemcisi oluşturduktan sonra, bir cihazdan dosya yüklemek için standart üç bölümden oluşan yordamı izler:

  1. Kod, IoT hub'ından SAS URI'sini almak için cihaz istemcisinde GetFileUploadSasUriAsync yöntemini çağırır:

    var fileUploadSasUriRequest = new FileUploadSasUriRequest
    {
        BlobName = fileName
    };
    
    // Lines removed for clarity
    
    FileUploadSasUriResponse sasUri = await _deviceClient.GetFileUploadSasUriAsync(fileUploadSasUriRequest);
    Uri uploadUri = sasUri.GetBlobUri();
    
  2. Kod, dosyayı Azure depolamaya yüklemek için SAS URI'sini kullanır. Bu örnekte SAS URI'sini kullanarak bir Azure depolama bloğu blob istemcisi oluşturur ve dosyayı karşıya yükler:

    var blockBlobClient = new BlockBlobClient(uploadUri);
    await blockBlobClient.UploadAsync(fileStreamSource, new BlobUploadOptions());
    
  3. Kod, IoT hub'ına karşıya yüklemeyi tamamladığını bildirir. Bu, IoT hub'ına karşıya yüklemeyle ilişkili kaynakları (SAS URI' sini) serbest bırakabileceğini bildirir. Dosya karşıya yükleme bildirimleri etkinleştirilirse IoT hub'ı arka uç hizmetlerine bir bildirim iletisi gönderir.

    var successfulFileUploadCompletionNotification = new FileUploadCompletionNotification
    {
        // Mandatory. Must be the same value as the correlation id returned in the sas uri response
        CorrelationId = sasUri.CorrelationId,
    
        // Mandatory. Will be present when service client receives this file upload notification
        IsSuccess = true,
    
        // Optional, user defined status code. Will be present when service client receives this file upload notification
        StatusCode = 200,
    
        // Optional, user-defined status description. Will be present when service client receives this file upload notification
        StatusDescription = "Success"
    };
    
    await _deviceClient.CompleteFileUploadAsync(successfulFileUploadCompletionNotification);
    

parameter.cs dosyasını incelerseniz şunu görürsünüz:

  • Örnek, bir cihaz bağlantı dizesi alan p parametresini geçirmenizi gerektirir.

  • Varsayılan olarak, cihaz örneği IoT Hub ile iletişim kurmak için MQTT protokolunu kullanır. Bu aktarım protokolunu değiştirmek için t parametresini kullanabilirsiniz. Bu seçimden bağımsız olarak Azure blob istemcisi, Azure depolama dosyasını karşıya yüklemek için protokol olarak her zaman HTTPS kullanır.

IoT hub'ını bağlantı dizesi alma

Bu makalede, IoT hub'ınızdan dosya karşıya yükleme bildirim iletileri almak için bir arka uç hizmeti oluşturacaksınız. Dosya karşıya yükleme bildirim iletilerini almak için hizmetinizin hizmet bağlantı iznine sahip olması gerekir. Varsayılan olarak, her IoT Hub bu izni veren hizmet adlı bir paylaşılan erişim ilkesiyle oluşturulur.

Hizmet ilkesi için IoT Hub bağlantı dizesi almak için şu adımları izleyin:

  1. Azure portalında Kaynak grupları'nı seçin. Hub'ınızın bulunduğu kaynak grubunu seçin ve ardından kaynak listesinden hub'ınızı seçin.

  2. IoT hub'ınızın sol tarafındaki bölmede Paylaşılan erişim ilkeleri'ni seçin.

  3. İlke listesinden hizmet ilkesini seçin.

  4. Birincil bağlantı dizesi kopyalayın ve değeri kaydedin.

Azure portalında IoT Hub'ınızdan bağlantı dizesi almayı gösteren ekran görüntüsü.

IoT Hub paylaşılan erişim ilkeleri ve izinleri hakkında daha fazla bilgi için bkz . Erişim denetimi ve izinleri.

Karşıya dosya yükleme bildirimi alma

Bu bölümde, IoT hub'ınızdan dosya karşıya yükleme bildirim iletileri alan bir C# konsol uygulaması oluşturacaksınız.

  1. Bir komut penceresi açın ve projeyi oluşturmak istediğiniz klasöre gidin. ReadFileUploadNotifications adlı bir klasör oluşturun ve dizinleri bu klasöre değiştirin.

    mkdir ReadFileUploadNotification
    cd ReadFileUploadNotification
    
  2. C# konsol projesi oluşturmak için aşağıdaki komutu çalıştırın. Komutu çalıştırdıktan sonra klasörde bir Program.cs dosyası ve ReadFileUploadNotification.csproj dosyası bulunur.

    dotnet new console --language c#
    
  3. Microsoft.Azure.Devices paketini proje dosyasına eklemek için aşağıdaki komutu çalıştırın. Bu paket, Azure IoT .NET hizmet SDK'sıdır.

    dotnet add package Microsoft.Azure.Devices
    
  4. Program.cs dosyasını açın ve dosyanın en üstüne aşağıdaki deyimi ekleyin:

    using Microsoft.Azure.Devices;
    
  5. Program sınıfına aşağıdaki alanları ekleyin. {iot hub connection string} Yer tutucu değerini, Daha önce IoT hub'ını alma bağlantı dizesi bölümünde kopyaladığınız IoT hub bağlantı dizesi değiştirin:

    static ServiceClient serviceClient;
    static string connectionString = "{iot hub connection string}";
    
  6. Program sınıfına aşağıdaki yöntemi ekleyin:

    private async static void ReceiveFileUploadNotificationAsync()
    {
        var notificationReceiver = serviceClient.GetFileNotificationReceiver();
        Console.WriteLine("\nReceiving file upload notification from service");
        while (true)
        {
            var fileUploadNotification = await notificationReceiver.ReceiveAsync();
            if (fileUploadNotification == null) continue;
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("Received file upload notification: {0}", 
              string.Join(", ", fileUploadNotification.BlobName));
            Console.ResetColor();
            await notificationReceiver.CompleteAsync(fileUploadNotification);
        }
    }
    

    Bu alma düzeninin, cihaz uygulamasından buluttan cihaza iletileri almak için kullanılan desenle aynı olduğunu unutmayın.

  7. Son olarak Main yöntemindeki satırları aşağıdakilerle değiştirin:

    Console.WriteLine("Receive file upload notifications\n");
    serviceClient = ServiceClient.CreateFromConnectionString(connectionString);
    ReceiveFileUploadNotificationAsync();
    Console.WriteLine("Press Enter to exit\n");
    Console.ReadLine();
    

Uygulamaları çalıştırma

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

  1. İlk olarak, IoT hub'ından dosya yükleme bildirimleri almak için hizmet uygulamasını çalıştırın. ReadFileUploadNotification klasöründeki komut isteminizde aşağıdaki komutları çalıştırın:

    dotnet restore
    dotnet run
    

    Uygulama başlatılır ve IoT hub'ınızdan bir dosya karşıya yükleme bildirimi bekler:

    Receive file upload notifications
    
    
    Receiving file upload notification from service
    Press Enter to exit
    
  2. Ardından, dosyayı Azure depolamaya yüklemek için cihaz uygulamasını çalıştırın. Yeni bir komut istemi açın ve Klasörleri Azure IoT C# SDK'sını genişlettiğiniz klasörün altında azure-iot-sdk-csharp\iothub\device\samples\getting started\FileUploadSample olarak değiştirin. Aşağıdaki komutları çalıştırın. {Your device connection string} İkinci komuttaki yer tutucu değerini, IoT hub'ına bir cihaz kaydettiğinizde gördüğünüz cihaz bağlantı dizesi ile değiştirin.

    dotnet restore
    dotnet run --p "{Your device connection string}"
    

    Aşağıdaki çıkış, yükleme tamamlandıktan sonra cihaz uygulamasından alınmıştır:

      Uploading file TestPayload.txt
      Getting SAS URI from IoT Hub to use when uploading the file...
      Successfully got SAS URI (https://contosostorage.blob.core.windows.net/contosocontainer/MyDevice%2FTestPayload.txt?sv=2018-03-28&sr=b&sig=x0G1Baf%2BAjR%2BTg3nW34zDNKs07p6dLzkxvZ3ZSmjIhw%3D&se=2021-05-04T16%3A40%3A52Z&sp=rw) from IoT Hub
      Uploading file TestPayload.txt using the Azure Storage SDK and the retrieved SAS URI for authentication
      Successfully uploaded the file to Azure Storage
      Notified IoT Hub that the file upload succeeded and that the SAS URI can be freed.
      Time to upload file: 00:00:01.5077954.
      Done.
    
  3. Hizmet uygulamasının dosya karşıya yükleme bildirimini aldığını gösterdiğine dikkat edin:

    Receive file upload notifications
    
    
    Receiving file upload notification from service
    Press Enter to exit
    
    Received file upload notification: myDeviceId/TestPayload.txt
    

Dosyanın karşıya yüklendiğini doğrulama

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

  1. Azure portalında depolama hesabınıza gidin.

  2. Depolama hesabınızın sol bölmesinde Kapsayıcılar'ı seçin.

  3. Dosyayı karşıya yüklediğiniz kapsayıcıyı seçin.

  4. Cihazınızın adını taşıyan klasörü seçin.

  5. Dosyanızı karşıya yüklediğiniz blobu seçin. Bu makalede, TestPayload.txt adlı blob bulunur.

    Azure portalında karşıya yüklenen dosyayı seçme işleminin ekran görüntüsü.

  6. Açılan sayfada blob özelliklerini görüntüleyin. İndir'i seçerek dosyayı indirebilir ve içeriğini yerel olarak görüntüleyebilirsiniz.

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: