Azure portal と .NET デバイスを使用した Azure IoT Hub モジュール ID とモジュール ツインの概要

モジュール ID とモジュール ツインは Azure IoT Hub のデバイス ID とデバイス ツインに類似していますが、より細かい粒度で設定できます。 Azure IoT Hub のデバイス ID とデバイス ツインを使用した場合、バックエンド アプリケーションからデバイスを構成し、デバイスの状態を可視化できるのに対し、モジュール ID とモジュール ツインでは、デバイスのコンポーネントごとにこれらの機能を実現できます。 複数のコンポーネントで構成され、この機能をサポートしているデバイス (オペレーティング システム デバイスやファームウェア デバイスなど) では、モジュール ID とモジュール ツインにより、各コンポーネントの構成と状態を分離することができます。

注意

この記事で説明されている機能は、Standard レベルの IoT Hub でのみ使用できます。 Basic および Standard または Free レベルの IoT Hub の詳細については、ソリューションに適した IoT Hub のレベルの選択に関するページを参照してください。

この記事では、次のことについて説明します。

  • モジュール ID をポータルで作成する。

  • .NET デバイス SDK を使用して、モジュール ツインをデバイスから更新する。

注意

デバイスとバックエンド アプリの両方の構築に使用できる SDK ツールに関する詳細については、「Azure IoT Hub SDK」を参照してください。

前提条件

  • 見ることができます。

  • IoT Hub。 CLI または Azure portal を使って作成します。

  • 登録済みのデバイス。 Azure portal に登録してください。

モジュールの認証

モジュールの認証には、対称キーまたは X.509 証明書を使用することができます。 X.509 証明書認証の場合、モジュールの証明書には、CN=<deviceid>/<moduleid> のような書式のモジュールの共通名が含まれている "必要があります"。 次に例を示します。

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

モジュール ID をポータルで作成する

1 つのデバイス ID 内には、最大 20 個のモジュール ID を作成できます。 ID を追加するには、次の手順を実行します。

  1. Azure portal 内の既存のデバイスから、[モジュール ID の追加] を選択して、最初のモジュール ID を作成します。

  2. myFirstModule という名前を入力します。 モジュール ID を保存します。

    [モジュール ID の詳細] ページを示すスクリーンショット。

    新しいモジュール ID は画面の下部に表示されます。 それを選択すると、モジュール ID の詳細が表示されます。

    [モジュール ID の詳細] メニューを示すスクリーンショット。

接続文字列 (主キー) を保存します。 次のセクションでそれを使用して、コンソール アプリでデバイス上にモジュールを設定します。

.NET デバイス SDK を使用してモジュール ツインを更新する

次に、シミュレートされたデバイスからクラウドに通信してみましょう。 モジュール ID が作成されると、IoT Hub 内でモジュール ツインが暗黙的に作成されます。 このセクションでは、モジュール ツインによって報告されるプロパティを更新する、シミュレートされたデバイス上に.NET を作成するコンソール アプリを作成します。

Visual Studio プロジェクトを作成する

モジュール ツインの報告されるプロパティを更新するアプリを作成するには、次の手順を実行します。

  1. Visual Studio で、 [新しいプロジェクトの作成] を選択します。 [コンソール アプリ (.NET Framework)] を選択し、 [次へ] を選択します。

  2. [新しいプロジェクトの構成] で、 [プロジェクト名] として「UpdateModuleTwinReportedProperties」と入力します。 [次へ] を選択して続行します。

    [新しいプロジェクトの構成] ポップアップを示すスクリーンショット。

  3. 既定の .NET Framework を保持し、[作成] を選択します。

最新の Azure IoT Hub .NET デバイス SDK をインストールする

モジュール ID とモジュール ツインは、IoT Hub プレリリース デバイス SDK でのみ使用できます。 インストールするには、次の手順に従います。

  1. Visual Studio で、 [ツール]>[NuGet パッケージ マネージャー]>[ソリューションの NuGet パッケージの管理] を開きます。

  2. [参照] を選択し、 [プレリリースを含める] を選択します。 「Microsoft.Azure.Devices.Client」を検索します。 最新のバージョンを選択し、インストールします。

    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. 次の 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 プロトコルを使って更新する方法がわかりました。

次のステップ

引き続き IoT Hub の使用方法を確認すると共に、他の IoT のシナリオについて調べるには、次のページを参照してください。