温度データをPower BIのダッシュボードで可視化（ストリーミングデータセットを使用）

今回は、Gravioのクライメートセンサーで収集した温度データをPower BIのダッシュボードで簡単に可視化してみます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/f93f67f5-dc70-2b63-113e-b55b2dc729fa.png)

#使用するもの
###ハードウェア
・Windows 10 PC（バージョン1809）
・Gravioレンタルデバイス
　-Gravioクライメートセンサー

###ソフトウェア・サービス
・[Gravio](https://www.gravio.com/jp/gpromo/1901-casual-iot)
　-Gravio Studio Ver.2.2.2111.0
　-Gravio Server Ver.2.2.2354.0
・Microsoft Power BI
　-Power BIサービス

#Power BIの設定 その1（データセットの作成）
Power BI上でセンサーデータを蓄積するデータベース（データセット）を作成します。
今回はリアルタイムで可視化をする際に最適な「ストリーミングデータセット」を使用します。
Power BIにリアルタイムで表示するデータセットの種類については、こちらの記事を参考にしてください。
[**Power BI REST API を使って Push をサポートするデータセットを作成**](https://qiita.com/PowerBIxyz/items/d40d95c6f106e66d34ee#%E3%81%AA%E3%81%AB%E3%81%8C%E9%81%95%E3%81%86%E3%81%AE%E3%81%8B)

メイン画面左側にある“マイワークスペース”を選択し、画面右上の“作成ボタン”＞“ストリーミングデータセット”の順でクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/d0dd462a-8bd5-676b-f4d2-c1e47efe7b91.png)

“新しいストリーミングデータセット“から”API“を選択し、画面右下の”次へ“をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/3657f63a-9acf-a6fb-4c22-2d360a9c8b9c.png)

データセット名、ストリームからの値を任意で設定します。ストリームからの値には、Gravioから送信するデータ項目を設定します。
今回、Power BIでGravioから受け取るデータ項目は、以下の2つです。

||データ項目|データタイプ|
|:---|:---|:---|
|1|datetime|日時|
|2|data|数値|
下図のように入力し、右下の”作成ボタン”をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/02d2527b-5d9e-d918-2374-dcd724cbc44e.png)

作成後に遷移した画面に表示される、”プッシュ URL"とJSONコードをメモしておきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/70ad0db1-b010-c8df-d6fc-55fd5263b853.png)


#Gravioの設定
##センサーの設定
センサーの設定については、下記記事をご参照ください。
[温度センサーのデータをエクセルで簡単に表示](https://qiita.com/mikawan/items/3d93543566680afda868#step1%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC%E3%81%AE%E8%A8%AD%E5%AE%9A)
##動作（アクション）の設定
HTTP POSTリクエストの設定をします。
アクションカードを作成し、ダブルクリックでアクション設定画面を表示します。
Stepの追加から、HTTPPostコンポーネントを選択します。
プロパティに下記内容を設定します。

|項目|設定内容|
|:----|:----|
|URL|（先程メモした）プッシュ　URL|
|HTTP Method|POST|
|Content-Type|application/json|
|Body|`"{\"datetime\" :\""+ToStringFromDateTime(av.Timestamp,"yyyy-MM-ddThh:mm:ss.000Z")+"\",\"data\" :"+av.Data+"}"`|

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/9b51e65b-aa69-33c4-f917-857735b5ac11.png)


Bodyには、先程メモしたJSONのコードをもとにGravioから送信するデータを追記し、入力します。
データには、次章で設定するトリガー動作時の日時とセンサーデータを使用します。
Timestampデータは、DateTime型変数のため、String型に変換しJSONコードの一部として送信します。
また、Bodyに使用するエスケープ文字の`\`はバックスラッシュです。

以上の設定で、Power BIへデータを送信する設定が完了しました。
次にセンサーデータを受信したタイミングで本アクションを動作させる設定をします。

##動作タイミング（トリガー）の設定
温度データをセンサーから取得したタイミングでデータをストリーミングデータセットに送る設定をします。
トリガー画面から、新しいトリガーを作成し、下記内容を設定します。

|項目|内容|
|:---:|:---|
|エリア|温度センサーを設定しているエリア|
|レイヤー|温度センサーを設定しているレイヤー|
|アクション名|作成したアクション|
|Classic/Threshold Trigger|Classic Trigger|
|温度|任意の値 （数値入力は必須、今回は0を使用）

上記の設定は、温度データを受信したタイミングで、先程設定したアクションを動作させます。
従い、本トリガーを有効にすると、センサーからの温度データを受信するたびにPower BIのストリーミングデータセットへデータを蓄積し始めます。

#Power BIの設定　その2（可視化編）
Gravioから送信される温度データを可視化するために、Power BI上にダッシュボードを作成します。
メイン画面から”マイワークスペース”＞右上に表示されている”作成”＞表示されるリストの”ダッシュボード”の順でクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/b793371a-3586-0d9d-af98-661f110f10ec.png)
”タイルの追加”より、”カスタムストリーミングデータ”を選択し、次へをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/50992387-3186-3819-7d5b-49ace21a0924.png)
先程作成したストリーミングデータセットを選択し、次へをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/3675ffd4-920e-21d4-4d2e-e25bc22b130c.png)
表示するデータを指定します。今回はカスタムストリーミングデータに設定してある“data”を指定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/20f8896c-54c5-8792-a774-c4de4a602a29.png)

次にブラシアイコンをクリックし、小数点以下の表現方法などを微調整します。
表示する小数点以下の桁数を設定します。今回は、2桁まで表示する設定にします。
設定後、次へをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/02672f0e-2382-3462-e777-0360bbd65fa1.png)


タイルに表示するタイトル（項目名）を設定します。”温度”と入力します。設定後、適用をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/eeff2b94-2b9b-fbf8-de81-15a19f8319f8.png)



#ダッシュボードイメージ
設定が完了すると、ダッシュボードにタイルが表示されます。温度変化に伴って、タイルの数値が更新されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/539979c4-ae6f-a9c8-b410-5587c03af1e4.png)

他にも、折れ線グラフ、棒グラフ、ゲージを使用できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/3a0823c2-7e7f-0d79-db50-0435e6eec57b.png)

#ストリーミングデータセットでできること
ストリーミングデータセットでは、1時間前までのデータの保管とダッシュボードでの可視化ができます。
しかし、Gravioのクライメートセンサーは省電力を実現する目的で、温度変化が0.5℃以上ない場合、1時間に一回程度しかデータを送らないため、温度変化が少ない室内などではエラーとなり何も表示されなくなることがあります。
このような場合、使用するデータセットの種類を変更する方法、もしくはセンサーを変更する方法のどちらかを用いることで、ダッシュボード上のデータを常にリフレッシュし表示することが可能になります。

データセットの種類を変更する方法としては、プッシュストリーミングデータセットを使用することでデータの保持期間の制限を回避することができます。
こちらの可視化方法は次回ご紹介します。

また、短いサイクルで定期的にデータを収集するタイプのセンサーに変更することで回避することもできます。既にGravioで検証済のTI社CC2650センサーモジュールなどが該当します。

#あとがき
今回は、ストリーミングデータセットを使用して、Power BI サービスのダッシュボードに温度データを表示しました。
次回はプッシュストリーミングデータセットを使用したダッシュボード可視化方法を掲載します。