Cihaz ikizlerini kullanmaya başlama (Node.js)

Cihaz ikizleri; meta veriler, yapılandırmalar ve koşullar gibi cihaz durumu bilgilerini depolayan JSON belgelerdir. IoT Hub, ona bağlanan her cihaz için bir cihaz ikizi kalıcı hale getirmekte.

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.

Cihaz ikizlerini kullanarak:

  • Çözüm arka ucunuzdan cihaz meta verilerini depolayın.

  • Kullanılabilir özellikler ve koşullar gibi geçerli durum bilgilerini (örneğin, kullanılan bağlantı yöntemi) cihaz uygulamanızdan bildirin.

  • Cihaz uygulaması ve arka uç uygulaması arasında üretici yazılımı ve yapılandırma güncelleştirmeleri gibi uzun süre çalışan iş akışlarının durumunu eşitleyin.

  • Cihaz meta verilerinizi, yapılandırmanızı veya durumunuzu sorgular.

Cihaz ikizleri eşitleme ve cihaz yapılandırmalarını ve koşullarını sorgulamak için tasarlanmıştır. Cihaz ikizlerinin ne zaman kullanılacağı da dahil olmak üzere cihaz ikizleri hakkında daha fazla bilgi için bkz . Cihaz ikizlerini anlama.

IoT hub'ları, aşağıdaki öğeleri içeren cihaz ikizlerini depolar:

  • Etiketler' e tıklayın. Cihaz meta verilerine yalnızca çözüm arka ucu tarafından erişilebilir.

  • İstenen özellikler. Çözüm arka ucu tarafından değiştirilebilir ve cihaz uygulaması tarafından gözlemlenebilir JSON nesneleri.

  • Bildirilen özellikler. Cihaz uygulaması tarafından değiştirilebilir ve çözüm arka ucu tarafından okunabilir JSON nesneleri.

Etiketler ve özellikler dizi içeremez, ancak iç içe nesneler içerebilir.

Aşağıdaki çizimde cihaz ikizi kuruluşu gösterilmektedir:

Cihaz ikizi kavram diyagramının ekran görüntüsü.

Ayrıca, çözüm arka ucu yukarıdaki tüm verilere göre cihaz ikizlerini sorgulayabilir. Cihaz ikizleri hakkında daha fazla bilgi için bkz . Cihaz ikizlerini anlama. Sorgulama hakkında daha fazla bilgi için bkz . IoT Hub sorgu dili.

Bu makalede aşağıdaki işlemler hakkında bilgi edinirsiniz:

  • Bağlantı kanalını cihaz ikizinde bildirilen bir özellik olarak raporlamak için sanal bir cihaz uygulaması kullanın.

  • Daha önce oluşturulan etiketlerdeki ve özelliklerdeki filtreleri kullanarak arka uç uygulamanızdaki cihazları sorgular.

Bu makalede iki Node.js konsol uygulaması oluşturacaksınız:

  • AddTagsAndQuery.js: Etiket ekleyen ve cihaz ikizlerini sorgulayan bir arka uç uygulaması.

  • TwinSimulatedDevice.js: IoT hub'ınıza bağlanan ve bağlantı durumunu bildiren sanal bir cihaz uygulaması.

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

Bu makaleyi tamamlamak için gerekenler:

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

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

  • Node.js sürüm 10.0.x veya üzeri.

  • Güvenlik duvarınızda 8883 numaralı bağlantı noktasının açık olduğundan emin olun. 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.

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

Bu makalede, bir cihaz ikizine istenen özellikleri ekleyen bir arka uç hizmeti oluşturacak ve ardından kimlik kayıt defterini sorgulayarak uygun şekilde güncelleştirilmiş bildirilen özelliklere sahip tüm cihazları bulacaksınız. Hizmetinizin bir cihaz ikizinin istenen özelliklerini değiştirmek için hizmet bağlantı iznine ve kimlik kayıt defterini sorgulamak için kayıt defteri okuma iznine ihtiyacı var. Yalnızca bu iki izni içeren varsayılan paylaşılan erişim ilkesi yoktur, bu nedenle bir tane oluşturmanız gerekir.

Hizmet bağlama ve kayıt defteri okuma izinleri veren bir paylaşılan erişim ilkesi oluşturmak ve bu ilke için bir 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 listesinin üst kısmındaki menüden Paylaşılan ilke erişim ilkesi ekle'yi seçin.

  4. Sağdaki Paylaşılan erişim ilkesi ekle bölmesinde, ilkeniz için serviceAndRegistryRead gibi açıklayıcı bir ad girin. İzinler'in altında Kayıt Defteri Okuma ve Hizmet Bağlan'ni ve ardından Ekle'yi seçin.

    Yeni bir paylaşılan erişim ilkesinin nasıl ekleneceğini gösteren ekran görüntüsü.

  5. İlke listesinden yeni ilkenizi seçin.

  6. Birincil bağlantı dizesi için kopyalama simgesini seçin 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.

Bildirilen özellikleri güncelleştiren bir cihaz uygulaması oluşturma

Bu bölümde, hub'ınıza myDeviceId olarak bağlanan bir Node.js konsol uygulaması oluşturacak ve ardından cihaz ikizinizin bildirilen özelliklerini güncelleştirerek hücresel ağ kullanarak bağlandığını onaylaacaksınız.

  1. reportconnectivity adlı yeni bir boş klasör oluşturun. Reportconnectivity klasöründe, komut isteminizde aşağıdaki komutu kullanarak yeni bir package.json dosyası oluşturun. --yes parametresi tüm varsayılan değerleri kabul eder.

    npm init --yes
    
  2. reportconnectivity klasöründeki komut isteminizde aşağıdaki komutu çalıştırarak azure-iot-device ve azure-iot-device-mqtt paketlerini yükleyin:

    npm install azure-iot-device azure-iot-device-mqtt --save
    
  3. Metin düzenleyicisi kullanarak reportconnectivity klasöründe yeni bir Report Bağlan ivity.js dosyası oluşturun.

  4. Rapor Bağlan ivity.js dosyasına aşağıdaki kodu ekleyin. değerini IoT Hub'a bir cihaz kaydettiğinizde gördüğünüz cihaz bağlantı dizesi ile değiştirin{device connection string}:

        'use strict';
        var Client = require('azure-iot-device').Client;
        var Protocol = require('azure-iot-device-mqtt').Mqtt;
    
        var connectionString = '{device connection string}';
        var client = Client.fromConnectionString(connectionString, Protocol);
    
        client.open(function(err) {
        if (err) {
            console.error('could not open IotHub client');
        }  else {
            console.log('client opened');
    
            client.getTwin(function(err, twin) {
            if (err) {
                console.error('could not get twin');
            } else {
                var patch = {
                    connectivity: {
                        type: 'cellular'
                    }
                };
    
                twin.properties.reported.update(patch, function(err) {
                    if (err) {
                        console.error('could not update twin');
                    } else {
                        console.log('twin state reported');
                        process.exit();
                    }
                });
            }
            });
        }
        });
    

    İstemci nesnesi, cihazdan cihaz ikizleriyle etkileşim kurmak için ihtiyacınız olan tüm yöntemleri kullanıma sunar. Önceki kod, İstemci nesnesini başlatıldıktan sonra myDeviceId için cihaz ikizini alır ve bildirilen özelliğini bağlantı bilgileriyle güncelleştirir.

  5. Cihaz uygulamasını çalıştırma

        node ReportConnectivity.js
    

    iletisini twin state reportedgörmeniz gerekir.

  6. Cihaz artık bağlantı bilgilerini bildirdiği için her iki sorguda da görünmelidir. addtagsandqueryapp klasörüne geri dönün ve sorguları yeniden çalıştırın:

        node AddTagsAndQuery.js
    

    Bu kez myDeviceId her iki sorgu sonuçlarında da görünmelidir.

    Her iki sorgu sonucunda da myDeviceId değerini göster

İstenen özellikleri ve sorgu ikizlerini güncelleştiren bir hizmet uygulaması oluşturma

Bu bölümde, myDeviceId ile ilişkilendirilmiş cihaz ikizi için konum meta verileri ekleyen bir Node.js konsol uygulaması oluşturacaksınız. Uygulama, ABD'de bulunan cihazlar için IoT hub'ını sorgular ve ardından hücresel ağ bağlantısı bildiren cihazları sorgular.

  1. addtagsandqueryapp adlı yeni bir boş klasör oluşturun. addtagsandqueryapp klasöründe, komut isteminizde aşağıdaki komutu kullanarak yeni bir package.json dosyası oluşturun. --yes parametresi tüm varsayılan değerleri kabul eder.

    npm init --yes
    
  2. addtagsandqueryapp klasöründeki komut isteminizde aşağıdaki komutu çalıştırarak azure-iothub paketini yükleyin:

    npm install azure-iothub --save
    
  3. Metin düzenleyicisi kullanarak addtagsandqueryapp klasöründe yeni bir AddTagsAndQuery.js dosyası oluşturun.

  4. aşağıdaki kodu AddTagsAndQuery.js dosyasına ekleyin. değerini, IoT hub'ını alma bağlantı dizesi'nde kopyaladığınız IoT Hub bağlantı dizesi ile değiştirin{iot hub connection string}.

         'use strict';
         var iothub = require('azure-iothub');
         var connectionString = '{iot hub connection string}';
         var registry = iothub.Registry.fromConnectionString(connectionString);
    
         registry.getTwin('myDeviceId', function(err, twin){
             if (err) {
                 console.error(err.constructor.name + ': ' + err.message);
             } else {
                 var patch = {
                     tags: {
                         location: {
                             region: 'US',
                             plant: 'Redmond43'
                       }
                     }
                 };
    
                 twin.update(patch, function(err) {
                   if (err) {
                     console.error('Could not update twin: ' + err.constructor.name + ': ' + err.message);
                   } else {
                     console.log(twin.deviceId + ' twin updated successfully');
                     queryTwins();
                   }
                 });
             }
         });
    

    Registry nesnesi, hizmetten cihaz ikizleriyle etkileşim kurmak için gereken tüm yöntemleri kullanıma sunar. Önceki kod önce Registry nesnesini başlatır, ardından myDeviceId için cihaz ikizini alır ve son olarak etiketlerini istenen konum bilgileriyle güncelleştirir.

    Etiketleri güncelleştirdikten sonra queryTwins işlevini çağırır.

  5. queryTwins işlevini uygulamak için AddTagsAndQuery.js sonuna aşağıdaki kodu ekleyin:

         var queryTwins = function() {
             var query = registry.createQuery("SELECT * FROM devices WHERE tags.location.plant = 'Redmond43'", 100);
             query.nextAsTwin(function(err, results) {
                 if (err) {
                     console.error('Failed to fetch the results: ' + err.message);
                 } else {
                     console.log("Devices in Redmond43: " + results.map(function(twin) {return twin.deviceId}).join(','));
                 }
             });
    
             query = registry.createQuery("SELECT * FROM devices WHERE tags.location.plant = 'Redmond43' AND properties.reported.connectivity.type = 'cellular'", 100);
             query.nextAsTwin(function(err, results) {
                 if (err) {
                     console.error('Failed to fetch the results: ' + err.message);
                 } else {
                     console.log("Devices in Redmond43 using cellular network: " + results.map(function(twin) {return twin.deviceId}).join(','));
                 }
             });
         };
    

    Önceki kod iki sorgu yürütür: birincisi yalnızca Redmond43 tesisinde bulunan cihazların cihaz ikizlerini seçer ve ikincisi sorguyu yalnızca hücresel ağ üzerinden bağlanan cihazları seçecek şekilde daraltıyor.

    Kod sorgu nesnesini oluşturduğunda, ikinci parametrede döndürülen belge sayısı üst sınırını belirtir. Sorgu nesnesi, tüm sonuçları almak için nextAsTwin yöntemlerini birden çok kez çağırmak için kullanabileceğiniz bir hasMoreResults boole özelliği içerir. Sonraki adlı bir yöntem, örneğin toplama sorgularının sonuçları gibi cihaz ikizleri olmayan sonuçlar için kullanılabilir.

  6. Uygulamayı şu şekilde çalıştırın:

        node AddTagsAndQuery.js
    

    Sorgunun sonuçlarında redmond43'te bulunan tüm cihazları soran ve sonuçları hücresel ağ kullanan cihazlarla kısıtlayan sorgu için hiçbiri olmayan bir cihaz görmeniz gerekir.

    Sorgu sonuçlarında tek bir cihazı görme

Bu makalede şunları yapacaksınız:

  • Arka uç uygulamasından etiket olarak cihaz meta verileri eklendi
  • Cihaz ikizinde bildirilen cihaz bağlantı bilgileri
  • SQL benzeri IoT Hub sorgu dilini kullanarak cihaz ikizi bilgilerini sorguladık

Sonraki adımlar

Şunlar hakkında bilgi edinmek için: