温度データをPower BIのダッシュボードで表示(プッシュストリーミングデータセットを使用)


前回、温度データをPower BIのダッシュボードで可視化(ストリーミングデータセットを使用)を投稿いたしましたが、今回はStream Analytics経由でプッシュストリーミングデータセットを使用して、Microsoft Power BIで可視化します。

可視化までの流れは、下図のようになります。

使用したもの

ハードウェア

・Windows 10 PC(バージョン1809)
・Gravioレンタルデバイス
 -Gravioクライメートセンサー

ソフトウェア

  • Gravio
    • Gravio Studio Ver.2.2.2111.0
    • Gravio Server Ver.2.2.2354.0

サービス

  • Azure IoT Hub
  • Stream Analytics
  • Microsoft Power BI Power BIサービス

Stream Analyticsの利用にはMicrosoft Azureのサブスクリプション契約が必要となります。
今回は検証用の無償試用版サブスクリプションを使用して、Stream Analyticsを利用します。

Gravio → Azure IoT Hub の設定

Gravioで受信した温度データをAzure IoT Hubへ送信します。

Azure IoT Hubの設定

まず、Azure IoT Hubの設定します。
設定については下記記事を参考に設定します。

Azure IoT HubへGravioを使って温度データをPublish
Azure IoT Hubの設定

Gravioの設定

次に、GravioでAzure IoT Hubへ温度データを送信する設定をします。

センサーの設定

センサーの設定については、下記記事をご参照ください。
温度センサーのデータをエクセルで簡単に表示

動作(アクション)の設定

今回設定するGravioのアクションは、CreateRecordコンポーネントで送信するレコードデータを作成し、MQTTPublishコンポーネントで作成したレコードデータをAzure IoT Hubへ送信するというものです。
送信するレコードデータは、データを収集した時間と収集した温度データの2種類です。

それでは、アクションの設定を進めていきます。
まずは、今回使用するコンポーネントを以下の手順で追加します。

  1. 新規にアクションカードを作成
  2. ステップの追加から、CreateRecordコンポーネントを選択
  3. もう一度ステップの追加から、MQTTPublishコンポーネントを選択

続いて、追加した2つのコンポーネントに、動作に必要となる設定をしていきます。

CreateRecordコンポーネントの設定

CreateRecordコンポーネントでレコードを作成する設定をします。
CreateRecordコンポーネントをクリックし、ステップ出力をクリックします。
右上の”+”ボタンを2回クリックすると、ステップ出力変数が2つ追加されます。
追加された変数をダブルクリックし、それぞれに下記内容を設定します。

出力フィールド名 タイプ
1 GDateTime DateTime av.Timestamp
2 Data Double av.Data

その他のデータ(例えばセンサーIDや、データの種類など)を送信したい場合は、ステップ出力変数を追加することでPower BI サービスへデータの送信が可能です。

MQTTPublishコンポーネントの設定

次に、MQTTPublishコンポーネントでAzure IoT Hubへデータを送信する設定をします。

まず、ステップ出力に送信するデータを追加します。
MQTTPublishコンポーネントをクリックし、ステップ入力の右にあるステップ出力へのコピーアイコンをクリックします。
ステップ出力にステップ入力変数が追加されます。

次にプロパティをクリックし、Azure IoT Coreとの接続情報を入力します。
こちらは、Azure IoT Coreの設定の際に参照した、下記記事をもとに設定します。

Azure IoT HubへGravioを使って温度データをPublish
(2)MQTTPublishコンポーネントの設定

以上で、動作の設定が完了しました。
続いて、動作タイミングの設定をします。

動作タイミング(トリガー)の設定

動作タイミングの設定については、こちらの記事をご確認ください。

温度データをPower BIのダッシュボードで可視化(ストリーミングデータセットを使用)
動作タイミング(トリガー)の設定

以上でAzure IoT Coreへ温度データを送信する設定が完了しました。

Azure IoT Hub → Stream Analytics → Power BI のデータ送信設定

Azure IoT Hubで受信したデータをStream Analyticsを利用して、Power BI サービスのデータセットへ送信します。
主に、下記ドキュメントを参考に設定を進めます。

【Microsoft Docs】
Power BI を使用して Azure IoT Hub からのリアルタイム センサー データを視覚化する

Azure IoT Hubにおけるコンシューマーグループの追加

Azure IoT Hubで受信したデータをStream Analyticsで使用するために、サービス間連携の共通キーとなる”コンシューマー グループ”を作成します。

Azure Portal で、IoT Hubを開き、左側のウィンドウで”組み込みのエンドポイント”をクリックします。
次に、右側のウィンドウの”コンシューマー グループ”に任意の名前を入力します。(今回は"graviotest"を入力しました)
コンシューマー グループの作成による変更のみでは保存できないため、”既定の TTL”の値を変更し元の値に戻すことで保存ボタンを有効にします。
その後、”保存”をクリックします。

Steram Analyticsのジョブの作成、構成、実行

Stream Analytics上で、Azure IoT Hubで受信したデータをPower BIのデータセットへ送信する設定をします。 

Stream Analyticsのジョブの作成

まずは、Stream Analytics上に新しいジョブを作成します。
Azure Portalで、"リソースの設定">"モノのインターネット”>”Stream Analytics ジョブ”の順にクリックします。

"追加"をクリックし、表示される”新しい Stream Analytics ジョブ”で下記情報入力後に”作成”をクリックします。

項目 設定内容 設定例
ジョブ名 ジョブの名前(任意) graviotest1
サブスクリプション 契約しているサブスクリプション 無償使用版
リソース グループ IoT Hubと同じリソース グループ graviotest
場所 リソース グループと同じ場所 東日本
ホスティング環境 ジョブを動作させる環境の指定 クラウド(Default)
ストリーミングユニット クエリの演算に使用するリソース量 3(Default)

作成が完了すると、下記画面が表示されますので、"リソースへ移動"をクリックします。

ジョブの入力を追加

次に、IoT Hubからのデータをジョブの入力に追加します。
作成したジョブのリソース画面から、"入力">"ストリーム入力の追加">"IoT Hub"の順でクリックします。

下記情報を入力し、"保存"をクリックします。

項目 設定内容 設定例
入力エイリアス 入力の名前(任意) graviotest
ラジオボタン - サブスクリプションから IoT Hub を選択する
サブスクリプション 契約しているサブスクリプション 無償試用版
IoT Hub IoT Hub名 graviotest3
エンドポイント - メッセージング
共有 アクセス ポリシー名 IoT Hubで設定しているアクセスポリシー iothubowner
コンシューマー グループ 先ほどと同じコンシューマー グループ graviotest
イベントシリアル方式 シリアルデータの方式 JSON
エンコード 入力される文字コードを指定 UTF-8
イベントの圧縮タイプ なし

ジョブの出力を追加

次に、ジョブの出力にPower BI サービスを追加します。
"出力">"追加"の順でクリックし、表示される出力に関する設定画面で下記情報を入力します。

項目 設定内容 設定例
出力エイリアス 入力の名前(任意) graviotest2
グループ ワークスペース - -
データセット名 Power BI サービス内に作成するデータセット名(任意) graviotest2
テーブル名 データセット内に作成されるテーブル名(任意) temperature

その後、Power BI サービスと接続するために、"承認する"をクリックし、立ち上がる別ウィンドウでPower BI サービスのアカウント情報を入力します。

接続完了後、右下の保存ボタンをクリックします。

クエリの設定

入力されたデータを出力先へ送信する設定をします。
"クエリ"をクリックし、表示させるクエリ文に下記コードを入力します。

SELECT
GDateTime,
Data
INTO
graviotest2
FROM
graviotest

SELECTでは送信するデータ項目を、INTOには送信先の出力エイリアス、FROMにはデータの入力元となる入力エイリアスを指定します。

変更後、"保存"をクリックします。

ジョブの実行

最後に、作成したジョブを有効にします。
"概要">"開始">"現在">右下に表示される"開始"の順でクリックします。
開始されるまでに2分程度かかりました。

ここまでで、データ送信に関する設定がすべて完了し、温度データを収集するとPower BIにデータが送信されます。

データの確認

データセットの画面からレポートを作成し、データを確認します。

Power BI サービスの画面より、"マイワークスペース">"データセット"の順でクリックし、作成したデータセットのグラフアイコン(レポートの作成)をクリックします。

レポート作成画面で、テーブルアイコンをクリックします。
フィールドのリストから、"gdatetime"と"data"を値へドラッグアンドドロップします。

テーブルに値が表示されていることが確認できます。

なお、レポート作成画面で、様々な可視化、分析機能を利用できます。
さらに、こちらで作成した各種グラフや分析結果をダッシュボードのタイルに表示することも可能です。

私が作成してみたダッシュボードは下記イメージです。
4つの会議室にクライメートセンサーを設置し、温湿度データのリアルタイム表示と、温度データの推移を表示しています。
グラフでは、過去5日間のデータを表示しています。

あとがき

今回は、Stream Analyticsを使用してPower BIのプッシュストリーミングデータセットに送信したデータの可視化を実現しました。
今後、Power BI サービスのAPI機能でプッシュデータセットを利用する方法を検証していきます。