Aracılığıyla paylaş


Cihaz yönetimini kullanmaya başlama (Node.js)

Arka uç uygulamaları, cihazlarda cihaz yönetimi eylemlerini uzaktan başlatmak ve izlemek için cihaz ikizleri ve doğrudan yöntemler gibi Azure IoT Hub temel öğelerini kullanabilir. Bu makalede bir arka uç uygulamasının ve cihaz uygulamasının IoT Hub'ı kullanarak uzak cihaz yeniden başlatmayı başlatmak ve izlemek için birlikte nasıl çalışabileceği gösterilir.

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.

Buluttaki bir arka uç uygulamasından cihaz yönetimi eylemlerini (yeniden başlatma, fabrika sıfırlama ve üretici yazılımı güncelleştirmesi gibi) başlatmak için doğrudan bir yöntem kullanın. Cihaz aşağıdakiler için sorumludur:

  • IoT Hub'dan gönderilen yöntem isteğini işleme.

  • Cihazda ilgili cihaza özgü eylemi başlatma.

  • IoT Hub'a bildirilen özellikler aracılığıyla durum güncelleştirmeleri sağlama.

Cihaz yönetimi eylemlerinizin ilerleme durumunu raporlamak üzere cihaz ikizi sorguları çalıştırmak için bulutta bir arka uç uygulaması kullanabilirsiniz.

Bu makalede şunların nasıl oluşturulacağı gösterilmektedir:

  • dmpatterns_getstarted_device.js: Cihazı yeniden başlatan ve son yeniden başlatma zamanını bildiren doğrudan bir yönteme sahip sanal cihaz uygulaması. Doğrudan yöntemler buluttan çağrılır.

  • dmpatterns_getstarted_service.js: IoT hub'ınız aracılığıyla sanal cihaz uygulamasında doğrudan yöntemi çağıran bir .NET konsol uygulaması. Yanıtı görüntüler ve bildirilen özellikleri güncelleştirir.

Önkoşullar

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

  • IoT hub'ınıza kayıtlı bir cihaz. IoT hub'ınızda bir cihaz yoksa Cihazı kaydetme bölümünde yer alan adımları izleyin.

  • 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.

  • 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ğlanma.

Doğrudan yöntemle cihaz uygulaması oluşturma

Bu bölümde şunları yapacaksınız:

  • Bulut tarafından çağrılan doğrudan bir yönteme yanıt veren bir Node.js konsol uygulaması oluşturun.

  • Simülasyon cihazı yeniden başlatmayı tetikleme.

  • Cihaz ikizi sorgularının cihazları ve en son ne zaman yeniden başlatıldıklarını tanımlamasını sağlamak için bildirilen özellikleri kullanın.

  1. managed-device adlı boş bir klasör oluşturun. Yönetilen cihaz klasöründe, komut isteminizde aşağıdaki komutu kullanarak bir package.json dosyası oluşturun. Tüm varsayılanları kabul edin:

    npm init
    
  2. Yönetilen cihaz klasöründeki komut isteminizde aşağıdaki komutu çalıştırarak azure-iot-device Cihaz SDK'sı paketini ve azure-iot-device-mqtt paketini yükleyin:

    npm install azure-iot-device azure-iot-device-mqtt --save
    
  3. Bir metin düzenleyicisi kullanarak yönetilen cihaz klasöründe bir dmpatterns_getstarted_device.js dosyası oluşturun.

  4. dmpatterns_getstarted_device.js dosyasının başlangıcına aşağıdaki 'require' deyimlerini ekleyin:

    'use strict';
    
    var Client = require('azure-iot-device').Client;
    var Protocol = require('azure-iot-device-mqtt').Mqtt;
    
  5. Bir connectionString değişkeni ekleyin ve bir İstemci örneği oluşturmak için bunu kullanın. {yourdeviceconnectionstring} Yer tutucu değerini IoT Hub'ına bir cihaz kaydettiğinizde gördüğünüz cihaz bağlantı dizesi değiştirin:

    var connectionString = '{yourdeviceconnectionstring}';
    var client = Client.fromConnectionString(connectionString, Protocol);
    
  6. Cihazda doğrudan yöntemi uygulamak için aşağıdaki işlevi ekleyin

    var onReboot = function(request, response) {
    
        // Respond the cloud app for the direct method
        response.send(200, 'Reboot started', function(err) {
            if (err) {
                console.error('An error occurred when sending a method response:\n' + err.toString());
            } else {
                console.log('Response to method \'' + request.methodName + '\' sent successfully.');
            }
        });
    
        // Report the reboot before the physical restart
        var date = new Date();
        var patch = {
            iothubDM : {
                reboot : {
                    lastReboot : date.toISOString(),
                }
            }
        };
    
        // Get device Twin
        client.getTwin(function(err, twin) {
            if (err) {
                console.error('could not get twin');
            } else {
                console.log('twin acquired');
                twin.properties.reported.update(patch, function(err) {
                    if (err) throw err;
                    console.log('Device reboot twin state reported')
                });  
            }
        });
    
        // Add your device's reboot API for physical restart.
        console.log('Rebooting!');
    };
    
  7. IoT hub'ınıza bağlantıyı açın ve doğrudan yöntem dinleyicisini başlatın:

    client.open(function(err) {
        if (err) {
            console.error('Could not open IotHub client');
        }  else {
            console.log('Client opened.  Waiting for reboot method.');
            client.onDeviceMethod('reboot', onReboot);
        }
    });
    
  8. dmpatterns_getstarted_device.js dosyasını kaydedin ve kapatın.

Not

İşleri basit tutmak için bu makalede yeniden deneme ilkesi uygulanmaz. Üretim kodunda Geçici Hata İşleme makalesinde önerilen yeniden deneme ilkelerini (üstel geri alma gibi) uygulamanız gerekir.

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

Bu makalede, bir cihazda doğrudan yöntem çağıran bir arka uç hizmeti oluşturacaksınız. IoT Hub aracılığıyla bir cihazda doğrudan yöntem çağırmak için hizmetinizin hizmet bağlama 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.

Yeniden başlatmayı tetikleyen bir hizmet uygulaması oluşturma

Bu bölümde, doğrudan bir yöntem kullanarak bir cihazda uzaktan yeniden başlatma başlatan bir Node.js konsol uygulaması oluşturacaksınız. Uygulama, cihaz için son yeniden başlatma zamanını bulmak için cihaz ikizi sorgularını kullanır.

  1. Cihazda trigger-reboot-on-device adlı boş bir klasör oluşturun. Trigger-reboot-on-device klasöründe, komut isteminizde aşağıdaki komutu kullanarak bir package.json dosyası oluşturun. Tüm varsayılanları kabul edin:

    npm init
    
  2. Trigger-reboot-on-device klasöründeki komut isteminde aşağıdaki komutu çalıştırarak azure-iothub Cihaz SDK'sı paketini ve azure-iot-device-mqtt paketini yükleyin:

    npm install azure-iothub --save
    
  3. Bir metin düzenleyicisi kullanarak tetikleyici-cihazdaki yeniden başlatma klasöründe bir dmpatterns_getstarted_service.js dosyası oluşturun.

  4. dmpatterns_getstarted_service.js dosyasının başlangıcına aşağıdaki 'require' deyimlerini ekleyin:

    'use strict';
    
    var Registry = require('azure-iothub').Registry;
    var Client = require('azure-iothub').Client;
    
  5. Aşağıdaki değişken bildirimlerini ekleyin ve yer tutucu değerini Daha önce IoT hub'ını alma bağlantı dizesi kopyaladığınız IoT hub bağlantı dizesi değiştirin{iothubconnectionstring}:

    var connectionString = '{iothubconnectionstring}';
    var registry = Registry.fromConnectionString(connectionString);
    var client = Client.fromConnectionString(connectionString);
    var deviceToReboot = 'myDeviceId';
    
  6. Hedef cihazı yeniden başlatmak için cihaz yöntemini çağırmak için aşağıdaki işlevi ekleyin:

    var startRebootDevice = function(twin) {
    
        var methodName = "reboot";
    
        var methodParams = {
            methodName: methodName,
            payload: null,
            timeoutInSeconds: 30
        };
    
        client.invokeDeviceMethod(deviceToReboot, methodParams, function(err, result) {
            if (err) {
                console.error("Direct method error: "+err.message);
            } else {
                console.log("Successfully invoked the device to reboot.");  
            }
        });
    };
    
  7. Cihazı sorgulamak ve son yeniden başlatma zamanını almak için aşağıdaki işlevi ekleyin:

    var queryTwinLastReboot = function() {
    
        registry.getTwin(deviceToReboot, function(err, twin){
    
            if (twin.properties.reported.iothubDM != null)
            {
                if (err) {
                    console.error('Could not query twins: ' + err.constructor.name + ': ' + err.message);
                } else {
                    var lastRebootTime = twin.properties.reported.iothubDM.reboot.lastReboot;
                    console.log('Last reboot time: ' + JSON.stringify(lastRebootTime, null, 2));
                }
            } else 
                console.log('Waiting for device to report last reboot time.');
        });
    };
    
  8. Yeniden başlatma doğrudan yöntemini tetikleyen işlevleri çağırmak ve son yeniden başlatma zamanı için sorgu yapmak için aşağıdaki kodu ekleyin:

    startRebootDevice();
    setInterval(queryTwinLastReboot, 2000);
    
  9. dmpatterns_getstarted_service.js dosyasını kaydedin ve kapatın.

Uygulamaları çalıştırma

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

  1. Managed-device klasöründeki komut isteminde, yeniden başlatma doğrudan yöntemini dinlemeye başlamak için aşağıdaki komutu çalıştırın.

    node dmpatterns_getstarted_device.js
    
  2. Trigger-reboot-on-device klasöründeki komut isteminde aşağıdaki komutu çalıştırarak uzaktan yeniden başlatmayı tetikleyin ve cihaz ikizinin son yeniden başlatma zamanını bulması için sorgu yapın.

    node dmpatterns_getstarted_service.js
    
  3. Yeniden başlatma doğrudan yöntemine cihaz yanıtını ve konsolunda yeniden başlatma durumunu görürsünüz.

    Aşağıda, hizmet tarafından gönderilen yeniden başlatma doğrudan yöntemine cihaz yanıtı gösterilmektedir:

    manageddevice uygulama çıkışı

    Aşağıda, yeniden başlatmayı tetikleyen ve cihaz ikizini son yeniden başlatma süresi için yoklayan hizmet gösterilmektedir:

    triggerrebootondevice uygulama çıkışı

Cihaz yönetimi eylemlerini özelleştirme ve genişletme

IoT çözümleriniz tanımlı cihaz yönetimi desenleri kümesini genişletebilir veya cihaz ikizi ve buluttan cihaza yöntemi temel öğelerini kullanarak özel desenleri etkinleştirebilir. Cihaz yönetimi eylemlerine diğer örnekler arasında fabrika sıfırlaması, üretici yazılımı güncelleştirmesi, yazılım güncelleştirmesi, güç yönetimi, ağ ve bağlantı yönetimi ve veri şifreleme sayılabilir.

Cihaz bakım pencereleri

Genellikle, cihazları kesintileri ve kapalı kalma süresini en aza indiren bir zamanda eylem gerçekleştirecek şekilde yapılandırırsınız. Cihaz bakım pencereleri, bir cihazın yapılandırmasını güncelleştirme zamanını tanımlamak için yaygın olarak kullanılan bir desendir. Arka uç çözümleriniz, cihazınızda bakım penceresi sağlayan bir ilke tanımlamak ve etkinleştirmek için cihaz ikizinin istenen özelliklerini kullanabilir. Cihaz bakım penceresi ilkesini aldığında, ilkenin durumunu bildirmek için cihaz ikizinin bildirilen özelliğini kullanabilir. Arka uç uygulaması daha sonra cihaz ikizi sorgularını kullanarak cihazların ve her ilkenin uyumluluğunu kanıtlayabilir.

Sonraki adımlar

Bu makalede, bir cihazda uzaktan yeniden başlatma tetikleme için doğrudan bir yöntem kullandınız. Bildirilen özellikleri kullanarak cihazdan son yeniden başlatma zamanını bildirdiniz ve cihazın buluttan son yeniden başlatma zamanını bulmak için cihaz ikizini sorguladıysanız.

ToToTo, Raspberry Pi 3 B+ Başvuru Görüntüsünü kullanarak Azure IoT Hub için Cihaz Güncelleştirmesi makalesinde IoT Hub'ı ve uçtan uca görüntü tabanlı güncelleştirme gibi cihaz yönetimi desenlerini kullanmaya devam etmek için.

IoT çözümünüzü genişletmeyi ve yöntem çağrılarını birden çok cihazda zamanlamayı öğrenmek için bkz . İşleri zamanlama ve yayınlama.