Бөлісу құралы:


Начало работы с удостоверением модуля и двойником модуля в Центре Интернета вещей Azure IoT Hub (Node.js)

Удостоверение и двойник модуля аналогичны удостоверению и двойнику устройства Центра Интернета вещей Azure, однако они предоставляют более высокую степень детализации. В то время как удостоверение и двойник устройства Центра Интернета вещей Azure позволяют серверному приложению настраивать устройство и получать данные о состоянии устройства, удостоверение и двойник модуля предоставляют эти возможности для отдельных компонентов устройства. Благодаря этому можно изолировать конфигурацию и условия для каждого компонента на совместимых устройствах с несколькими компонентами, например устройствах на основе операционной системы или устройствах со встроенным ПО.

Примечание

Функции, описанные в этой статье, доступны только на стандартном уровне Центра Интернета вещей. Дополнительные сведения о базовых и стандартных и бесплатных уровнях Центр Интернета вещей см. в статье Выбор подходящего уровня Центр Интернета вещей для решения.

По завершении работы с этой статьей у вас будет два приложения Node.js:

  • CreateIdentities создает удостоверение устройства и модуля, а также соответствующий ключ безопасности для подключения к клиентам устройства и модуля.

  • UpdateModuleTwinReportedProperties отправляет обновленные сообщаемые свойства двойника модуля в Центр Интернета вещей.

Примечание

Дополнительные сведения о средствах sdk, доступных для создания приложений для устройств и внутренних приложений, см. в статье Пакеты SDK для Интернета вещей Azure.

Предварительные требования

  • Центр Интернета вещей. Создайте его с помощью CLI или портала Azure.

  • Node.js 10.0.x или более поздней версии. В разделе Подготовка среды разработки описана установка Node.js для работы с настоящей статьей в ОС Windows или Linux.

Проверка подлинности модуля

Для проверки подлинности удостоверений модулей можно использовать симметричные ключи или сертификаты X.509. Для проверки подлинности сертификата X.509 сертификат модуля должен иметь общее имя (CN) в CN=<deviceid>/<moduleid>формате . Пример:

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

Получение строки подключения центра Интернета вещей

Работая с этой статьей, вы создадите внутреннюю службу, которая сначала добавит устройство в реестр удостоверений, а затем добавит модуль на это устройство. Службе требуется разрешение на запись в реестр. По умолчанию каждый Центр Интернета вещей создается с помощью политики общего доступа, называемой registryReadWrite, которая предоставляет это разрешение.

Чтобы получить строку подключения Центра Интернета вещей для политики registryReadWrite, выполните следующие действия:

  1. На портале Azure выберите Группы ресурсов. Выберите группу ресурсов, в которой находится центр, а затем выберите центр из списка ресурсов.

  2. В левой части центра выберите Политики общего доступа.

  3. В списке политик выберите политику registryReadWrite.

  4. Скопируйте основную строку подключения и сохраните значение.

    Снимок экрана: получение строки подключения

Дополнительные сведения о политиках и разрешениях общего доступа Центра Интернета вещей см. в разделе Управления доступом и разрешения.

Создание удостоверения устройства и удостоверения модуля в Центре Интернета вещей

В этом разделе объясняется, как создать приложение Node.js, создающее удостоверение устройства и удостоверение модуля в реестре удостоверений Центра Интернета вещей. Устройства и модули не могут подключаться к центру Интернета вещей, если в реестре удостоверений для них нет соответствующей записи. Дополнительные сведения см. в статье Сведения о реестре удостоверений в центре Интернета вещей. Запущенное консольное приложение создает уникальные идентификаторы и ключи одновременно для устройства и для модуля. Идентификатор и ключ чувствительны к регистру. Устройство и модуль применяют эти значения для идентификации при отправке сообщений с устройства в облако в Центр Интернета вещей.

  1. Создайте каталог для размещения файлов с кодом.

  2. Выполните в этом каталоге команду npm init -y, чтобы создать пустой файл package.json со значениями по умолчанию. Это файл проекта, в котором будет содержаться код.

  3. Выполнитеnpm install -S azure-iothub@modules-preview, чтобы установить пакет SDK службы в подкаталоге node_modules.

    Примечание

    Слово module в имени подкаталога node_modules обозначает "библиотеку узла". Он не имеет никакого отношения к модулям Центра Интернета вещей.

  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 и удостоверение модуля с идентификатором myFirstModule на устройстве myFirstDevice. (Если такой идентификатор модуля уже существует в реестре удостоверений, код просто извлекает сведения о существующем модуле.) Затем приложение отображает первичный ключ для такого удостоверения. Этот ключ будет использоваться в приложении виртуального модуля для подключения к Центру Интернета вещей.

Выполните его для узла add.js. Так вы получите строку подключения для удостоверения устройства и еще одну для удостоверения модуля.

Примечание

В реестре удостоверений в Центре Интернета вещей хранятся только удостоверения устройств и модулей, необходимые для защиты доступа к Центру Интернета вещей. Реестр удостоверений хранит идентификаторы устройств и ключи, используемые в качестве учетных данных безопасности. Реестр удостоверений также хранит флаги включения и отключения для каждого устройства. Эти флаги можно использовать для отключения доступа для этого устройства. Если в приложении необходимо хранить другие метаданные для конкретного устройства, следует использовать хранилище конкретного приложения. У вас нет возможности включать и отключать удостоверения модулей. Дополнительные сведения см. в статье Сведения о реестре удостоверений в Центре Интернета вещей в руководстве разработчика этого Центра.

Обновление двойника модуля с помощью пакета SDK для устройства на Node.js

В этом разделе объясняется, как на имитированном устройстве создать приложение Node.js, которое обновляет сообщаемые свойства двойника модуля.

  1. Получение строки подключения модуля. Войдите на портал Azure. Перейдите к Центр Интернета вещей и выберите Устройства Интернета вещей. Найдите устройство myFirstDevice, откройте его и вы увидите, что модуль myFirstModule успешно создан. Скопируйте строку подключения модуля. Она понадобится на следующем шаге.

    Сведения о модуле на портале Azure

  2. Как и в предыдущем разделе, создайте каталог для кода устройства, используйте NPM для его инициализации и установки пакета SDK для устройства (npm install -S azure-iot-device-amqp@modules-preview).

    Примечание

    Команда npm install может показаться довольно медленной. Будьте терпеливы; она извлекает большой объем кода из репозитория пакетов.

    Примечание

    Если вы увидите ошибку "npm ERR! registry error parsing json" (Ошибка реестра при синтаксическом анализе JSON), можете проигнорировать ее. Если вы увидите ошибку "npm ERR! registry error parsing json" (Ошибка реестра при синтаксическом анализе 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. Теперь запустите этот файл командой node 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
    

Дальнейшие действия

Чтобы продолжить знакомство с Центром Интернета вещей и изучить другие сценарии Интернета вещей, см. следующие ресурсы: