IoT Hub ile buluttan cihaza iletiler gönderme (Node.js)

Azure IoT Hub, milyonlarca cihaz ve bir çözüm arka ucu arasında güvenilir ve güvenli çift yönlü iletişimin etkinleştirilmesine yardımcı olan tam olarak yönetilen bir hizmettir.

Bu makale, şunları nasıl yapacağınızı gösterir:

  • IoT Hub aracılığıyla çözüm arka ucunuzdan tek bir cihaza buluttan cihaza (C2D) iletiler gönderme

  • Cihazda buluttan cihaza iletileri alma

  • IoT Hub'den bir cihaza gönderilen iletiler için çözüm arka ucunuzdan teslim bildirimi (geri bildirim) isteme

Not

Bu makalede açıklanan özellikler yalnızca standart IoT Hub 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ı seçme.

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

  • simple_sample_device: Node.jsiçin Microsoft Azure IoT SDK'sına dahil edilen ve IoT hub'ınıza bağlanan ve buluttan cihaza iletileri alan örnek bir cihaz uygulaması.

  • SendCloudToDevice: IoT Hub aracılığıyla cihaz uygulamasına buluttan cihaza ileti gönderen ve ardından teslim bildirimini alan bir hizmet uygulaması.

Not

IoT Hub, Azure IoT cihaz SDK'ları aracılığıyla birçok cihaz platformu ve dili (C, Java, Python ve JavaScript) için SDK desteğine sahiptir.

Buluttan cihaza iletiler hakkında daha fazla bilgi edinmek için bkz. IoT hub'ından buluttan cihaza iletiler gönderme.

Önkoşullar

  • Azure aboneliği. Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

  • Azure aboneliğinizdeki 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. Henüz bir cihaz kaydetmediyseniz Azure portal bir cihaz kaydedin.

  • Bu makalede, Node.jsiçin Azure IoT SDK'sından alınan örnek kod kullanılır.

    • SDK deposunu GitHub'dan geliştirme makinenize indirin veya kopyalayın.
    • Geliştirme makinenizde Node.js sürüm 10.0.x veya üzerinin yüklü olduğundan emin olun. Geliştirme ortamınızı hazırlama , bu makalenin Node.js Windows veya Linux'a 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 bağlanma (MQTT).

Cihaz bağlantı dizesini alma

Bu makalede, IoT Hub aracılığıyla gönderilen buluttan cihaza iletileri alan bir cihazın benzetimini yapan örnek bir uygulama çalıştıracaksınız. Node.jsiçin Microsoft Azure IoT SDK'sına dahil edilen simple_sample_device örnek uygulaması, IoT hub'ınıza bağlanır ve simülasyon cihazınız olarak görev yapar. Örnek, IoT hub'ınızdaki kayıtlı cihazın birincil bağlantı dizesini kullanır.

IoT hub'ınıza kayıtlı bir cihazın birincil bağlantı dizesini almak için şu 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, Cihaz Yönetimi altında Cihazlar'ı seçin.

  3. Cihaz listesinden uygun cihazı seçin.

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

    Azure portal IoT hub'ınıza kayıtlı bir cihaz için birincil bağlantı dizesinin nasıl alındığını gösteren ekran görüntüsü.

Cihaz uygulamasında ileti alma

Bu bölümde, IoT hub'ınız aracılığıyla gönderilen C2D iletilerini almak için simple_sample_device örnek cihaz uygulamasını çalıştırın. Yeni bir komut istemi açın ve Azure IoT Node.js SDK'sını genişlettiğiniz klasörün altında azure-iot-sdk-node\device\samples\javascript klasörüne gidin. Yer tutucu değerini IoT hub'ınızdaki kayıtlı cihazdan kopyaladığınız cihaz bağlantı dizesiyle değiştirerek {Your device connection string} aşağıdaki komutları çalıştırın.

set IOTHUB_DEVICE_CONNECTION_STRING={Your device connection string}
node simple_sample_device.js

Aşağıdaki çıkış, başarıyla başlatıldıktan ve IoT hub'ınıza bağlandıktan sonra örnek cihaz uygulamasından alınmaktadır:

Client connected
Client connected
Client connected
Sending message: {"deviceId":"myFirstDevice","windSpeed":10.949952400617569,"temperature":26.0096515658525,"humidity":72.59398225838534}
Client connected
Client connected
send status: MessageEnqueued
Sending message: {"deviceId":"myFirstDevice","windSpeed":12.917649160180087,"temperature":27.336831253904613,"humidity":77.37300365434534}

Bu örnekte cihaz, iletiyi işlediğini ve cihaz kuyruğundan güvenli bir şekilde kaldırılabildiğini IoT Hub bildirmek için tam işlevi çağırır. MQTT aktarımı kullanıyorsanız tamamlama çağrısı gerekli değildir ve atlanabilir. AMQP ve HTTPS için gereklidir.

AMQP ve HTTPS ile, ancak MQTT ile değil, cihaz şunları da yapabilir:

  • bir iletiden vazgeçin, bu da IoT Hub gelecekte kullanılmak üzere iletinin cihaz kuyruğunda tutulmasına neden olur.
  • İletiyi reddederek iletiyi cihaz kuyruğundan kalıcı olarak kaldırır.

Cihazın iletiyi tamamlamasını, bırakmasını veya reddetmesini engelleyen bir şey olursa IoT Hub, sabit bir zaman aşımı süresinden sonra iletiyi teslim için yeniden kuyruğa alır. Bu nedenle, aynı iletiyi birden çok kez almak aynı sonucu vermesi için cihaz uygulamasındaki ileti işleme mantığının bir kez etkili olması gerekir.

Buluttan cihaza ileti yaşam döngüsü ve IoT Hub buluttan cihaza iletileri nasıl işlediği hakkında daha fazla bilgi için bkz. IoT hub'ından buluttan cihaza iletiler gönderme.

Not

Aktarım olarak MQTT veya AMQP yerine HTTPS kullanırsanız, İstemci örneği IoT Hub sık sık gelen iletileri denetler (en az 25 dakikada bir). MQTT, AMQP ve HTTPS desteği arasındaki farklar hakkında daha fazla bilgi için bkz. Buluttan cihaza iletişim kılavuzu ve İletişim protokolü seçme.

IoT hub bağlantı dizesini alma

Bu makalede, IoT Hub aracılığıyla buluttan cihaza iletiler göndermek için bir arka uç hizmeti oluşturacaksınız. Buluttan cihaza iletiler göndermek 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 ilkesinin IoT Hub bağlantı dizesini almak için şu 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 ilkesini seçin.

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

Azure portal bağlantı dizesini IoT Hub alma işlemini gösteren ekran görüntüsü.

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

Buluttan cihaza ileti gönderme

Bu bölümde, sanal cihaz uygulamasına buluttan cihaza iletiler gönderen bir Node.js konsol uygulaması oluşturacaksınız. Cihazınızdan cihaz kimliğine ve IoT hub bağlantı dizenize ihtiyacınız vardır.

  1. sendcloudtodevicemessage adlı boş bir klasör oluşturun. Bir komut istemi açın, sendcloudtodevicemessage klasörüne gidin ve ardından bu klasörde bir package.json dosya oluşturmak için aşağıdaki komutu çalıştırın. Komut tarafından npm sunulan her istemde Enter tuşuna basarak bu istem için varsayılanı kabul edin:

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

    npm install azure-iothub --save
    
  3. Metin düzenleyicisi kullanarak sendcloudtodevicemessage klasöründe birSendCloudToDeviceMessage.js dosyası oluşturun.

  4. SendCloudToDeviceMessage.js dosyasının başlangıcına aşağıdaki require deyimleri ekleyin:

    'use strict';
    
    var Client = require('azure-iothub').Client;
    var Message = require('azure-iot-common').Message;
    
  5. Aşağıdaki koduSendCloudToDeviceMessage.js dosyasına ekleyin. "{iot hub bağlantı dizesi}" ve "{device ID}" yer tutucu değerlerini daha önce not ettiğiniz IoT hub bağlantı dizesi ve cihaz kimliği ile değiştirin:

    var connectionString = '{iot hub connection string}';
    var targetDevice = '{device id}';
    
    var serviceClient = Client.fromConnectionString(connectionString);
    
  6. İşlem sonuçlarını konsola yazdırmak için aşağıdaki işlevi ekleyin:

    function printResultFor(op) {
      return function printResult(err, res) {
        if (err) console.log(op + ' error: ' + err.toString());
        if (res) console.log(op + ' status: ' + res.constructor.name);
      };
    }
    
  7. Konsola teslim geri bildirim iletilerini yazdırmak için aşağıdaki işlevi ekleyin:

    function receiveFeedback(err, receiver){
      receiver.on('message', function (msg) {
        console.log('Feedback message:')
        console.log(msg.getData().toString('utf-8'));
      });
    }
    
  8. Cihazınıza ileti göndermek ve cihaz buluttan cihaza iletisini kabul ettiğinde geri bildirim iletisini işlemek için aşağıdaki kodu ekleyin:

    serviceClient.open(function (err) {
      if (err) {
        console.error('Could not connect: ' + err.message);
      } else {
        console.log('Service client connected');
        serviceClient.getFeedbackReceiver(receiveFeedback);
        var message = new Message('Cloud to device message.');
        message.ack = 'full';
        message.messageId = "My Message ID";
        console.log('Sending message: ' + message.getData());
        serviceClient.send(targetDevice, message, printResultFor('send'));
      }
    });
    
  9. SendCloudToDeviceMessage.js dosyasını kaydedin ve kapatın.

Uygulamaları çalıştırma

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

  1. azure-iot-sdk-node\device\samples\javascript klasöründeki komut isteminde, IoT Hub telemetri göndermek ve buluttan cihaza iletileri dinlemek için aşağıdaki komutu çalıştırın:

    node simple_sample_device.js
    

    Simülasyon cihazı uygulamasını çalıştırma

  2. Sendcloudtodevicemessage klasöründeki bir komut isteminde aşağıdaki komutu çalıştırarak buluttan cihaza ileti gönderin ve onay geri bildirimini bekleyin:

    node SendCloudToDeviceMessage.js
    

    Buluttan cihaza komutunu göndermek için uygulamayı çalıştırın

    Not

    Kolaylık olması için, bu makalede herhangi bir yeniden deneme ilkesi uygulanmaz. Üretim kodunda Geçici Hata İşleme makalesinde önerilen şekilde yeniden deneme ilkelerini (üstel geri alma gibi) uygulamanız gerekir.

Sonraki adımlar

Bu makalede, buluttan cihaza ileti göndermeyi ve almayı öğrendiniz.