Azure IoT Suite で提供される構成済みソリューションは、スイート内のサービスが連携してエンドツーエンドのソリューションを提供する方法を示しています。 この出発点から、特定のシナリオに合わせてソリューションを拡張およびカスタマイズできるさまざまな場所があります。 次のセクションでは、これらの一般的なカスタマイズ ポイントについて説明します。
ソース コードを見つける
構成済みソリューションのソース コードは、次のリポジトリの GitHub で入手できます。
- リモート監視: https://www.github.com/Azure/azure-iot-remote-monitoring
- 予測メンテナンス: https://github.com/Azure/azure-iot-predictive-maintenance
- 接続された工場: https://github.com/Azure/azure-iot-connected-factory
構成済みソリューションのソース コードは、Azure IoT Suite を使用して IoT ソリューションのエンド ツー エンド機能を実装するために使用されるパターンとプラクティスを示すために提供されています。 ソリューションをビルドしてデプロイする方法の詳細については、GitHub リポジトリを参照してください。
構成済みの規則を変更する
リモート監視ソリューションには、ソリューション内のデバイス情報、テレメトリ、ルール ロジックを処理する 3 つの Azure Stream Analytics ジョブが含まれています。
3 つのストリーム分析ジョブとその構文については、 リモート監視の構成済みソリューションのチュートリアルで詳しく説明されています。
これらのジョブを直接編集してロジックを変更したり、シナリオに固有のロジックを追加したりできます。 Stream Analytics ジョブは次のように見つかります。
Azure ポータルに移動します。
IoT ソリューションと同じ名前のリソース グループに移動します。
変更する Azure Stream Analytics ジョブを選択します。
一連のコマンドで [停止 ] を選択して、ジョブを停止します。
入力、クエリ、出力を編集します。
簡単な変更は、">" ではなく "<" を使用するように Rules ジョブのクエリを変更することです。 ルールを編集しても、ソリューション ポータルには ">" が 表示されますが、基になるジョブの変更によって動作がどのように反転されるかに注目してください。
仕事を始める
注
リモート監視ダッシュボードは特定のデータに依存するため、ジョブを変更するとダッシュボードが失敗する可能性があります。
独自のルールを追加する
構成済みの Azure Stream Analytics ジョブを変更するだけでなく、Azure portal を使用して新しいジョブを追加したり、既存のジョブに新しいクエリを追加したりできます。
デバイスをカスタマイズする
最も一般的な拡張機能アクティビティの 1 つは、シナリオに固有のデバイスの操作です。 デバイスを操作するには、いくつかの方法があります。 これらの方法には、シナリオに合わせてシミュレートされたデバイスを変更する方法や、 IoT Device SDK を使用して物理デバイスをソリューションに接続する方法が含まれます。
デバイスを追加するための詳細なガイドについては、 IoT Suite のデバイス接続 に関する記事と リモート監視 C SDK サンプルを参照してください。 このサンプルは、リモート監視の構成済みソリューションを使用するように設計されています。
独自のシミュレートされたデバイスを作成する
リモート監視ソリューションのソース コードに含まれているのは、.NET シミュレーターです。 このシミュレーターはソリューションの一部としてプロビジョニングされたシミュレーターであり、さまざまなメタデータ、テレメトリを送信し、さまざまなコマンドやメソッドに応答するように変更できます。
リモート監視構成済みソリューションの事前構成済みシミュレーターは、温度と湿度のテレメトリを出力するクーラー デバイスをシミュレートします。 シミュレーターは、GitHub リポジトリをフォークしたときに Simulator.WebJob プロジェクトで変更できます。
シミュレートされたデバイスで使用可能な場所
既定の場所のセットは、米国ワシントン州シアトル/レドモンドにあります。 これらの場所は 、SampleDeviceFactory.csで変更できます。
シミュレーターに必要なプロパティ更新ハンドラーを追加する
ソリューション ポータルで、デバイスに必要なプロパティの値を設定できます。 デバイスが目的のプロパティ値を取得するときに、プロパティ変更要求を処理するのはデバイスの役割です。 目的のプロパティを使用してプロパティ値の変更のサポートを追加するには、シミュレーターにハンドラーを追加する必要があります。
シミュレーターには、ソリューション ポータルで目的の値を設定して更新できる SetPointTemp プロパティと TelemetryInterval プロパティのハンドラーが含まれています。
次の例は、CoolerDevice クラスの SetPointTemp desired プロパティのハンドラーを示しています。
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 ハブにメソッドの詳細を通知する必要があります。
- シミュレーターには、ソリューション エクスプローラーの [デバイスの詳細 ] パネルまたはジョブからメソッド呼び出しを呼び出すときにメソッド呼び出しを処理するコードを含める必要があります。
リモート監視構成済みソリューションでは、 報告されたプロパティ を使用して、サポートされているメソッドの詳細を IoT ハブに送信します。 ソリューション バックエンドでは、各デバイスでサポートされているすべてのメソッドの一覧と、メソッド呼び出しの履歴が保持されます。 デバイスに関するこの情報を表示し、ソリューション ポータルでメソッドを呼び出すことができます。
デバイスがメソッドをサポートしていることを IoT ハブに通知するには、デバイスが報告されたプロパティの SupportedMethods ノードにメソッドの詳細を追加する必要があります。
"SupportedMethods": {
"<method signature>": "<method description>",
"<method signature>": "<method description>"
}
メソッド シグネチャの形式は次のとおりです: <method name>--<parameter #0 name>-<parameter #1 type>-...-<parameter #n name>-<parameter #n type>
。 たとえば、 InitiateFirmwareUpdate メソッドに FwPackageURI という名前の文字列パラメーターを指定するには、次のメソッド シグネチャを使用します。
InitiateFirmwareUpate--FwPackageURI-string: "description of method"
サポートされているパラメーター型の一覧については、インフラストラクチャ プロジェクトの 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 分です。 この値は 、TelmetryApiController.csで変更できます。
フィードバック
このドキュメントで説明するカスタマイズはありますか? User Voice に機能の提案を追加するか、この記事にコメントします。
次のステップ
構成済みソリューションをカスタマイズするためのオプションの詳細については、以下を参照してください。
- ロジック アプリを Azure IoT Suite リモート監視構成済みソリューションに接続
- リモート監視構成済みソリューションで動的テレメトリを使用
- リモート監視構成済みソリューション におけるデバイス情報メタデータ
- コネクテッド ファクトリ ソリューションで OPC UA サーバーからのデータを表示する方法をカスタマイズする