リモート監視の事前構成済みソリューションでカスタム規則を作成する

はじめに

構成済みのソリューションで、デバイスのテレメトリ値が一定のしきい値に達したときにトリガーする規則を設定できます。 「事前構成済みのリモート監視ソリューションによる動的テレメトリの使用」では、ExternalTemperature など、テレメトリのカスタム値をソリューションに追加する方法について説明しています。 この記事では、ソリューションの動的テレメトリ タイプのカスタム規則を作成する方法を説明します。

このチュートリアルでは、変更を加えやすい単純な Node.js のシミュレーション対象デバイスを使用して、動的テレメトリを生成し、構成済みソリューションのバックエンドに送信します。 そして、RemoteMonitoring Visual Studio ソリューションにカスタム規則を追加して、そのカスタマイズしたバックエンドを Azure サブスクリプションにデプロイします。

このチュートリアルを完了するには、次のものが必要です。

  • 有効な Azure サブスクリプション アカウントがない場合は、無料試用版のアカウントを数分で作成することができます。 詳細については、「Azure の無料試用版サイト」を参照してください。
  • シミュレートされたデバイスを作成するための Node.js バージョン 0.12.x 以降。
  • 構成済みソリューションのバックエンドを新しい規則で変更するための Visual Studio 2015 または Visual Studio 2017。

ソリューションのプロビジョニング

リモート監視の事前構成済みソリューションをアカウントにまだプロビジョニングしていない場合は、次の手順を実施します。

  1. Azure アカウントの資格情報を使用して azureiotsuite.com にサインインし、[]+ をクリックしてソリューションを作成します。
  2. [リモート監視] タイルで [選択] タイルを選択します。
  3. リモート監視の事前構成済みソリューションの [ソリューション名] を入力します。
  4. ソリューションのプロビジョニングに使用するリージョンサブスクリプションを選択します。
  5. [ソリューションの作成] をクリックして、プロビジョニング プロセスを開始します。 通常、このプロセスの実行までに数分かかります。

プロビジョニング プロセスが完了するまで待機します。

  1. プロビジョニング の状態を表示する、目的のソリューションのタイルをクリックします。
  2. Azure サービスが Azure サブスクリプションにデプロイされたら、 プロビジョニングの状態 を確認します。
  3. プロビジョニングが完了すると、状態が [準備完了]に変わります。
  4. タイルをクリックし、右側のウィンドウでソリューションの詳細を確認します。

注意

構成済みソリューションのデプロイの問題が発生している場合は、「azureiotsuite.com サイトでのアクセス許可」と FAQ を参照してください。 それでも問題が解決しない場合は、ポータルでサービス チケットを作成してください。

ソリューションの一覧に予測どおりに表示されない詳細がありますか? ユーザーの声のページで機能に関する提案をお寄せください。

デプロイに選択したソリューション名をメモしておきます。 このソリューション名は本チュートリアルの後半で必要になります。

Node.js のシミュレーション対象デバイスの構成

  1. リモート監視ダッシュボードで [+ デバイスの追加] をクリックし、"カスタム デバイス" を追加します。 IoT Hub のホスト名、デバイス ID、デバイス キーをメモします。 これらの情報は、後でこのチュートリアルの中で remote_monitoring.js デバイス クライアント アプリケーションを準備するときに必要となります。

  2. 開発コンピューターに Node.js のバージョン 0.12.x 以降がインストールされていることを確認します。 バージョンを確認するには、コマンド プロンプトまたはシェルから「 node --version 」を実行します。 パッケージ マネージャーを使用して Linux に Node.js をインストールする方法については、パッケージ マネージャーによる Node.js のインストールに関するページを参照してください。

  3. Node.js をインストールしたら、ご使用の開発コンピューターに最新バージョンの azure-iot-sdk-node リポジトリを複製します。 最新バージョンのライブラリとサンプルを入手するために、必ず master ブランチを使用してください。

  4. ローカルにコピーした azure-iot-sdk-node リポジトリの node/device/samples フォルダーから次の 2 つのファイルを開発コンピューター上の空のフォルダーにコピーします。

    • packages.json
    • remote_monitoring.js
  5. remote_monitoring.js ファイルを開き、次の変数の定義を探します。

    var connectionString = "[IoT Hub device connection string]";
    
  6. [IoT Hub device connection string] を、デバイスの接続文字列に置き換えます。 手順 1. でメモした IoT Hub のホスト名、デバイス ID、デバイス キーの値を使用してください。 デバイスの接続文字列は、次の形式にする必要があります。

    HostName={your IoT Hub hostname};DeviceId={your device id};SharedAccessKey={your device key}
    

    IoT Hub のホスト名が contoso、デバイス ID が mydevice の場合、接続文字列は以下のようになります。

    var connectionString = "HostName=contoso.azure-devices.net;DeviceId=mydevice;SharedAccessKey=2s ... =="
    
  7. ファイルを保存します。 これらのファイルが格納されているフォルダーから、シェルまたはコマンド プロンプトで次のコマンドを実行して必要なパッケージをインストールし、サンプル アプリケーションを実行します。

    npm install
    node remote_monitoring.js
    

作動中の動的テレメトリの観察

ダッシュボードには、既に実行されているシミュレーション対象デバイスから取得した温度と湿度のテレメトリが表示されます。

The default dashboard

前のセクションで実行した Node.js のシミュレーション対象デバイスを選択した場合は、温度、湿度、外部温度のテレメトリが表示されます。

Add external temperature to the dashboard

このリモート監視ソリューションは、その他の種類の外部温度テレメトリを自動的に検出し、ダッシュボード上のグラフに追加します。

構成済みソリューションに ExternalTemperature テレメトリを送信していることを確認したら、Node.js コンソール アプリを停止できます。 ソリューションにカスタム規則を追加した後でこの Node.js コンソール アプリをもう一度実行するため、コンソール ウィンドウは開いたままにしておきます。

規則の保存先

規則についての情報は、次の 2 つの場所に保存されます。

  • DeviceRulesNormalizedTable テーブル – このテーブルには、ソリューション ポータルで定義された規則への正規化された参照が保存されます。 ソリューション ポータルにデバイス ルールが表示されるときは、規則の定義をこのテーブルに照会します。
  • DeviceRules BLOB – この BLOB には、登録されているすべてのデバイスに対して定義されたすべての規則が保存され、Azure Stream Analytics ジョブへの参照入力として定義されます。   既存の規則を更新するか、ソリューション ポータルで新しい規則を定義すると、テーブルと BLOB の両方が更新され、変更が反映されます。 ポータルに表示される規則の定義はテーブル ストアから取得され、Stream Analytics ジョブが参照する規則の定義は BLOB から取得されます。

RemoteMonitoring Visual Studio ソリューションを更新する

RemoteMonitoring Visual Studio ソリューションを変更して、シミュレートされたデバイスから送信された ExternalTemperature テレメトリを使用する新しい規則を含める方法は、次のとおりです。

  1. まだ実行していない場合は、次の Git コマンドを使用して、azure-iot-remote-monitoring リポジトリをローカル コンピューターの適切な場所に複製します。

    git clone https://github.com/Azure/azure-iot-remote-monitoring.git
    
  2. Visual Studio で、azure-iot-remote-monitoring リポジトリのローカル コピーから RemoteMonitoring.sln ファイルを開きます。

  3. Infrastructure\Models\DeviceRuleBlobEntity.cs ファイルを開いて、次のように ExternalTemperature プロパティを追加します。

    public double? Temperature { get; set; }
    public double? Humidity { get; set; }
    public double? ExternalTemperature { get; set; }
    
  4. 同じファイルで、次のように ExternalTemperatureRuleOutput プロパティを追加します。

    public string TemperatureRuleOutput { get; set; }
    public string HumidityRuleOutput { get; set; }
    public string ExternalTemperatureRuleOutput { get; set; }
    
  5. Infrastructure\Models\DeviceRuleDataFields.cs ファイルを開いて、次のように、既存の Humidity プロパティの後に ExternalTemperature プロパティを追加します。

    public static string ExternalTemperature
    {
    

    get { return "ExternalTemperature"; } }```

  1. 同じファイルで、次のように、_availableDataFields メソッドを更新して ExternalTemperature を含めます。

    private static List<string> _availableDataFields = new List<string>
    {                    
        Temperature, Humidity, ExternalTemperature
    };
    

7. Infrastructure\Repository\DeviceRulesRepository.cs ファイルを開き、次のように BuildBlobEntityListFromTableRows メソッドを変更します。

```csharp
else if (rule.DataField == DeviceRuleDataFields.Humidity)
{
    entity.Humidity = rule.Threshold;
    entity.HumidityRuleOutput = rule.RuleOutput;
}
else if (rule.DataField == DeviceRuleDataFields.ExternalTemperature)
{
  entity.ExternalTemperature = rule.Threshold;
  entity.ExternalTemperatureRuleOutput = rule.RuleOutput;
}
```

ソリューションをリビルドして再デプロイする

更新したソリューションを Azure サブスクリプションにデプロイできるようになりました。

  1. 管理者特権のコマンド プロンプトを開いて、azure-iot-remote-monitoring リポジトリのローカル コピーのルートに移動します。

  2. 更新したソリューションをデプロイするには、次のコマンドの {deployment name} を、さきほどメモした構成済みソリューションのデプロイの名前に置き換えて実行します。

    build.cmd cloud release {deployment name}
    

Stream Analytics ジョブを更新する

デプロイが完了したら、Stream Analytics ジョブを更新して新しいルール定義を使用できます。

  1. Azure Portal で、構成済みのソリューション リソースを含むリソース グループに移動します。 このリソース グループの名前は、デプロイ時にソリューションに指定した名前と同じです。

  2. {deployment name}-Rules Stream Analytics ジョブに移動します。

3. [ 停止 ] をクリックして Stream Analytics ジョブの実行を停止します。 (クエリを編集する前に、ストリーミング ジョブが停止するのを待つ必要があります。)

4. [クエリ] をクリック します。 クエリを編集して、ExternalTemperatureSELECT ステートメントを含めます。 次の例は、新しいSELECT ステートメントを含む完全なクエリです。

```
WITH AlarmsData AS 
(
SELECT
     Stream.IoTHub.ConnectionDeviceId AS DeviceId,
     'Temperature' as ReadingType,
     Stream.Temperature as Reading,
     Ref.Temperature as Threshold,
     Ref.TemperatureRuleOutput as RuleOutput,
     Stream.EventEnqueuedUtcTime AS [Time]
FROM IoTTelemetryStream Stream
JOIN DeviceRulesBlob Ref ON Stream.IoTHub.ConnectionDeviceId = Ref.DeviceID
WHERE
     Ref.Temperature IS NOT null AND Stream.Temperature > Ref.Temperature
 
UNION ALL
 
SELECT
     Stream.IoTHub.ConnectionDeviceId AS DeviceId,
     'Humidity' as ReadingType,
     Stream.Humidity as Reading,
     Ref.Humidity as Threshold,
     Ref.HumidityRuleOutput as RuleOutput,
     Stream.EventEnqueuedUtcTime AS [Time]
FROM IoTTelemetryStream Stream
JOIN DeviceRulesBlob Ref ON Stream.IoTHub.ConnectionDeviceId = Ref.DeviceID
WHERE
     Ref.Humidity IS NOT null AND Stream.Humidity > Ref.Humidity
 
UNION ALL
 
SELECT
     Stream.IoTHub.ConnectionDeviceId AS DeviceId,
     'ExternalTemperature' as ReadingType,
     Stream.ExternalTemperature as Reading,
     Ref.ExternalTemperature as Threshold,
     Ref.ExternalTemperatureRuleOutput as RuleOutput,
     Stream.EventEnqueuedUtcTime AS [Time]
FROM IoTTelemetryStream Stream
JOIN DeviceRulesBlob Ref ON Stream.IoTHub.ConnectionDeviceId = Ref.DeviceID
WHERE
     Ref.ExternalTemperature IS NOT null AND Stream.ExternalTemperature > Ref.ExternalTemperature
)
 
SELECT *
INTO DeviceRulesMonitoring
FROM AlarmsData
 
SELECT *
INTO DeviceRulesHub
FROM AlarmsData
```
  1. [保存] をクリックして、更新した規則クエリを変更します。

  2. [Start (開始)] をクリックして、Stream Analytics ジョブの実行を再開します。

ダッシュ ボードに新しい規則を追加する

ExternalTemperature 規則をソリューション ダッシュボードのデバイスに追加できるようになりました。

  1. ソリューション ポータルに移動します。

2. [デバイス ] パネルに移動します。

3. ExternalTemperature テレメトリを送信するカスタム デバイスを探し、[ デバイスの詳細] パネルで [規則の 追加] をクリックします。

4. データ フィールドExternalTemperature を選択します。

  1. [Threshold (しきい値)] を 56 に設定します。 次に、[規則の保存と表示] をクリックします。

  2. ダッシュボードに戻り、アラーム履歴を表示します。

  3. 開いたままにしておいたコンソール ウィンドウで Node.js コンソール アプリを起動して、ExternalTemperature テレメトリ データの送信を開始します。

8. 新しいルールがトリガーされると、 アラーム履歴 テーブルに新しいアラームが表示されます。  

関連情報

演算子の変更 > はかなり複雑で、このチュートリアルで説明する手順の範囲を超えています。 Stream Analytics ジョブを変更して任意の演算子を使用することはできますが、その演算子をソリューション ポータルに反映するのはそれよりもずっと複雑な作業になります。

次の手順

カスタム規則を作成する方法がわかったところで、構成済みソリューションについての次の詳細もご覧ください。