次の方法で共有


リモート監視の構成済みソリューションのチュートリアル

IoT Suite リモート監視 構成済みソリューション は、リモートの場所で実行されている複数のマシンに対するエンドツーエンドの監視ソリューションの実装です。 このソリューションは、主要な Azure サービスを組み合わせて、ビジネス シナリオの一般的な実装を提供します。 ソリューションを独自の実装の開始点として使用し、独自の特定のビジネス要件を満たすように カスタマイズ できます。

この記事では、リモート監視ソリューションの主要な要素の一部について説明し、そのしくみを理解できるようにします。 この知識は、次のことに役立ちます。

  • ソリューションの問題のトラブルシューティングを行います。
  • 独自の特定の要件を満たすようにソリューションに合わせてカスタマイズする方法を計画します。
  • Azure サービスを使用する独自の IoT ソリューションを設計します。

論理アーキテクチャ

次の図は、構成済みソリューションの論理コンポーネントの概要を示しています。

論理アーキテクチャの

マイクロサービスと Docker コンテナー

リモート監視は、マイクロサービス アーキテクチャを活用するための構成済みソリューションの最初のソリューションです。 このソリューションは 、.NETJava の両方で使用できます。 マイクロサービスは、開発速度を損なうことなく (コンテナーを個別にスケーリングできるようにすることで) スケーリングと柔軟性を実現するための一般的なパターンとして登場しました。 マイクロサービスはコードをコンパートメント化し、明確に定義されたインターフェイスを提供することで、ソリューションの理解を容易にし、モノリシックを減らします。 また、現在のソリューション アクセラレータを拡張して収益化可能な完成したソリューションを構築するパートナー向けのオプションも拡張します。

Docker コンテナーの詳細

シミュレートされたデバイス

構成済みソリューションでは、シミュレートされたデバイスは冷却装置 (ビルエアコンや施設の空気処理ユニットなど) を表します。 構成済みソリューションをデプロイすると、 Azure WebJob で実行される 4 つのシミュレートされたデバイスも自動的にプロビジョニングされます。 シミュレートされたデバイスを使用すると、物理デバイスを展開しなくても、ソリューションの動作を簡単に調べることができます。 実際の物理デバイスをデプロイするには、 リモート監視構成済みソリューションへのデバイスの接続 に関するチュートリアルを参照してください。

デバイスからクラウドへのメッセージ

シミュレートされた各デバイスは、次の種類のメッセージを IoT Hub に送信できます。

メッセージ 説明
スタートアップ デバイスが起動すると、それ自体に関する情報を含む デバイス情報 メッセージがバックエンドに送信されます。 このデータには、デバイス ID と、デバイスがサポートするコマンドとメソッドの一覧が含まれます。
出席 デバイスは定期的に プレゼンス メッセージを送信して、デバイスがセンサーの存在を検出できるかどうかを報告します。
テレメトリ デバイスは、デバイスのシミュレートされたセンサーから収集された温度と湿度のシミュレートされた値を報告する テレメトリ メッセージを定期的に送信します。

このソリューションでは、デバイス ツインではなく Cosmos DB データベースに、デバイスでサポートされるコマンドの一覧が格納されます。

プロパティとデバイスツイン

シミュレートされたデバイスは、次のデバイス プロパティを、報告されたプロパティとして IoT ハブ内のツインに送信します。 デバイスは、起動時に、デバイス 状態の変更 コマンドまたはメソッドに応答して、報告されたプロパティを送信します。

プロパティ 目的
Config.TelemetryInterval デバイスがテレメトリを送信する頻度 (秒)
設定.温度の平均値 シミュレートされた温度テレメトリの平均値を指定します
デバイス.DeviceID ソリューションでデバイスが作成されたときに指定または割り当てられる ID
デバイス.デバイス状態 デバイスによって報告された状態
デバイス.作成時間 ソリューションでデバイスが作成された時刻
デバイス起動時間 デバイスが起動された時刻
デバイス.最終希望プロパティ変更 最後に必要なプロパティ変更のバージョン番号
デバイス.位置.緯度 デバイスの緯度の場所
デバイス.位置.経度 デバイスの経度の場所
システム.製造者 デバイスの製造元
システム.型番 デバイスのモデル番号
System.SerialNumber デバイスのシリアル番号
システム.ファームウェアバージョン デバイス上のファームウェアの現在のバージョン
System.Platform デバイスのプラットフォーム アーキテクチャ
System.Processor(システム・プロセッサ) デバイスを実行しているプロセッサ
システム.インストール済みのRAM デバイスにインストールされている RAM の量

シミュレーターは、サンプル値を使用して、シミュレートされたデバイスでこれらのプロパティをシードします。 シミュレーターがシミュレートされたデバイスを初期化するたびに、デバイスは定義済みのメタデータを報告されたプロパティとして IoT Hub に報告します。 報告されるプロパティは、デバイスによってのみ更新できます。 報告されるプロパティを変更するには、ソリューション ポータルで目的のプロパティを設定します。 デバイスの責任は次のとおりです。

  1. IoT ハブから必要なプロパティを定期的に取得します。
  2. 目的のプロパティ値で構成を更新します。
  3. 新しい値を報告されたプロパティとしてハブに返します。

ソリューション ダッシュボードから、 必要なプロパティ を使用して、デバイス ツインを使用してデバイスのプロパティを設定できます。 通常、デバイスはハブから必要なプロパティ値を読み取って内部状態を更新し、変更を報告されたプロパティとして報告します。

シミュレートされたデバイス コードでは、Desired.Config.TemperatureMeanValue および Desired.Config.TelemetryInterval の希望するプロパティのみを使用して、IoT Hub に送信される報告されたプロパティを更新します。 その他の必要なプロパティ変更要求はすべて、シミュレートされたデバイスでは無視されます。

メソッド

シミュレートされたデバイスは、ソリューション ポータルから IoT ハブを介して呼び出された次のメソッド (ダイレクト メソッド) を処理できます。

メソッド 説明
ファームウェアの更新を開始する ファームウェアの更新を実行するようにデバイスに指示します
再起動します 再起動するようにデバイスに指示します
工場出荷時のリセット 出荷時の設定へのリセットを実行するようにデバイスに指示します

一部のメソッドでは、報告されたプロパティを使用して進行状況を報告します。 たとえば、 InitiateFirmwareUpdate メソッドは、デバイスでの更新プログラムの非同期実行をシミュレートします。 このメソッドはデバイス上で直ちに戻りますが、非同期タスクは報告されたプロパティを使用して状態の更新をソリューション ダッシュボードに送信し続けます。

コマンド

シミュレートされたデバイスは、ソリューション ポータルから IoT ハブ経由で送信される次のコマンド (クラウドからデバイスへのメッセージ) を処理できます。

コマンド 説明
PingDevice デバイスに ping を送信して、有効であることを確認します
テレメトリー開始 テレメトリを送信するデバイスを開始します
StopTelemetry デバイスによるテレメトリの送信を停止する
設定温度変更 ランダム データが生成される設定ポイントの値を変更します
診断テレメトリー デバイス シミュレーターをトリガーして、追加のテレメトリ値 (externalTemp) を送信します。
デバイス状態を変更 デバイスの拡張状態プロパティを変更し、デバイスからデバイス情報メッセージを送信します

これらのコマンド (cloud-to-device メッセージ) とメソッド (ダイレクト メソッド) の比較については、 Cloud-to-device 通信のガイダンスを参照してください。

IoT Hub

IoT ハブは、デバイスから送信されたデータをクラウドに取り込み、Azure Stream Analytics (ASA) ジョブで使用できるようにします。 各ストリーム ASA ジョブは、個別の IoT Hub コンシューマー グループを使用して、デバイスからメッセージのストリームを読み取ります。

ソリューション内の IoT ハブも次のとおりです。

  • ポータルへの接続が許可されているすべてのデバイスの ID と認証キーを格納する ID レジストリを保持します。 ID レジストリを使用してデバイスを有効または無効にすることができます。
  • ソリューション ポータルの代わりにデバイスにコマンドを送信します。
  • ソリューション ポータルの代わりに、デバイスでメソッドを呼び出します。
  • 登録されているすべてのデバイスのツイン情報を管理します。 デバイス ツインには、デバイスによって報告されるプロパティ値が格納されます。 デバイス ツインには、次に接続したときにデバイスが取得できるように、ソリューション ポータルに設定された必要なプロパティも格納されます。
  • 複数のデバイスのプロパティを設定するか、複数のデバイスでメソッドを呼び出すようにジョブをスケジュールします。

Azure Stream Analytics

リモート監視ソリューションでは、 Azure Stream Analytics (ASA) によって、IoT ハブによって受信されたデバイス メッセージが、処理またはストレージ用の他のバックエンド コンポーネントにディスパッチされます。 異なる ASA ジョブは、メッセージの内容に基づいて特定の機能を実行します。

ジョブ 1: デバイス情報は 、受信メッセージ ストリームからデバイス情報メッセージをフィルター処理し、イベント ハブ エンドポイントに送信します。 デバイスは、起動時に SendDeviceInfo コマンドに応答してデバイス情報メッセージを送信します。 このジョブでは、次のクエリ定義を使用して デバイス情報メッセージを 識別します。

SELECT * FROM DeviceDataStream Partition By PartitionId WHERE  ObjectType = 'DeviceInfo'

このジョブは、さらに処理するために、その出力をイベント ハブに送信します。

ジョブ 2: ルール は、受信した温度と湿度のテレメトリ値をデバイスごとのしきい値に対して評価します。 しきい値は、ソリューション ポータルで使用できるルール エディターで設定されます。 各デバイスと値のペアは、Stream Analytics が 参照データとして読み取る BLOB にタイムスタンプによって格納されます。 タスクは、空でない値をデバイスの設定したしきい値と比較します。 ">" 条件を超えた場合、ジョブはしきい値を超えたことを示す アラーム イベントを出力し、デバイス、値、タイムスタンプの値を提供します。 このジョブでは、次のクエリ定義を使用して、アラームをトリガーするテレメトリ メッセージを識別します。

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
)

SELECT *
INTO DeviceRulesMonitoring
FROM AlarmsData

SELECT *
INTO DeviceRulesHub
FROM AlarmsData

ジョブは、さらに処理するためにその出力をイベント ハブに送信し、各アラートの詳細をソリューション ポータルがアラート情報を読み取ることができる BLOB ストレージに保存します。

ジョブ 3: テレメトリ は、受信デバイステレメトリ ストリームに対して 2 つの方法で動作します。 1 つ目は、デバイスから長期ストレージ用の永続的な BLOB ストレージにすべてのテレメトリ メッセージを送信します。 2 つ目は、5 分間のスライディング ウィンドウで平均、最小、最大湿度の値を計算し、このデータを BLOB ストレージに送信します。 ソリューション ポータルは、BLOB ストレージからテレメトリ データを読み取ってグラフを設定します。 このジョブでは、次のクエリ定義を使用します。

WITH 
    [StreamData]
AS (
    SELECT
        *
    FROM [IoTHubStream]
    WHERE
        [ObjectType] IS NULL -- Filter out device info and command responses
) 

SELECT
    IoTHub.ConnectionDeviceId AS DeviceId,
    Temperature,
    Humidity,
    ExternalTemperature,
    EventProcessedUtcTime,
    PartitionId,
    EventEnqueuedUtcTime,
    * 
INTO
    [Telemetry]
FROM
    [StreamData]

SELECT
    IoTHub.ConnectionDeviceId AS DeviceId,
    AVG (Humidity) AS [AverageHumidity],
    MIN(Humidity) AS [MinimumHumidity],
    MAX(Humidity) AS [MaxHumidity],
    5.0 AS TimeframeMinutes 
INTO
    [TelemetrySummary]
FROM [StreamData]
WHERE
    [Humidity] IS NOT NULL
GROUP BY
    IoTHub.ConnectionDeviceId,
    SlidingWindow (mi, 5)

Event Hubs

ASA ジョブの デバイス情報ルール によってデータが Event Hubs に出力され、Web ジョブで実行されている イベント プロセッサ に確実に転送されます。

Azure Storage

このソリューションでは、Azure BLOB ストレージを使用して、ソリューション内のデバイスから生および要約されたすべてのテレメトリ データを保持します。 ポータルは、BLOB ストレージからテレメトリ データを読み取り、グラフを設定します。 アラートを表示するために、ソリューション ポータルは、テレメトリ値が構成されたしきい値を超えたときに記録するデータを BLOB ストレージから読み取ります。 ソリューションでは、BLOB ストレージを使用して、ソリューション ポータルで設定したしきい値も記録します。

WebJobs

ソリューション内の Web ジョブは、デバイス シミュレーターをホストするだけでなく、コマンド応答を処理する Azure WebJob で実行されている イベント プロセッサ もホストします。 コマンド応答メッセージを使用して、デバイスのコマンド履歴 (Cosmos DB データベースに格納) を更新します。

Cosmos DB(コスモス DB)

ソリューションでは、Cosmos DB データベースを使用して、ソリューションに接続されているデバイスに関する情報を格納します。 この情報には、ソリューション ポータルからデバイスに送信されたコマンドの履歴と、ソリューション ポータルから呼び出されたメソッドの履歴が含まれます。

ソリューション ポータル

ソリューション ポータルは、構成済みソリューションの一部としてデプロイされた Web アプリです。 ソリューション ポータルの重要なページは、ダッシュボードとデバイスの一覧です。

ダッシュボード

Web アプリのこのページでは、PowerBI javascript コントロール ( PowerBI-visuals リポジトリを参照) を使用して、デバイスからのテレメトリ データを視覚化します。 このソリューションでは、ASA テレメトリ ジョブを使用して、テレメトリ データを BLOB ストレージに書き込みます。

デバイスの一覧

ソリューション ポータルのこのページでは、次のことができます。

  • 新しいデバイスを設定します。 このアクションにより、一意のデバイス ID が設定され、認証キーが生成されます。 デバイスに関する情報は、IoT Hub ID レジストリとソリューション固有の Cosmos DB データベースの両方に書き込まれます。
  • デバイスのプロパティを管理します。 このアクションには、既存のプロパティの表示と、新しいプロパティでの更新が含まれます。
  • デバイスにコマンドを送信します。
  • デバイスのコマンド履歴を表示します。
  • デバイスを有効または無効にします。

次のステップ

次の TechNet ブログ記事では、リモート監視の構成済みソリューションの詳細について説明します。

IoT Suite の使用を続けるには、次の記事を参照してください。