Share via


Azure Portal 및 .NET 디바이스를 사용하여 IoT Hub 모듈 ID 및 모듈 쌍을 시작합니다.

모듈 ID 및 모듈 쌍은 Azure IoT Hub 디바이스 ID 및 디바이스 쌍과 비슷하지만 더 자세한 세분성을 제공합니다. Azure IoT Hub 장치 ID와 장치 쌍은 백 엔드 응용 프로그램에서 장치를 구성할 수 있도록 하고 장치 상태를 표시하는 반면, 모듈 ID와 모듈 쌍은 장치의 개별 구성 요소에 대해 해당 기능을 제공합니다. 운영 체제 디바이스 또는 펌웨어 디바이스와 같이 여러 구성 요소가 있는 가능한 디바이스에서 모듈 ID와 모듈 쌍은 각 구성 요소에 대해 격리된 구성과 상태를 허용합니다.

참고 항목

이 문서에서 설명하는 기능은 IoT Hub의 표준 계층에서만 사용할 수 있습니다. 기본 및 표준/무료 IoT Hub 계층에 대한 자세한 내용은 솔루션에 적합한 IoT Hub 계층 선택을 참조하세요.

이 아티클에서는 다음 방법을 설명합니다.

  • 포털에서 모듈 ID 만들기

  • .NET 디바이스 SDK를 사용하여 디바이스에서 모듈 쌍을 업데이트합니다.

참고 항목

디바이스 및 백 엔드 앱을 빌드하는 데 사용할 수 있는 SDK 도구에 대한 자세한 내용은 Azure IoT SDK를 참조하세요.

필수 조건

  • Visual Studio.

  • IoT 허브. CLI 또는 Azure Portal을 사용하여 만듭니다.

  • 등록된 디바이스. Azure Portal에 하나를 등록합니다.

모듈 인증

대칭 키 또는 X.509 인증서를 사용하여 모듈 ID를 인증할 수 있습니다. X.509 인증서 인증의 경우 모듈의 인증서에는 반드시CN=<deviceid>/<moduleid>와 같은 형식의 CN(일반 이름)이 있어야 합니다. 예시:

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

포털에서 모듈 ID 만들기

하나의 디바이스 ID 내에 최대 20개의 모듈 ID를 만들 수 있습니다. ID를 추가하려면 다음 단계를 수행합니다.

  1. Azure Portal의 기존 디바이스에서 모듈 ID 추가를 선택하여 첫 번째 모듈 ID를 만듭니다.

  2. 이름으로 myFirstModule을 입력합니다. 모듈 ID를 저장합니다.

    Screenshot that shows the 'Module Identity Details' page.

    새 모듈 ID가 화면 맨 아래에 나타납니다. 새 모듈 ID를 선택하여 모듈 ID 세부 정보를 확인합니다.

    Screenshot that shows the Module Identity Details menu.

연결 문자열(기본 키)을 저장합니다. 다음 섹션에서 콘솔 앱에서 디바이스의 모듈을 설정하는 데 사용합니다.

.NET 디바이스 SDK를 사용하여 모듈 쌍 업데이트

이제 시뮬레이션된 디바이스에서 클라우드와 통신해 보겠습니다. 모듈 ID가 만들어지면 모듈 쌍이 IoT Hub에서 암시적으로 생성됩니다. 이 섹션에서는 시뮬레이션된 디바이스에 모듈 쌍 reported 속성을 업데이트하는 .NET 콘솔 앱을 만듭니다.

Visual Studio 프로젝트 만들기

모듈 쌍의 reported 속성을 업데이트하는 앱을 만들려면 다음 단계를 수행합니다.

  1. Visual Studio에서 새 프로젝트 만들기, 콘솔 앱(.NET Framework), 다음 순으로 선택합니다.

  2. 새 프로젝트 구성에서 프로젝트 이름으로 UpdateModuleTwinReportedProperties를 입력합니다. 다음을 선택하여 작업을 계속할 수 있습니다.

    Screenshot showing the 'Configure your new project' popup.

  3. 기본 .NET 프레임워크를 유지한 다음 만들기를 선택합니다.

최신 Azure IoT Hub .NET 디바이스 SDK 설치

모듈 ID 및 모듈 쌍은 IoT Hub 시험판 디바이스 SDK에서만 사용할 수 있습니다. 설치하려면 다음 단계를 수행합니다.

  1. Visual Studio에서 도구>NuGet 패키지 관리자>솔루션용 NuGet 패키지 관리를 엽니다.

  2. 찾아보기를 선택한 다음 시험판 포함을 선택합니다. Microsoft.Azure.Devices.Client를 검색합니다. 최신 버전을 선택하고 설치합니다.

    Screenshot showing how to install the Microsoft.Azure.Devices.Client.

    이제 모든 모듈 기능에 액세스할 수 있습니다.

UpdateModuleTwinReportedProperties 콘솔 앱 만들기

앱을 만들려면 다음 단계를 수행합니다.

  1. Program.cs 파일 위에 다음 using 문을 추가합니다.
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. Program 클래스에 OnDesiredPropertyChanged 메서드를 추가합니다.
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 프로토콜을 사용하여 모듈 쌍을 검색하고 reported 속성을 업데이트할 수 있습니다.

다음 단계

계속해서 IoT Hub을 시작하고 다른 IoT 시나리오를 탐색하려면 다음을 참조하세요.