Aracılığıyla paylaş


IoT Hub modül kimliği ve modül ikizi (Node.js) ile çalışmaya başlama

Modül kimlikleri ve modül ikizleri, Azure IoT Hub cihaz kimliğine ve cihaz ikizine benzer, ancak daha hassas ayrıntı düzeyi sağlar. Azure IoT Hub cihaz kimliği ve cihaz ikizi, arka uç uygulamasının bir cihazı yapılandırmasına olanak tanır ve cihazın koşulları hakkında görünürlük sağlarken modül kimliği ve modül ikizi, bir cihazın tek tek bileşenleri için bu özellikleri sağlar. İşletim sistemi cihazları veya üretici yazılımı cihazları gibi birden çok bileşeni olan yetenekli cihazlarda, her bileşen için yalıtılmış yapılandırma ve koşullar sağlar.

Not

Bu makalede açıklanan özellikler yalnızca IoT Hub'ın standart katmanında kullanılabilir. Temel ve standart/ücretsiz IoT Hub katmanları hakkında daha fazla bilgi için bkz. Çözümünüz için doğru IoT Hub katmanını seçme.

Bu makalenin sonunda iki Node.js uygulama vardır:

  • CreateIdentities: Cihaz ve modül istemcilerinizi bağlamak için bir cihaz kimliği, modül kimliği ve ilişkili güvenlik anahtarları oluşturur.

  • UpdateModuleTwinReportedProperties: Güncelleştirilmiş modül ikizini, bildirilen özellikleri IoT Hub'ınıza gönderir.

Not

Hem cihaz hem de arka uç uygulamaları oluşturmak için kullanılabilen SDK araçları hakkında daha fazla bilgi için bkz . Azure IoT SDK'ları.

Önkoşullar

  • Azure aboneliğinizde bir IoT hub'ı. Henüz bir hub'ına sahip değilseniz IoT hub'ı oluşturma makalesindeki adımları izleyebilirsiniz.

  • Node.js sürüm 10.0.x veya üzeri. Geliştirme ortamınızı hazırlama, windows veya Linux'ta bu makale için Node.js nasıl yükleneceğini açıklar.

Modül kimlik doğrulaması

Modül kimliklerinin kimliğini doğrulamak için simetrik anahtarları veya X.509 sertifikalarını kullanabilirsiniz. X.509 sertifika kimlik doğrulaması için modülün sertifikasının gibi CN=<deviceid>/<moduleid>biçimlendirilmiş ortak adı (CN) olmalıdır. Örneğin:

openssl req -new -key d1m1.key.pem -out d1m1.csr -subj "/CN=device01\/module01"

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

Bu makalede, kimlik kayıt defterine bir cihaz ekleyen ve ardından bu cihaza bir modül ekleyen bir arka uç hizmeti oluşturacaksınız. Hizmetiniz için kayıt defteri yazma izni gerekiyor. Varsayılan olarak, her IoT hub'ı bu izni veren registryReadWrite adlı bir paylaşılan erişim ilkesiyle oluşturulur.

registryReadWrite ilkesine yönelik 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. Hub'ınızın sol tarafındaki bölmede Paylaşılan erişim ilkeleri'ni seçin.

  3. İlke listesinden registryReadWrite ilkesini seçin.

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

    bağlantı dizesi nasıl alındığını 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.

Önemli

Bu makale, paylaşılan erişim imzası kullanarak hizmete bağlanma adımlarını içerir. Bu kimlik doğrulama yöntemi test ve değerlendirme için uygundur, ancak Microsoft Entra ID veya yönetilen kimliklerle bir hizmette kimlik doğrulaması yapmak daha güvenli bir yaklaşımdır. Daha fazla bilgi edinmek için bkz . En iyi güvenlik yöntemleri > Bulut güvenliği.

IoT Hub'da cihaz kimliği ve modül kimliği oluşturma

Bu bölümde IoT hub'ınızdaki kimlik kayıt defterinde cihaz kimliği ve modül kimliği oluşturan bir Node.js uygulaması oluşturacaksınız. Cihaz veya modül, kimlik kayıt defterinde bir girdisi olmadığı sürece IoT hub'ına bağlanamaz. Daha fazla bilgi için bkz . IoT hub'ınızdaki kimlik kayıt defterini anlama. Bu konsol uygulamasını çalıştırdığınızda, hem cihaz hem de modül için benzersiz bir kimlik ve anahtar oluşturur. Kimlik ve anahtar büyük/küçük harfe duyarlıdır. Cihazınız ve modülünüz, IoT Hub’ına cihazdan buluta iletileri gönderdiğinde kendisini tanımlamak için bu değerleri kullanır.

Önemli

Bu makale, simetrik anahtar kimlik doğrulaması olarak da adlandırılan paylaşılan erişim imzasını kullanarak bir cihazı bağlama adımlarını içerir. Bu kimlik doğrulama yöntemi test ve değerlendirme için uygundur, ancak X.509 sertifikalarını kullanarak bir cihazın kimliğini doğrulamak daha güvenli bir yaklaşımdır. Daha fazla bilgi edinmek için bkz . En iyi güvenlik yöntemleri > Bağlantı güvenliği.

  1. Kodunuzu tutmak için bir dizin oluşturun.

  2. Bu dizinin içinde ilk olarak npm init -y komutunu çalıştırarak varsayılan değerlerle boş bir package.json oluşturun. Bu, kodunuzun proje dosyasıdır.

  3. Hizmet SDK'sını node_modules alt dizinine yüklemek için npm install -S azure-iothub@modules-preview komutunu çalıştırın.

    Not

    node_modules alt dizin adı, "düğüm kitaplığı" anlamına gelen modül sözcüğünü kullanır. Buradaki terimin IoT Hub modülleriyle hiçbir ilgisi yoktur.

  4. Dizininizde aşağıdaki .js dosyasını oluşturun. add.js de. Hub'ınızı bağlantı dizesi ve hub adını kopyalayıp yapıştırın.

    var Registry = require('azure-iothub').Registry;
    var uuid = require('uuid');
    // Copy/paste your connection string and hub name here
    var serviceConnectionString = '<hub connection string from portal>';
    var hubName = '<hub name>.azure-devices.net';
    // Create an instance of the IoTHub registry
    var registry = Registry.fromConnectionString(serviceConnectionString);
    // Insert your device ID and moduleId here.
    var deviceId = 'myFirstDevice';
    var moduleId = 'myFirstModule';
    // Create your device as a SAS authentication device
    var primaryKey = new Buffer(uuid.v4()).toString('base64');
    var secondaryKey = new Buffer(uuid.v4()).toString('base64');
    var deviceDescription = {
      deviceId: deviceId,
      status: 'enabled',
      authentication: {
        type: 'sas',
        symmetricKey: {
          primaryKey: primaryKey,
          secondaryKey: secondaryKey
        }
      }
    };
    
    // First, create a device identity
    registry.create(deviceDescription, function(err) {
      if (err) {
        console.log('Error creating device identity: ' + err);
        process.exit(1);
      }
      console.log('device connection string = "HostName=' + hubName + ';DeviceId=' + deviceId + ';SharedAccessKey=' + primaryKey + '"');
    
      // Then add a module to that device
      registry.addModule({ deviceId: deviceId, moduleId: moduleId }, function(err) {
        if (err) {
          console.log('Error creating module identity: ' + err);
          process.exit(1);
        }
    
        // Finally, retrieve the module details from the hub so we can construct the connection string
        registry.getModule(deviceId, moduleId, function(err, foundModule) {
          if (err) {
            console.log('Error getting module back from hub: ' + err);
            process.exit(1);
          }
          console.log('module connection string = "HostName=' + hubName + ';DeviceId=' + foundModule.deviceId + ';ModuleId='+foundModule.moduleId+';SharedAccessKey=' + foundModule.authentication.symmetricKey.primaryKey + '"');
          process.exit(0);
        });
      });
    });
    
    

Bu uygulama myFirstDevice kimliğine sahip bir cihaz kimliği ve myFirstDevice cihazı altında myFirstModule kimliğine sahip bir modül kimliği oluşturur. (Bu modül kimliği kimlik kayıt defterinde zaten varsa, kod yalnızca mevcut modül bilgilerini alır.) Uygulama daha sonra bu kimliğin birincil anahtarını görüntüler. IoT hub'ınıza bağlanmak için sanal modül uygulamasında bu anahtarı kullanırsınız.

Düğüm add.js kullanarak bunu çalıştırın. Cihaz kimliğiniz için bir bağlantı dizesi ve modül kimliğiniz için bir tane daha verir.

Not

IoT Hub kimlik kayıt defteri yalnızca IoT hub'ına güvenli erişim sağlamak amacıyla cihaz ve modül kimliklerini depolar. Kimlik kayıt defteri, cihaz kimliklerini ve anahtarlarını güvenlik kimlik bilgileri olarak kullanmak için depolar. Kimlik kayıt defterinin her cihaz için depoladığı etkin/devre dışı bayrağını kullanarak, ilgili cihaza erişimi devre dışı bırakabilirsiniz. Uygulamanızın cihaza özgü diğer meta verileri depolaması gerekiyorsa uygulamaya özgü bir depo kullanması gerekir. Modül kimlikleri için etkin/devre dışı bayrağı yoktur. Daha fazla bilgi için IoT Hub geliştirici kılavuzundaki IoT Hub'ınızdaki kimlik kayıt defterini anlama bölümüne bakın.

Node.js cihaz SDK'sını kullanarak modül ikizini güncelleştirme

Bu bölümde, simülasyon cihazınızda modül ikizinin bildirilen özelliklerini güncelleştiren bir Node.js uygulaması oluşturacaksınız.

  1. Modülünüzü bağlantı dizesi alın. Azure Portal’ında oturum açın. IoT Hub'ınıza gidin ve IoT cihazları'na tıklayın. myFirstDevice öğesini bulun, açın ve myFirstModule'un başarıyla oluşturulduğunu görürsünüz. Modül bağlantı dizesini kopyalayın. Sonraki adımda gerekecektir.

    Azure portalı modül ayrıntısı

  2. Önceki bölümde yaptığınıza benzer şekilde, cihaz kodunuz için bir dizin oluşturun ve npm kullanarak bunu başlatın ve cihaz SDK'sını yükleyin (npm install -S azure-iot-device-amqp@modules-preview).

    Not

    npm install komutu yavaş görünebilir. Sabırlı olun; paket deposundan çok sayıda kod çekiyor.

    Not

    npm ERR! hata iletisini görürseniz JSON ayrıştırma kayıt defteri hatası, yoksaymak güvenlidir. npm ERR! hata iletisini görürseniz JSON ayrıştırma kayıt defteri hatası, yoksaymak güvenlidir.

  3. twin.js adlı bir dosya oluşturun. Modül kimlik dizenizi kopyalayıp yapıştırın.

    var Client = require('azure-iot-device').Client;
    var Protocol = require('azure-iot-device-amqp').Amqp;
    // Copy/paste your module connection string here.
    var connectionString = '<insert module connection string here>';
    // Create a client using the Amqp protocol.
    var client = Client.fromConnectionString(connectionString, Protocol);
    client.on('error', function (err) {
      console.error(err.message);
    });
    // connect to the hub
    client.open(function(err) {
      if (err) {
        console.error('error connecting to hub: ' + err);
        process.exit(1);
      }
      console.log('client opened');
    // Create device Twin
      client.getTwin(function(err, twin) {
        if (err) {
          console.error('error getting twin: ' + err);
          process.exit(1);
        }
        // Output the current properties
        console.log('twin contents:');
        console.log(twin.properties);
        // Add a handler for desired property changes
        twin.on('properties.desired', function(delta) {
            console.log('new desired properties received:');
            console.log(JSON.stringify(delta));
        });
        // create a patch to send to the hub
        var patch = {
          updateTime: new Date().toString(),
          firmwareVersion:'1.2.1',
          weather:{
            temperature: 72,
            humidity: 17
          }
        };
        // send the patch
        twin.properties.reported.update(patch, function(err) {
          if (err) throw err;
          console.log('twin state reported');
        });
      });
    });
    
  4. Şimdi twin.js komut düğümünü kullanarak bunu çalıştırın.

    F:\temp\module_twin>node twin.js
    

    Ardından şunu görürsünüz:

    client opened
    twin contents:
    { reported: { update: [Function: update], '$version': 1 },
      desired: { '$version': 1 } }
    new desired properties received:
    {"$version":1}
    twin state reported
    

Sonraki adımlar

IoT Hub’ı kullanmaya başlamak ve diğer IoT senaryolarını keşfetmek için bkz: