Azure IoT Hubに送信したデータを可視化する（Power BI編）

# はじめに
横河電機のエッジコントローラe-RT3 Plus F3RP70-2L[^e-RT3]をAzure IoT認定デバイス[^azure]に登録する担当者として、Azure IoT Edgeについて勉強しました。
その内容を数回に分けてご紹介します。
こちらで第7回目の記事となります。
3回目までの記事で、エッジデバイスへのAzure IoT EdgeランタイムのインストールからサンプルのPythonモジュールをデプロイして動作確認する流れを説明しています。

- [第1回目: Ubuntu 18.04にAzure IoT Edgeランタイムをインストールする](https://qiita.com/Yokogawa_Mita/items/f7996d539b29618d7159)
- [第2回目: Azure IoT EdgeランタイムをインストールしたUbuntu 18.04搭載のエッジデバイスをIoT Hubへ接続する](https://qiita.com/Yokogawa_Mita/items/d6525ebd57af03b67cf9)
- [第3回目: Azure IoT EdgeランタイムをインストールしたUbuntu 18.04搭載のエッジデバイスでPythonのサンプルモジュールを作成する](https://qiita.com/Yokogawa_Mita/items/e8a29f9c6682b3156ef2)

また、4、5回目の記事でエッジデバイスのデータを収集しIoT Hubへ送信するPythonモジュール、データを書き込むPythonモジュールを作成、デプロイする手順を説明しています。

- [第4回目: Azure IoT EdgeのPythonモジュールでデータ収集してIoT Hubへ送信する](https://qiita.com/Yokogawa_Mita/items/7214feba76ba613b3b79)
- [第5回目: エッジデバイスにデータを書き込むAzure IoT EdgeのPythonモジュールを作成する](https://qiita.com/Yokogawa_Mita/items/4728153c90e3fc35f985)

6回目の記事ではIoT Hubに送信したデータをApp Serviceを使用して構築したWebアプリで可視化しました。

- [第6回目: Azure IoT Hubに送信したデータを可視化する（App Service編）](https://qiita.com/Yokogawa_Mita/items/e060d8413b65d8ebd166)

今回は[Power BI](https://powerbi.microsoft.com/ja-jp/)を使用し、データを可視化してみます。

AWS IoT Greengrassのインストール手順の紹介は[こちら](https://qiita.com/Yokogawa_Ishino/items/1fb734f091e952a16fea)からどうぞ！


# 環境
**動作確認したデバイス（OS）**

- PC（Windows 10）
- e-RT3 Plus F3RP70-2L（Ubuntu 18.04 32bit）＋アナログ入出力モジュール  
    モジュール構成、配線は[前回まで](https://qiita.com/Yokogawa_Mita/items/4728153c90e3fc35f985#%E7%92%B0%E5%A2%83)と同様に以下の通りです。
    - e-RT3 Plus F3RP70-2L（CPUモジュール）
    - F3AD08-6R（アナログ入力モジュール）
    - F3DA04-6R（アナログ出力モジュール）
    - F3BU05-0D（ベースモジュール）
    - F3PU20-0S（電源モジュール）
    
こちらのデバイスでは `armhf` アーキテクチャのパッケージが動作します。 

**IoT EdgeとDockerのバージョン**

```bash:Terminal
$ iotedge --version
iotedge 1.1.1
$ docker --version
Docker version 20.10.5+azure, build 55c4c88966a912ddb365e2d73a4969e700fc458f
```

# ゴール
最終的なゴールは以下の図のような、Azure IoT EdgeランタイムをインストールしたUbuntu 18.04搭載のエッジデバイスでPythonのデータ収集モジュールとデータ書き込みモジュールを作成し、収集モジュールのデータをIoT Hubへ送信し、Power BIとAzure App Serviceで作成したWebで可視化することです。
App ServiceとPower BIでデータを可視化する手順や構成はMicrosoftの公式ドキュメント[^appservicedoc][^powerbidoc]を参考にし、図中のアイコンは[こちら](https://docs.microsoft.com/ja-jp/azure/architecture/icons/)を使用しています。


今回はAzure上でStream Analyticsを作成し、IoT Hubへ送信されたデータをPower BIで可視化することをゴールとします。
これで完成になります。

具体的な流れは以下の通りです。

1. Azure上に**Stream Analytics**のリソースを作成し、PCに**Power BI**をインストールする
1. **IoT Edgeデータ収集モジュール**が**アナログ入力モジュール**の全チャネルのデータを2秒周期で収集し、**IoT Hub**へ送信する
1. **Iot Hub**へ送信されたデータを**Stream Analytics**を通して**Power BI**へ流し可視化する

  ![powerbi_004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682605/06cf805b-46db-effc-ea2f-02cf77f3496b.png)
  

# 準備
今回説明する内容は、IoT Hubへ可視化したいデータが送信できていることを前提に説明しています。

## 開発環境
- PC

前回までに準備した環境をそのまま使用します。
また、開発の手順は基本的にはMicrosoft公式のドキュメント[^powerbidoc]に従っていますが、こちらではAzure PortalとVS Codeを使用します。

## Power BI Desktopのインストール
[Power BI](https://powerbi.microsoft.com/ja-jp/)はMicrosoft社のBIツールであり、データの可視化が可能です。
デスクトップアプリのPower BI DesktopやWebサービスのPower BIサービスが使用できます。
今回は個人アカウントでもサインアップできる**Power BI Desktop**を例にして、可視化の手順を説明します。

※Power BIサービスは企業アカウントを持っている場合はサインアップ可能で、このあと説明する手順で同じように可視化できます。

1. [Power BI DesktopのWebサイト](https://powerbi.microsoft.com/ja-jp/desktop/)にアクセスし、画面中央の「無料でダウンロードする」のボタンをクリックします。
    「Microsoft Store を開きますか？」というポップアップが出た場合は許可して開いてください。
    Microsoft Storeが開いたら「入手」をクリックし、インストールしてください。

1. インストールしたPower BI Desktopを開き、右上にある「サインイン」の表示をクリックします。
    表示される手順に従ってサインインします。
    
    ![powerbi_001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682605/71af089f-e95d-25e9-a8bf-dcc4bbdcccc5.png)


## IoT Hubのコンシューマーグループの作成
Azure Portalからコンシューマーグループを作成します。
[前回の記事](https://qiita.com/Yokogawa_Mita/items/e060d8413b65d8ebd166#iot-hub%E3%82%B3%E3%83%B3%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%9E%E3%83%BC%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%81%AE%E8%A8%AD%E5%AE%9A)で紹介した手順で作成します。
作成したコンシューマーグループ名はあとで使用するため、メモしておくと便利です。
今回は「ert3-visualization-powerbi」を作成して使用します。


## Stream Analyticsの作成
IoT Hubへ送信されたデータをPower BIに流すためにStream Analyticsを使用します。

1. [Azure Portal](https://portal.azure.com/)にアクセスし、「リソースの作成」をクリックします。
    表示される検索欄にStream Analyticsと入力し、「Stream Analytics job」を探してクリックします。
    青い「作成」ボタンをクリックします。
    
    ![stream_005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682605/1240bbe5-8671-907b-3cc9-2eef3ab50dcb.png)


1. 必要事項を入力、選択します。
    ジョブ名には任意の分かりやすい名前を入れ、サブスクリプション、リソースグループ、場所も任意の項目を選択します。
    ホスティング環境はクラウドにしてください。
    ストリーミングユニットは今回は特に変更せず3とします。
    入力内容を確認し、青い「作成」ボタンをクリックします。
    
    ※Stream Analyticsは起動した時間とストリーミングユニットの数に応じて課金されます。
    今回はデータを流すのみで特別な処理を行っていないため、ストリーミングユニットは3未満でも動作します。
    詳しくは[Azure Stream Analytics の価格](https://azure.microsoft.com/ja-jp/pricing/details/stream-analytics/)をご覧ください。

    ![stream_004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682605/e3288f6e-111b-f4e4-3e68-d62f6f0f90ef.png)


1. 「デプロイが完了しました」と通知されたらOKです。


## Stream Analyticsの設定
1. Azure Portalから作成したStream Analyticsジョブを開きます。
    概要が表示されたら「入力」をクリックします。
    
    ![stream_006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682605/ef676cc4-db45-d0e1-ba13-6e2382c62743.png)
    

1. 「ストリーム入力の追加」をクリックし、表示されるドロップダウンリストからIoT Hubを選択します。
    設定画面が表示されるので、以下のように入力して保存します。
    
    | 項目                   | 設定内容                                                        |
    | ---------------------- | --------------------------------------------------------------- |
    | 入力のエイリアス       | 任意の入力エイリアス                                          |
    | サブスクリプション     | 可視化したいメッセージを受信するIoT Hubがあるサブスクリプション |
    | IoT Hub                | 可視化したいメッセージを受信するIoT Hub                         |
    | コンシューマーグループ | 作成したコンシューマーグループ                                  |
    | その他の項目            |   デフォルトのままでOK  |

    ![stream_007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682605/01a65dda-78d3-9f6a-5f49-865f9623ebcc.png)


1. 保存した後、入力の一覧に設定した項目が追加されており、接続テストが成功した通知が来たら入力の設定は完了です。

1. Stream Analyticsの概要から、入力のすぐ下にある「出力」をクリックします。
    「追加」をクリックして表示されるドロップダウンリストから「Power BI」を選択します。
    表示される設定画面から青い「承認」ボタンをクリックし、Power BIにログインしたアカウントで承認します。

1. 承認されると出力の設定画面に切り替わります。
    以下のように設定を入力・選択して保存します。
    保存した後、入力設定時と同様に一覧に設定した項目が追加されており、接続テストが成功したと通知されたら完了です。
    
    | 項目                   | 設定内容             |
    | ---------------------- | -------------------- |
    | 出力エイリアス         | 任意の出力エイリアス |
    | グループワークスペース | 任意のワークスペース |
    | 認証モード             | デフォルトのままでOK  |
    | データセット名         | 任意のデータセット名 |
    | テーブル名             | 任意のテーブル名     |
  
    ![stream_008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682605/1681baca-b024-2602-970e-168c4c5dd890.png)


1. 左側のメニューから「クエリ」を探してクリックし、入力欄に以下のように入力して保存します。
    設定が保存された通知が表示されたらOKです。

    ```sql:クエリ
    SELECT
        messageID,
        deviceID,
        CAST([datetime] AS datetime) AS datetime,
        ch1, ch2, ch3, ch4, ch5, ch6, ch7, ch8
    INTO
        [＜設定した出力エイリアス＞]
    FROM
        [＜設定した入力エイリアス＞]
    ```

    ![stream_009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682605/f815c7e3-2088-4867-a973-21433ee39587.png)


1. Stream Analyticsジョブの概要に戻り、「開始」ボタンをクリックしてください。
    少し時間がかかりますが、問題なく開始されると通知が表示されます。
 

## Power BIの設定
1. Power BI Desktopの新規作成画面を起動し、画面上部の「Power BIデータセット」を選択します。
   レポートを作成するデータセットの選択画面が表示されるので、Stream Analyticsの設定時に入力したデータセットを選択します。
   
    ![powerbi_006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682605/10a78144-ad4e-97fe-f8d4-533445f3da2f.png)
   

1. 画面の右側に「フィルター」、「視覚化」、「フィールド」の設定が表示されます。
    まず、フィールドの設定でチャートに含めたいチャネルにチェックを入れます。
    次に、視覚化の設定で折れ線グラフを選択します。
    中央に表示されるチャート画面は自由に大きさを変えられます。
    この時点では横軸を決めていないので、値の和が表示されます。
    
    ![powerbi_007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682605/7e5de729-7331-779b-335d-6194b3c72afe.png)


1. フィールドの設定の「datetime」を視覚化の「軸」の枠にドラックアンドドロップします。
    すると、横軸を日時で取るようになり、波形が描画されます。
    必要に応じてフィルター設定の「datetime」を展開し、任意の表示範囲を設定してフィルターを適用してください。
    画像では最近の5分間のデータを表示するように設定しています。
    また、最新の情報に更新したい場合は画面上部の「更新」ボタンをクリックしてください。
    
    ![powerbi_008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682605/360ebfb2-42fe-5035-94b0-049dbd70bc60.png)


1. 確認ができたらAzure PortalからStream Analyticsジョブの概要を開き、「停止」ボタンをクリックしてデータの送信を停止してください。
    ※Stream Analyticsは動作時間とストリーミングユニットに応じて課金されます。
   

# まとめ
IoT Hubへ送信されたデータをPower BI Desktopを使用して可視化できました。
また、今回を含めた全7回の記事でエッジデバイスにIoT EdgeランタイムをインストールするところからIoT Hubへの接続とデータの送信、データを可視化するまでの流れを紹介しました。
どなたかの助けになるような情報があれば嬉しいです。


# 参考

[^e-RT3]: [リアルタイムOSコントローラ　e-RT3 Plus F3RP70-2L](https://www.yokogawa.co.jp/solutions/products-platforms/control-system/real-time-os-controller/ert3-ai-platform/)
[^azure]: [Azure Certified Device catalog](https://devicecatalog.azure.com/)
[^appservicedoc]: [Web アプリで Azure IoT Hub からのリアルタイム センサー データを視覚化する](https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-live-data-visualization-in-web-apps)
[^powerbidoc]: [Power BI を使用して Azure IoT Hub からのリアルタイム センサー データを視覚化する](https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-live-data-visualization-in-power-bi)