次の方法で共有


構成済みソリューションのカスタマイズ

Azure IoT Suite で提供される構成済みソリューションを利用すれば、スイート内のサービスを連動させ、エンド ツー エンド ソリューションを提供できます。 これを出発点として、いくつかのポイントで特定のシナリオに合わせてソリューションを拡張したり、カスタマイズしたりできます。 次のセクションでは、これらの一般的なカスタマイズ ポイントの概要を示します。

ソース コードの入手

構成済みソリューションのソース コードは、次のリポジトリの Github で入手できます。

構成済みソリューションのソース コードは、Azure IoT Suite を使用して IoT ソリューションのエンド ツー エンド機能を実装する際に使用されるパターンとプラクティスを示すために提供されています。 ソリューションをビルドしてデプロイする方法の詳細については、GitHub リポジトリを参照してください。

事前構成済みルールの変更

リモート監視ソリューションには、ソリューション内でデバイス情報、テレメトリ、およびルールのロジックを処理するための 3 つの Azure Stream Analytics ジョブが含まれています。

この 3 つの Stream Analytics ジョブとその構文については、「リモート監視の事前構成済みソリューションのチュートリアル」で詳しく説明しています。

これらのジョブを直接編集し、ロジックを変更したり、シナリオに固有のロジックを追加したりすることができます。 Stream Analytics ジョブを見つけるには、次の手順を実行します。

  1. Azure ポータルに移動します。

  2. IoT ソリューションと同じ名前のリソース グループに移動します。

  3. 変更を加える Azure Stream Analytics ジョブを選択します。

  4. コマンド セットから [停止] を選択してジョブを停止します。

  5. 入力、クエリ、および出力を編集します。

    簡単な変更は、ルール ジョブのクエリを "" ではなく "<" を使用するように変更することです。> ルールを編集しても、ソリューション ポータルには ">" が 表示されますが、基になるジョブの変更によって動作がどのように反転されるかに注目してください。

  6. ジョブの開始

注意

リモート監視ダッシュボードは特定のデータによって異なるため、ジョブを変更するとダッシュボードで障害が発生する可能性があります。

独自のルールの追加

構成済みの Azure Stream Analytics ジョブの変更だけでなく、Azure ポータルを使用して、新しいジョブを追加したり、新しいクエリを既存のジョブに追加したりできます。

デバイスのカスタマイズ

最も一般的な拡張アクティビティの 1 つは、シナリオに固有のデバイスの操作です。 デバイスを操作するためのいくつかの方法があります。 これらの方法には、シナリオに合わせたシミュレーション対象デバイスの変更や、IoT デバイス SDK を使用したソリューションへの物理デバイスの接続が含まれます。

デバイスを追加する手順については、IoT Suite とデバイスの接続に関する記事とリモート監視 C SDK サンプルを参照してください。 このサンプルは、リモート監視の事前構成済みソリューションで動作するように設計されています。

独自のシミュレーション対象デバイスの作成

リモート監視ソリューションのソース コード には .NET シミュレーターが含まれています。 このシミュレーターはソリューションの一部としてプロビジョニングされたものであり、異なるメタデータやテレメトリを送信したり、別のコマンドやメソッドに応答したりするように変更できます。

リモート監視の事前構成済みソリューションに含まれるこの事前構成済みシミュレーターでは、温度と湿度に関するテレメトリを出力する冷却デバイスをシミュレートしています。 GitHub リポジトリをフォークしている場合、Simulator.WebJob プロジェクトに含まれるシミュレーターを変更できます。

シミュレーション対象デバイスで利用可能な場所

既定の場所のセットでは、米国ワシントン州のシアトル/レドモンドとなっています。 これらの場所は SampleDeviceFactory.cs で変更できます。

シミュレーターへの必要なプロパティの更新ハンドラーの追加

デバイスの必要なプロパティの値は、ソリューション ポータルで設定できます。 デバイスが必要なプロパティ値を取得したときに、プロパティの変更要求を処理するのは、デバイスの役目です。 必要なプロパティを使用したプロパティ値の変更のサポートを追加するには、シミュレーターにハンドラーを追加する必要があります。

シミュレーターには、ソリューション ポータルで目的の値を設定することで更新できる SetPointTemp プロパティと TelemetryInterval プロパティのハンドラーを含めます。

次の例では、CoolerDevice クラスの必要な SetPointTemp プロパティのハンドラーを示します。

protected async Task OnSetPointTempUpdate(object value)
{
    var telemetry = _telemetryController as ITelemetryWithSetPointTemperature;
    telemetry.SetPointTemperature = Convert.ToDouble(value);

    await SetReportedPropertyAsync(SetPointTempPropertyName, telemetry.SetPointTemperature);
}

このメソッドでは、テレメトリの設定点温度を更新した後、報告されるプロパティを設定して変更を IoT Hub に報告します。

前の例のパターンに従って、独自のプロパティの独自のハンドラーを追加できます。

また、CoolerDevice コンストラクターの次の例のように、必要なプロパティをハンドラーにバインドする必要もあります。

_desiredPropertyUpdateHandlers.Add(SetPointTempPropertyName, OnSetPointTempUpdate);

SetPointTempPropertyName は、"Config.SetPointTemp" として定義されている定数です。

シミュレーターへの新しいメソッドのサポートの追加

シミュレーターをカスタマイズして、新しいメソッド (ダイレクト メソッド) のサポートを追加できます。 2 つの重要な必須の手順があります。

  • シミュレーターでは、事前構成済みソリューションの IoT Hub にメソッドの詳細を通知する必要があります。
  • シミュレーターには、ソリューション エクスプローラーの [デバイスの詳細] パネルから、またはジョブを通じて、メソッドが呼び出された場合にメソッドの呼び出しを処理するコードを含める必要があります。

リモート監視の事前構成済みソリューションでは、報告されるプロパティを使用して、サポートされているメソッドの詳細を IoT Hub に送信します。 ソリューション バックエンドには、各デバイスでサポートされているすべてのメソッドのリストとメソッドの呼び出し履歴が保持されます。 ソリューション ポータルでは、デバイスに関するこれらの情報を表示することや、メソッドを呼び出すことができます。

デバイスがメソッドをサポートしていることを IoT Hub に通知するには、デバイスが、報告されるプロパティで SupportedMethods ノードにメソッドの詳細を追加する必要があります。

"SupportedMethods": {
  "<method signature>": "<method description>",
  "<method signature>": "<method description>"
}

メソッド シグネチャの形式は、<method name>--<parameter #0 name>-<parameter #1 type>-...-<parameter #n name>-<parameter #n type> です。 たとえば、FwPackageURI という名前の文字列パラメーターが必要な InitiateFirmwareUpdate メソッドを指定するには、次のメソッド シグネチャを使用します。

InitiateFirmwareUpate--FwPackageURI-string: "description of method"

サポートされているパラメーターの種類の一覧については、Infrastructure プロジェクトの CommandTypes クラスを参照してください。

メソッドを削除するには、報告されるプロパティでメソッド シグネチャを null に設定します。

注意

ソリューション バックエンドでは、デバイスからデバイス情報メッセージを受信したときにのみ、サポートされているメソッドに関する情報を更新します。

次は、Common プロジェクトの SampleDeviceFactory クラスのコード サンプルです。このサンプルでは、デバイスから送信される報告されるプロパティで SupportedMethods の一覧にメソッドを追加する方法を示しています。

device.Commands.Add(new Command(
    "InitiateFirmwareUpdate",
    DeliveryType.Method,
    "Updates device Firmware. Use parameter 'FwPackageUri' to specifiy the URI of the firmware file, e.g. https://iotrmassets.blob.core.windows.net/firmwares/FW20.bin",
    new[] { new Parameter("FwPackageUri", "string") }
));

このコード スニペットでは、ソリューション ポータルに表示するテキストや必須のメソッド パラメーターの詳細など、InitiateFirmwareUpdate メソッドの詳細を追加します。

このシミュレーターでは、シミュレーターの起動時に、サポートされているメソッドの一覧を含め、報告されるプロパティを IoT Hub に送信します。

サポートされている各メソッドのハンドラーをシミュレーター コードに追加します。 既存のハンドラーは、Simulator.WebJob プロジェクトの CoolerDevice クラスで確認できます。 次の例では、InitiateFirmwareUpdate メソッドのハンドラーを示します。

public async Task<MethodResponse> OnInitiateFirmwareUpdate(MethodRequest methodRequest, object userContext)
{
    if (_deviceManagementTask != null && !_deviceManagementTask.IsCompleted)
    {
        return await Task.FromResult(BuildMethodRespose(new
        {
            Message = "Device is busy"
        }, 409));
    }

    try
    {
        var operation = new FirmwareUpdate(methodRequest);
        _deviceManagementTask = operation.Run(Transport).ContinueWith(async task =>
        {
            // after firmware completed, we reset telemetry
            var telemetry = _telemetryController as ITelemetryWithTemperatureMeanValue;
            if (telemetry != null)
            {
                telemetry.TemperatureMeanValue = 34.5;
            }

            await UpdateReportedTemperatureMeanValue();
        });

        return await Task.FromResult(BuildMethodRespose(new
        {
            Message = "FirmwareUpdate accepted",
            Uri = operation.Uri
        }));
    }
    catch (Exception ex)
    {
        return await Task.FromResult(BuildMethodRespose(new
        {
            Message = ex.Message
        }, 400));
    }
}

メソッド ハンドラー名は、On で始まり、その後にメソッドの名前が続きます。 methodRequest パラメーターには、ソリューション バックエンドからメソッドの呼び出しで渡されたパラメーターが含まれます。 戻り値は、Task<MethodResponse> 型でなければなりません。 BuildMethodResponse ユーティリティ メソッドは、戻り値を作成するのに役立ちます。

メソッド ハンドラー内では、次のことができます。

  • 非同期タスクを開始する。
  • IoT Hub のデバイス ツインから必要なプロパティを取得する。
  • CoolerDevice クラスの SetReportedPropertyAsync メソッドを使用して、1 つの報告されるプロパティを更新します。
  • TwinCollection インスタンスを作成し、Transport.UpdateReportedPropertiesAsync メソッドを呼び出して、複数の報告されるプロパティを更新します。

前のファームウェア更新の例では、次の手順を実行します。

  • デバイスがファームウェアの更新要求を受け入れることができるかどうかを確認します。
  • 非同期でファームウェアの更新操作を開始し、操作が完了したらテレメトリをリセットします。
  • 要求がデバイスによって受け入れられたことを示す "FirmwareUpdate accepted" というメッセージを直ちに返します。

独自の (物理) デバイスの構築と使用

Azure IoT SDK では、IoT ソリューションにさまざまな種類のデバイス (言語およびオペレーティング システム) を接続するためのライブラリが提供されます。

ダッシュボードの制限の変更

ダッシュボードのドロップダウン リストに表示されるデバイスの数

既定では 200 です。 この数は DashboardController.cs で変更できます。

Bing 地図コントロールに表示されるピンの数

既定では 200 です。 この数は TelemetryApiController.cs で変更できます。

テレメトリ グラフの期間

既定では 10 分です。 この値は、TelemetryApiController.cs で変更できます。

フィードバック

このドキュメントでの説明をご希望のカスタマイズがある場合は、 ユーザーの意見募集のページで機能の提案を投稿するか、この記事の下部でコメントしてください。

次の手順

構成済みのソリューションをカスタマイズするためのオプションの詳細については、次のリンク先をご覧ください。