IoT Hub (Node.js) ile cihazınızdan buluta dosya Upload

Öğretici şunların nasıl yapıldığını göstermektedir:

  • Bir dosyayı karşıya yüklemek için Azure Blob URI 'SI ile güvenli bir şekilde cihaz sağlayın.

  • Uygulama arka uçtaki dosyayı işlemeyi tetiklemek için karşıya dosya yükleme bildirimlerini IoT Hub kullanın.

Bir cihazdan IoT Hub 'ına hızlı başlangıç Telemetriyi , IoT Hub temel cihazdan buluta mesajlaşma işlevlerini gösterir. Ancak, bazı senaryolarda, cihazlarınızın IoT Hub kabul ettiği görece küçük cihazdan buluta iletileri içine gönderdikleri verileri kolayca eşleyemezsiniz. Örneğin:

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

Bu dosyalar genellikle Azure Data Factory veya Hadoop yığını gibi araçları kullanarak bulutta toplu olarak işlenir. Dosyaları bir cihazdan kapladığınızda, IoT Hub güvenlik ve güvenilirliğini kullanmaya devam edebilirsiniz.

Bu makalenin sonunda, iki Node.js konsol uygulaması çalıştırırsınız:

  • FileUpload.js, IoT Hub 'ınız tarafından belirtilen SAS URI 'sini kullanarak depolamaya bir dosya yükler.

  • IoT Hub 'ınızdaki karşıya dosya yükleme bildirimleri alan FileUploadNotification.js.

Not

IoT Hub, Azure IoT cihaz SDK 'Ları aracılığıyla C, Java, Python ve JavaScript gibi birçok cihaz platformunu ve dilini destekler. Cihazınızı Azure IoT Hub bağlama hakkında adım adım yönergeler için Azure IoT Geliştirici Merkezi ' ne bakın.

Önemli

X. 509.440 sertifika yetkilisi (CA) kimlik doğrulaması kullanan cihazlarda karşıya dosya yükleme işlevselliği genel önizlemede ve Önizleme modunun etkinleştirilmesi gerekir. X. 509.440 parmak izi kimlik doğrulaması kullanan cihazlarda genellikle kullanılabilir. IoT Hub ile X. 509.440 kimlik doğrulaması hakkında daha fazla bilgi edinmek için bkz. desteklenen x. 509.440 sertifikaları.

Önkoşullar

  • Node.js 10.0. x veya üzeri sürümü. LTS sürümü önerilir. Node.js, NodeJS.orgadresinden indirebilirsiniz.

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

  • Güvenlik duvarınızdaki 8883 numaralı bağlantı noktasını açık olduğundan emin olun. Bu makaledeki cihaz örneği, 8883 numaralı bağlantı noktası üzerinden iletişim kuran MQTT protokolünü kullanır. Bu bağlantı noktası, bazı kurumsal ve eğitim ağ ortamlarında engellenebilir. Bu sorunu geçici olarak çözmek için daha fazla bilgi ve IoT Hub bkz. bağlanma (MQTT).

IoT hub oluşturma

Bu bölümde Azure Portalkullanarak IoT Hub 'ı oluşturma açıklanmaktadır.

  1. Azure Portal’ında oturum açın.

  2. Azure giriş sayfasından + kaynak oluştur düğmesini seçin ve ardından Market 'te ara alanına IoT Hub girin.

  3. Arama sonuçlarından IoT Hub seçin ve ardından Oluştur' u seçin.

  4. Temel bilgiler sekmesinde, alanları aşağıdaki gibi doldurun:

    • Abonelik: hub 'ınız için kullanılacak aboneliği seçin.

    • Kaynak grubu: bir kaynak grubu seçin veya yeni bir tane oluşturun. Yeni bir tane oluşturmak için Yeni oluştur ' u seçin ve kullanmak istediğiniz adı girin. Var olan bir kaynak grubunu kullanmak için bu kaynak grubunu seçin. Daha fazla bilgi için bkz. Azure Resource Manager kaynak gruplarını yönetme.

    • Bölge: hub 'ınızın bulunmasını istediğiniz bölgeyi seçin. Size en yakın konumu seçin. IoT Hub cihaz akışlarıgibi bazı özellikler yalnızca belirli bölgelerde kullanılabilir. Bu sınırlı Özellikler için desteklenen bölgelerden birini seçmeniz gerekir.

    • IoT Hub adı: hub 'ınız için bir ad girin. Bu ad, 3 ila 50 alfasayısal karakter uzunluğunda olan, genel olarak benzersiz olmalıdır. Ad ayrıca Dash () karakterini de içerebilir '-' .

    Önemli

    IoT Hub 'ı bir DNS uç noktası olarak herkese açık olacağı için, bu dosyayı adlandırdığınızda hassas veya kişisel olarak tanımlanabilir bilgiler girmemeye özen gösterin.

    Create a hub in the Azure portal.

  5. Ileri ' yi seçin: hub 'ınızı oluşturmaya devam etmek için ağ iletişimi .

    Cihazların IoT Hub bağlanmak için kullanabileceği uç noktaları seçin. Varsayılan genel uç nokta (tüm ağlar)ayarını seçebilir veya genel uç nokta (seçili IP aralıkları)veya Özel uç noktaseçeneğini belirleyebilirsiniz. Bu örnek için varsayılan ayarı kabul edin.

    Choose the endpoints that can connect.

  6. Hub 'ınızı oluşturmaya devam etmek için İleri: yönetim ' i seçin.

    Set the size and scale for a new hub using the Azure portal.

    Varsayılan ayarları burada kabul edebilirsiniz. İsterseniz, aşağıdaki alanlardan herhangi birini değiştirebilirsiniz:

    • Fiyatlandırma ve ölçek katmanı: seçtiğiniz katman. İstediğiniz sayıda özelliğe ve her gün çözümünüz aracılığıyla kaç tane ileti gönderdiğinize bağlı olarak çeşitli katmanlardan seçim yapabilirsiniz. Ücretsiz katman, test ve değerlendirme için tasarlanmıştır. 500 cihazların hub 'a ve günde en fazla 8.000 iletiye bağlanmasını sağlar. Her Azure aboneliği ücretsiz katmanda bir IoT Hub 'ı oluşturabilir.

      IoT Hub cihaz akışları için bir hızlı başlangıç üzerinden çalışıyorsanız, ücretsiz katmanı seçin.

    • IoT Hub birimler: günlük birim başına izin verilen ileti sayısı, hub 'ın fiyatlandırma katmanına bağlıdır. Örneğin, hub 'ın 700.000 ileti girişini desteklemesini istiyorsanız iki adet S1 katmanı birimi seçersiniz. Diğer katman seçenekleri hakkında daha fazla bilgi için, bkz. doğru IoT Hub katmanını seçme.

    • IoT Için Microsoft Defender: IoT ve cihazlarınıza ek bir tehdit koruması katmanı eklemek için bunu etkinleştirin. Bu seçenek ücretsiz katmanda hub 'lar için kullanılamaz. IoT Için Defender 'daki IoT Hub yönelik güvenlik önerilerihakkında daha fazla bilgi edinin.

    • cihazdan buluta bölümlerigelişmiş Ayarlar: bu özellik cihazdan buluta iletileri, iletilerin eşzamanlı okuyucu sayısıyla ilişkilendirir. Çoğu hub 'da yalnızca dört bölüm gereklidir.

  7. Sonraki ekrana devam etmek için İleri: Etiketler ' i seçin.

    Etiketler ad/değer çiftleridir. Kaynakları kategorilere ayırarak ve faturalandırmayı birleştirmek için birden fazla kaynağa ve kaynak grubuna aynı etiketi atayabilirsiniz. Bu belgede hiçbir etiket eklememezsiniz. Daha fazla bilgi için bkz. Azure kaynaklarınızı düzenlemek için etiketleri kullanma.

    Assign tags for the hub using the Azure portal.

  8. İleri ' yi seçin: seçimlerinizi gözden geçirmek için ve Oluştur ' a tıklayın. Bu ekrana benzer bir şey görürsünüz, ancak hub 'ı oluştururken seçtiğiniz değerler vardır.

    Review information for creating the new hub.

  9. Yeni hub 'ınızın dağıtımını başlatmak için Oluştur ' u seçin. Dağıtım, hub oluşturulurken birkaç dakika sürer. Dağıtım tamamlandıktan sonra, yeni hub 'ı açmak için Kaynağa Git ' i seçin.

IoT Hub 'a yeni bir cihaz kaydetme

Bu bölümde, IoT Hub 'ınızdaki kimlik kayıt defterinde bir cihaz kimliği oluşturacaksınız. Kimlik kayıt defterinde bir girişi olmadığı takdirde bir cihaz bir hub 'a bağlanamaz. Daha fazla bilgi için bkz. IoT Hub geliştirici kılavuzu.

  1. IoT Hub 'ınız gezinti menüsünde cihazlar' ı açın ve ardından IoT Hub 'ınıza cihaz eklemek Için Cihaz Ekle ' yi seçin.

    Screen capture that shows how to create a device identity in the portal

  2. Cihaz oluştur' da, yeni cihazınız Için mydeviceıdgibi bir ad girin ve Kaydet' i seçin. Bu eylem, IoT Hub 'ınız için bir cihaz kimliği oluşturur. Birincil ve ikincil anahtarların otomatik olarak oluşturulması için Otomatik oluştur anahtarlarını denetlenmiş olarak bırakın.

    Screen capture that shows how to add a new device

    Önemli

    Cihaz kimliği; müşteri desteği ve sorun giderme için toplanan günlüklerde görünüyor olabilir, bu nedenle adlandırırken herhangi bir önemli bilgi vermekten kaçının.

  3. Cihaz oluşturulduktan sonra cihazlar bölmesindeki listeden cihazı açın. Birincil bağlantı dizesinikopyalayın. Bu bağlantı dizesi, hub ile iletişim kurmak için cihaz kodu tarafından kullanılır.

    Varsayılan olarak, anahtarlar ve bağlantı dizeleri hassas bilgiler olduğu için maskelenir. Göz simgesine tıklarsanız, bunlar ortaya çıkarırlar. Bunları Kopyala düğmesi ile kopyalamak üzere göstermek gerekli değildir.

    Screen capture that shows the device connection string

Not

IoT Hub kimlik kayıt defteri, yalnızca IoT hub'ına güvenli erişim sağlamak amacıyla cihaz kimliklerini depolar. Güvenlik kimlik bilgileri olarak kullanılmak üzere cihaz kimliklerini ve anahtarlarını ve tek bir cihaza erişimi devre dışı bırakmak için kullanabileceğiniz etkin/devre dışı bayrağını depolar. Uygulamanızın cihaza özgü diğer meta verileri depolaması gerekiyorsa uygulamaya özgü bir depo kullanması gerekir. Daha fazla bilgi için bkz. IoT Hub geliştirici kılavuzu.

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

bir cihazdan dosya yüklemek için, ıot hub 'ınız ile ilişkili bir azure Depolama hesabınızın ve azure Blob Depolama kapsayıcısının olması gerekir. Depolama hesabı ve kapsayıcısını IoT Hub 'ınız ile ilişkilendirdikten sonra, IoT Hub 'ınız bir cihaz tarafından istendiğinde SAS URI 'SI için öğeleri sağlayabilir. cihaz daha sonra bu öğeleri kullanarak Azure Depolama kimlik doğrulaması yapmak ve dosyaları blob kapsayıcısına yüklemek için kullandığı SAS urı 'sini oluşturabilir.

Azure Depolama hesabını ıot hub 'ınız ile ilişkilendirmek için:

  1. Merkez ayarlarıaltında IoT Hub 'ınızın sol bölmesinde dosya karşıya yükle ' yi seçin.

    Screen capture showing select file upload settings from the portal.

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

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

    • yeni bir depolama hesabı oluşturmak için + Depolama hesabı' nı seçin. Depolama hesabı için bir ad girin ve konumun IoT Hub 'ınız ile aynı bölgeye ayarlandığından emin olun ve 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 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 sağlayın. Bu makalenin amaçları doğrultusunda, tüm diğer alanları varsayılan olarak bırakabilirsiniz. Oluştur’u seçin. Dağıtım tamamlandığında, listeden kapsayıcıyı seçin ve Seç' e tıklayın.

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

    Screen capture showing confirm file upload settings in the portal.

Azure Depolama hesabının nasıl oluşturulacağı hakkında daha ayrıntılı yönergeler için bkz. depolama hesabı oluşturma. Bir depolama hesabı ve BLOB kapsayıcısının IoT Hub ile ilişkilendirilmesi hakkında daha ayrıntılı yönergeler için, bkz. Azure Portal kullanarak dosya yüklemelerini yapılandırma.

bir cihaz uygulamasından bir dosya Upload

Bu bölümde, IoT Hub 'a bir dosyayı karşıya yüklemek için bir cihaz uygulaması oluşturacaksınız. Kod, Azure ıot node.js SDK cihaz örneklerindeki upload_to_blob_advanced.js örneğinde bulunan kodu temel alır.

  1. fileupload adlı bir boş klasör oluşturun. Komut isteminizde aşağıdaki komutu kullanarak fileupload klasöründe bir package.json dosyası oluşturun. Tüm varsayılanları kabul edin:

    npm init
    
  2. Komut istemindeki fileupload klasörde, fileupload cihaz SDK 'sı, Azure-IoT-Device-MQTTve @azure/Storage-blob paketleri yüklemek için aşağıdaki komutu çalıştırın:

    npm install azure-iot-device azure-iot-device-mqtt @azure/storage-blob --save
    
  3. Bir metin düzenleyicisi kullanarak klasöründe bir FileUpload.js dosyası oluşturun ve bu dosyaya aşağıdaki kodu kopyalayın.

    'use strict';
    
    const Client = require('azure-iot-device').Client;
    const Protocol = require('azure-iot-device-mqtt').Mqtt;
    const errors = require('azure-iot-common').errors;
    const path = require('path');
    
    const {
      AnonymousCredential,
      BlockBlobClient,
      newPipeline
    } = require('@azure/storage-blob');
    
    // make sure you set these environment variables prior to running the sample.
    const deviceConnectionString = process.env.DEVICE_CONNECTION_STRING;
    const localFilePath = process.env.PATH_TO_FILE;
    const storageBlobName = path.basename(localFilePath);
    
    async function uploadToBlob(localFilePath, client) {
      const blobInfo = await client.getBlobSharedAccessSignature(storageBlobName);
      if (!blobInfo) {
        throw new errors.ArgumentError('Invalid upload parameters');
      }
    
      const pipeline = newPipeline(new AnonymousCredential(), {
        retryOptions: { maxTries: 4 },
        telemetry: { value: 'HighLevelSample V1.0.0' }, // Customized telemetry string
        keepAliveOptions: { enable: false }
      });
    
      // Construct the blob URL to construct the blob client for file uploads
      const { hostName, containerName, blobName, sasToken } = blobInfo;
      const blobUrl = `https://${hostName}/${containerName}/${blobName}${sasToken}`;
    
      // Create the BlockBlobClient for file upload to the Blob Storage Blob
      const blobClient = new BlockBlobClient(blobUrl, pipeline);
    
      // Setup blank status notification arguments to be filled in on success/failure
      let isSuccess;
      let statusCode;
      let statusDescription;
    
      try {
        const uploadStatus = await blobClient.uploadFile(localFilePath);
        console.log('uploadStreamToBlockBlob success');
    
        // Save successful status notification arguments
        isSuccess = true;
        statusCode = uploadStatus._response.status;
        statusDescription = uploadStatus._response.bodyAsText;
    
        // Notify IoT Hub of upload to blob status (success)
        console.log('notifyBlobUploadStatus success');
      }
      catch (err) {
        isSuccess = false;
        statusCode = err.code;
        statusDescription = err.message;
    
        console.log('notifyBlobUploadStatus failed');
        console.log(err);
      }
    
      await client.notifyBlobUploadStatus(blobInfo.correlationId, isSuccess, statusCode, statusDescription);
    }
    
    // Create a client device from the connection string and upload the local file to blob storage.
    const deviceClient = Client.fromConnectionString(deviceConnectionString, Protocol);
    uploadToBlob(localFilePath, deviceClient)
      .catch((err) => {
        console.log(err);
      })
      .finally(() => {
        process.exit();
      });
    
  4. FileUpload.js dosyasını kaydedin ve kapatın.

  5. Bir resim dosyasını fileupload klasöre kopyalayın ve gibi bir ad verin myimage.png .

  6. Cihaz bağlantı dizeniz için ortam değişkenleri ve karşıya yüklemek istediğiniz dosyanın yolu ekleyin. Cihaz , IoT Hub 'ınıza kaydolduysanızcihaz bağlantı dizesi aldınız.

    • Windows için:

      set DEVICE_CONNECTION_STRING={your device connection string}
      set PATH_TO_FILE={your image filepath}
      
    • Linux/bash için:

      export DEVICE_CONNECTION_STRING="{your device connection string}"
      export PATH_TO_FILE="{your image filepath}"
      

IoT Hub bağlantı dizesini al

Bu makalede, oluşturduğunuz IoT Hub 'ından karşıya dosya yükleme bildirim iletilerini almak için bir arka uç hizmeti oluşturursunuz. Karşıya dosya yükleme bildirim iletilerini almak için hizmetinizin hizmet bağlantısı izni olması gerekir. Varsayılan olarak, her IoT Hub, bu izni veren hizmet adlı paylaşılan bir erişim ilkesiyle oluşturulur.

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

  1. Azure Portalkaynak 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 İlkesi ' ni seçin.

  4. Paylaşılan erişim anahtarlarıaltında, birincil bağlantı dizesinin Kopyala simgesini seçin ve değeri kaydedin.

Screenshot that shows how to retrieve the connection string

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 karşıya dosya yükleme bildirim iletilerini alan Node.js bir konsol uygulaması oluşturacaksınız.

  1. fileuploadnotification adlı bir boş klasör oluşturun. Komut isteminizde aşağıdaki komutu kullanarak fileuploadnotification klasöründe bir package.json dosyası oluşturun. Tüm varsayılanları kabul edin:

    npm init
    
  2. Komut istemindeki fileuploadnotification klasörde, fileuploadnotification SDK paketini yüklemek için aşağıdaki komutu çalıştırın:

    npm install azure-iothub --save
    
  3. Bir metin düzenleyicisi kullanarak klasöründe FileUploadNotification.js bir dosya oluşturun .

  4. requirerequire dosyasının başlangıcına aşağıdaki deyimlerini ekleyin:

    'use strict';
    
    const Client = require('azure-iothub').Client;
    
  5. Ortamınızdaki IoT Hub 'ınız için bağlantı dizesini okuyun:

    const connectionString = process.env.IOT_HUB_CONNECTION_STRING;
    
  6. Bağlantı dizesinden bir hizmet istemcisi oluşturmak için aşağıdaki kodu ekleyin:

    const serviceClient = Client.fromConnectionString(connectionString);
    
  7. İstemcisini açın ve durum güncelleştirmelerini almak için Getfilenotificationahize işlevini kullanın.

    serviceClient.open(function (err) {
      if (err) {
        console.error('Could not connect: ' + err.message);
      } else {
        console.log('Service client connected');
        serviceClient.getFileNotificationReceiver(function receiveFileUploadNotification(err, receiver){
          if (err) {
            console.error('error getting the file notification receiver: ' + err.toString());
          } else {
            receiver.on('message', function (msg) {
              console.log('File upload from device:')
              console.log(msg.getData().toString('utf-8'));
            });
          }
        });
      }
    });
    
  8. FileUploadNotification.js dosyasını kaydedin ve kapatın.

  9. IoT Hub bağlantı dizeniz için bir ortam değişkeni ekleyin. Bu dizeyi daha önce IoT Hub 'ı bağlantı dizesi alöğesinde kopyaladınız.

    • Windows için:

      set IOT_HUB_CONNECTION_STRING={your iot hub connection string}
      
    • Linux/bash için:

      export IOT_HUB_CONNECTION_STRING="{your iot hub connection string}"
      

Uygulamaları çalıştırma

Şimdi uygulamaları çalıştırmaya hazırsınız.

Klasöründeki bir komut isteminde fileuploadnotification aşağıdaki komutu çalıştırın:

node FileUploadNotification.js

Klasöründeki bir komut isteminde fileupload aşağıdaki komutu çalıştırın:

node FileUpload.js

Aşağıdaki çıktı, karşıya yükleme tamamlandıktan sonra FileUpload uygulamasının içinden yapılır:

uploadStreamToBlockBlob success
notifyBlobUploadStatus success

Aşağıdaki örnek çıktı, yükleme tamamlandıktan sonra Fileuploadnotification uygulamasının bir örneğidir:

Service client connected
File upload from device:
{"deviceId":"myDeviceId","blobUri":"https://{your storage account name}.blob.core.windows.net/device-upload-container/myDeviceId/image.png","blobName":"myDeviceId/image.png","lastUpdatedTime":"2021-07-23T23:27:06+00:00","blobSizeInBytes":26214,"enqueuedTimeUtc":"2021-07-23T23:27:07.2580791Z"}

Karşıya dosya yüklemeyi doğrulama

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

  1. Azure portal ' de depolama hesabınıza gidin.

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

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

  4. Cihazından sonra adlı klasörü seçin.

  5. Dosyanızı karşıya yüklediğiniz blobu seçin. Bu makalede, dosyanızda aynı ada sahip bir blob vardır.

    Screenshot of viewing the uploaded file in the Azure portal.

  6. Açılan sayfada blob özelliklerini görüntüleyin. Dosyayı indirmek ve içeriğini yerel olarak görüntülemek için İndir ' i seçebilirsiniz.

Sonraki adımlar

Bu öğreticide, cihazların dosya karşıya yüklemelerini basitleştirmek için IoT Hub dosya yükleme yeteneklerini nasıl kullanacağınızı öğrendiniz. Aşağıdaki makalelerle IoT Hub özelliklerini ve senaryolarını keşfetmeye devam edebilirsiniz: