ابدأ باستخدام هوية وحدة IoT Hub والوحدة المزدوجة (Node.js)

تتشابه هويات الوحدة وتوائم الوحدة النمطيةمع هوية معرف جهاز Azure IoT Hub وجهاز التوأم، ولكنها توفر دقة فائقة. في حين أن هوية معرف جهاز Azure IoT Hub وتوائم الجهاز تمكن التطبيق الخلفي من تكوين جهاز وتوفر رؤية على ظروف الجهاز، توفر هوية الوحدة النمطية والوحدة المزدوجة هذه الإمكانات للمكونات الفردية للجهاز. على الأجهزة القادرة ذات المكونات المتعددة، مثل أجهزة نظام التشغيل أو أجهزة البرامج الثابتة، فإنه يسمح بتكوينات وشروط معزولة لكل مكون.

ملاحظة

الميزات الموضحة في هذه المقالة متوفرة فقط في المستوى القياسي لـ IoT Hub. لمزيد من المعلومات حول مستويات IoT Hub الأساسية والقياسية/المجانية، راجع اختيار طبقة IoT Hub المناسبة للحل الخاص بك.

في نهاية هذه المقالة، سيكون لديك تطبيقان Node.js:

  • CreateIdentities: يُنشئ هوية جهاز وهوية الوحدة ومفاتيح أمان مرتبطة لتوصيل جهازك الخاص وعملاء الوحدة.

  • UpdateModuleTwinReportedProperties: يرسل خصائص وحدة مزدوجة مُحدَّثة والخصائص المُبلَّغ عنها إلى IoT Hub خاصتك.

ملاحظة

لمزيد من المعلومات حول أدوات SDK المتوفرة لإنشاء كل من الجهاز والتطبيقات الخلفية، راجع Azure IoT SDKs.

المتطلبات الأساسية

مصادقة الوحدة النمطية

يمكنك استخدام مفاتيح متماثلة أو شهادات X.509 لمصادقة هويات الوحدة النمطية. لمصادقة شهادة X.509، يجب أن يكون لشهادة الوحدة النمطية اسمها الشائع (CN) منسق مثل CN=<deviceid>/<moduleid>. على سبيل المثال:

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

الحصول على سلسلة اتصال لوحة الوصل لـIoT

في هذه المقالة، يتوفر إنشاء خدمة خلفية تضيف جهازًا في سجل الهوية ثم تضيف وحدة نمطية إلى هذا الجهاز. تتطلب خدمتك إذن كتابة سجل. بطريقة افتراضية، يتم إنشاء كافة مراكز IoT باستخدام نهج الوصول المشترك يسمى registryReadWrite التي تمنح هذا الإذن.

للحصول على سلسلة اتصال IoT Hub لنهج registryReadWrite، اتبع الخطوات التالية:

  1. في مدخل Microsoft Azure، حدد Resource groups. حدد مجموعة الموارد حيث يوجد المركز الخاص بك، ثم حدد المركز الخاص بك من قائمة الموارد.

  2. في الجزء الأيسر من مركزك، قم بتحديد سياسات الوصول المشترك.

  3. من قائمة النهج، حدد نهج registryReadWrite.

  4. انسخ سلسلة الاتصال الأساسية واحفظ القيمة.

    لقطة شاشة تعرض الطريقة لاستعادة سلسلة الاتصال

لمزيد من المعلومات حول نهج الوصول المشترك لمركز IoT والأذونات، راجع التحكم بالوصول وأذونات الوصول.

أنشئ هوية جهاز وهوية وحدة في IoT Hub

في هذا القسم، تقوم بإنشاء تطبيق Node.js الذي يقوم بإنشاء هوية الجهاز وهوية الوحدة النمطية في سجل الهوية في مركز إنترنت الأشياء الخاص بك. لا يمكن لجهاز أو وحدة نمطية الاتصال بلوحة وصلIoT ما لم يكن بها إدخال في سجل الهوية. للمزيد من المعلومات، راجع فهم تسجيل الهوية في مركز IoT في دليل مطور IoT Hub. عند تشغيل تطبيق وحدة التحكم المذكور، فإنه ينشئ معرفًا فريدًا ومفتاحًا لكل من الجهاز والوحدة النمطية. المعرف والمفتاح حساسان لحالة الأحرف. يستخدم الجهاز الخاص بك والوحدة النمطية هذه القيم لتعريف نفسه عندما يرسل رسائل من جهاز إلى سحابة إلى IoT Hub.

  1. إنشاء دليل يحتوي على التعليمات البرمجية الخاصة بك.

  2. داخل هذا الدليل، قم أولاً بتشغيل npm init -y لإنشاء package.json فارغ مع الإعدادات الافتراضية. هذا هو ملف المشروع للتعليمات البرمجية الخاصة بك.

  3. قم بتشغيل npm install -S azure-iothub@modules-preview لتثبيت SDK للخدمة داخل الدليل الفرعي node_modules.

    ملاحظة

    يستخدم اسم الدليل الفرعي node_modules الوحدة النمطية للكلمة لتعني "مكتبة عقدة". المصطلح هنا ليس له علاقة بوحدات مركز IoT.

  4. إنشاء ملف .js التالي في الدليل الخاص بك. قم بتسميته add.js. انسخ والصق سلسلة اتصال المركز واسم المركز.

    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);
        });
      });
    });
    
    

ينشئ هذا التطبيق هوية جهاز بمعرف myFirstDevice وهوية الوحدة النمطية مع ID myFirstModule ضمن الجهاز myFirstDevice. (في حالة كان معرف الوحدة النمطية هذا موجودًا بالفعل في سجل الهوية، فإن التعليمات البرمجية تسترد ببساطة معلومات الوحدة النمطية الموجودة.) ثم يعرض التطبيق المفتاح الأساس لتلك الهوية. يمكنك استخدام هذا المفتاح في تطبيق الوحدة النمطية للاتصال بمحور IoT الخاص بك.

تشغيل هذا باستخدام عقدة add.js. وسوف تعطيك سلسلة اتصال لهوية جهازك وآخر لهوية الوحدة النمطية الخاصة بك.

ملاحظة

يخزن سجل الهوية الخاص بمركز IoT هويات الجهاز والوحدة فحسب لتمكين الوصول الآمن إلى مركز IoT. يخزن سجل الهوية معرفات الجهاز والمفاتيح لاستخدامها بصفتها بيانات اعتماد أمان. يخزن السجل الخاص بالهوية أيضا علامة ممكنة/معطلة لكل جهاز يمكنك استخدامه لتعطيل الوصول لهذا الجهاز. في حالة كان التطبيق الخاص بك يحتاج إلى تخزين بيانات تعريف أخرى خاصة بالجهاز، فيجب أن يستخدم مخزنًا خاصًا بالتطبيق. لا توجد علامة ممكنة/معطلة للهويات الخاصة بالوحدة النمطية. لمزيد من المعلومات، راجع فهم تسجيل الهوية في مركز IoT في دليل مطور IoT Hub.

قم بتحديث الوحدة النمطية المزدوجة باستخدام جهاز Node.js SDK

في هذا القسم، تقوم بإنشاء تطبيق Node.js على جهازك المحاكى الذي يقوم بتحديث خصائص الوحدة المزدوجة التي تم الإبلاغ عنها.

  1. يمكنك الحصول على سلسلة اتصال الوحدة الخاصة بك. تسجيل الدخول إلى ⁧⁩مدخل Microsoft Azure⁧⁩. انتقل إلى IoT Hub وحدد أجهزة IoT. ابحث عن myFirstDevice وافتحه وسترى أن myFirstModule قد تم إنشاؤه بنجاح. انسخ سلسلة اتصال الخاصة بالوحدة النمطية. توجد حاجة إليها في الخطوة التالية.

    تفاصيل وحدة مدخل Microsoft Azure

  2. على غرار ما قمت به في القسم السابق، قم بإنشاء دليل للتعليمات البرمجية لجهازك واستخدم NPM لتهيئة الجهاز SDK وتثبيته (npm install -S azure-iot-device-amqp@modules-preview).

    ملاحظة

    قد يبدو أمر تثبيت npm بطيئاَ. التحلي بالصبر؛ إنه يسحب الكثير من التعليمات البرمجية من مستودع الحزمة.

    ملاحظة

    إذا رأيت خطأ يشير إلى npm ERR! خطأ التسجيل في تحليل json، هذا أمر آمن لتجاهله. إذا رأيت خطأ يشير إلى npm ERR! خطأ التسجيل في تحليل json، هذا أمر آمن لتجاهله.

  3. إنشاء ملف يسمى twin.js. انسخ سلسلة هوية الوحدة النمطية والصقها.

    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. الآن، قم بتشغيل هذا باستخدام عقدة الأمر twin.js.

    F:\temp\module_twin>node twin.js
    

    سترى بعد ذلك:

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

الخطوات التالية

لمتابعة عملية بدء استخدام IoT Hub واستكشاف سيناريوهات IoT الأخرى، راجع: