Поделиться через


Начало работы с удостоверением модуля и двойником модуля IoT Hub с использованием портала Azure и устройства на базе .NET.

Идентификаторы и двойники модуля аналогичны идентификаторам и двойникам устройства в Azure IoT Hub, однако они обеспечивают бóльшую детализацию. Хотя удостоверение устройства и двойник устройства в Azure IoT Hub обеспечивают возможность серверному приложению настраивать устройство и предоставлять информацию о его состоянии, удостоверение и двойник модуля предлагают такие возможности для отдельных компонентов устройства. На устройствах с возможностями и несколькими компонентами, такими как устройства с операционной системой или устройства с микропрограммным обеспечением, идентификаторы модулей и двойники модулей позволяют обеспечивать изолированную конфигурацию и условия для каждого компонента.

Примечание.

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

В этой статье раскрываются следующие темы:

  • Создайте идентификатор модуля в портале.

  • Используйте SDK для .NET-устройства, чтобы обновить модульный двойник на устройстве.

Примечание.

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

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

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

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

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

Создание идентификатора модуля в портале

В рамках одного идентификатора устройства можно создать до 20 идентификаторов модуля. Чтобы добавить удостоверение, следуйте этим шагам:

  1. На существующем устройстве на портале Azure выберите Добавить удостоверение модуля, чтобы создать свое первое удостоверение модуля.

  2. Введите имя myFirstModule. Сохраните идентификатор модуля.

  3. В нижней части экрана появится ваш новый идентификатор модуля. Выберите его, чтобы просмотреть сведения о идентификации модуля.

  4. Сохраните строку подключения (первичный ключ). Это значение будет использоваться в следующем разделе для настройки модуля на устройстве в консольном приложении.

    Снимок экрана, на котором показано меню

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

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

Создание проекта Visual Studio

Чтобы создать приложение, которое обновляет сообщаемые свойства двойника модуля:

  1. В Visual Studio последовательно выберите элементы Создать новый проект и Консольное приложение (.NET Framework). Затем нажмите кнопку Далее.

  2. В окне настройки нового проекта введите в поле Имя проекта значение UpdateModuleTwinReportedProperties. Выберите Далее для продолжения.

    Снимок экрана: всплывающее окно

  3. Оставьте платформу .NET по умолчанию и нажмите кнопку Создать.

Установите последний пакет SDK для устройств .NET в Azure IoT Hub.

Функции идентификации модуля и его двойника доступны только в предварительных версиях SDK для IoT Hub. Чтобы установить расширение, выполните следующие действия:

  1. В Visual Studio выберите элементы Сервис>Диспетчер пакетов NuGet>Управление пакетами NuGet для решения

  2. Нажмите Обзор, а затем Включить предварительные выпуски. Найдите Microsoft.Azure.Devices.Client. Выберите последнюю версию и установите ее.

    Снимок экрана: установка Microsoft.Azure.Devices.Client.

    Теперь у вас есть доступ ко всем возможностям этого модуля.

Создание консольного приложения UpdateModuleTwinReportedProperties

Внимание

В этой статье представлена инструкция по подключению устройства с использованием подписи общего доступа, также называемой аутентификацией по симметричному ключу. Этот метод проверки подлинности удобнее для тестирования и оценки, но проверка подлинности устройства с помощью сертификатов X.509 является более безопасным подходом. Дополнительные сведения см. в разделе Лучшие методы обеспечения безопасности IoT-решений > Безопасность подключения.

Выполните следующие действия, чтобы создать приложение:

  1. Добавьте следующие инструкции using в начало файла Program.cs :
using Microsoft.Azure.Devices.Client;
using Microsoft.Azure.Devices.Shared;
using Newtonsoft.Json;
  1. Добавьте следующие поля в класс Program . Замените заполнитель строкой подключения к модулю, которую вы сохранили ранее.
private const string ModuleConnectionString = "<Your module connection string>";
private static ModuleClient Client = null;
  1. Добавьте метод OnDesiredPropertyChanged в класс Program:
private static async Task OnDesiredPropertyChanged(TwinCollection desiredProperties, object userContext)
    {
        Console.WriteLine("desired property change:");
        Console.WriteLine(JsonConvert.SerializeObject(desiredProperties));
        Console.WriteLine("Sending current time as reported property");
        TwinCollection reportedProperties = new TwinCollection
        {
            ["DateTimeLastDesiredPropertyChangeReceived"] = DateTime.Now
        };

        await Client.UpdateReportedPropertiesAsync(reportedProperties).ConfigureAwait(false);
    }
  1. Наконец, замените метод Main следующим кодом:
static void Main(string[] args)
{
    Microsoft.Azure.Devices.Client.TransportType transport = Microsoft.Azure.Devices.Client.TransportType.Amqp;

    try
    {
        Client = ModuleClient.CreateFromConnectionString(ModuleConnectionString, transport);
        Client.SetConnectionStatusChangesHandler(ConnectionStatusChangeHandler);
        Client.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertyChanged, null).Wait();

        Console.WriteLine("Retrieving twin");
        var twinTask = Client.GetTwinAsync();
        twinTask.Wait();
        var twin = twinTask.Result;
        Console.WriteLine(JsonConvert.SerializeObject(twin));

        Console.WriteLine("Sending app start time as reported property");
        TwinCollection reportedProperties = new TwinCollection();
        reportedProperties["DateTimeLastAppLaunch"] = DateTime.Now;

        Client.UpdateReportedPropertiesAsync(reportedProperties);
    }
    catch (AggregateException ex)
    {
        Console.WriteLine("Error in sample: {0}", ex);
    }

    Console.WriteLine("Waiting for Events.  Press enter to exit...");
    Console.ReadKey();
    Client.CloseAsync().Wait();
}

private static void ConnectionStatusChangeHandler(ConnectionStatus status, ConnectionStatusChangeReason reason)
{
    Console.WriteLine($"Status {status} changed: {reason}");
}

Вы можете создать и запустить это приложение с помощью клавиши F5.

Теперь вы знаете, как извлечь двойник модуля и обновить сообщаемые свойства с помощью протокола AMQP.

Следующие шаги

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