Raspberry Pi+Azure IoT Hub+Azure Stream Analytics ジョブ+Power BIで温度データをグラフ化

 

前回はRaspberry Piで温度測定したデータをAzure IoT Hubでの受信まで実施してみました。

今回は、Azure IoT Hubで受信したデータを、Azure Stream Analytics ジョブを使いPower BIへ送信してみました。

      • Azure Stream Analytics(公式サイト)

https://docs.microsoft.com/ja-jp/azure/stream-analytics/stream-analytics-introduction

      • Power BI

https://docs.microsoft.com/ja-jp/power-bi/fundamentals/power-bi-overview

今回利用した機能の役割をざっくりと言うとこんな感じになります。

      • それぞれの役割
        • Raspberry Pi : 温度や画像等の情報を取得してAzureに送る【前回実施
        • Azure IoT Hub : IoTデバイス(ラズパイ)からの情報をAzureに取り込む【前回実施
        • Azure Stream Analytics : Azure IoT Hubで取り込んだデータをPower BIへ送る
        • Power BI : Azure Stream Analytics経由で送られてきたデータを取り込んでグラフ化する

Azure公式サイト等を参考にしながら設定を実施してみました。

前回実施した内容については、記事に纏めておりますのでこちらを見て頂ければと。

      • 前回実施した内容
        • Azure IoT Hubの作成
        • Raspberry PiでDHT11を使った温度/湿度データの収集
        • Raspberry Piで取得した温度/湿度をAzure IoT Hubへデータ転送

Azure IoT HubにRaspberry Piで収集した温度データを送ってみた

—-

1.Power BIアカウントの作成

Azure Stream Analytics設定時にリンクを張る必要がありますので、Power BIのアカウントを事前に作成しておきます。

Power BI自体は収集されたデータ(今回の場合は温度)をグラフ化する為に利用します。

1)Power BIのスタート画面へアクセスし無料で試すをクリックします。

      • Power BIアカウント作成画面URL

https://powerbi.microsoft.com/ja-jp/get-started/

2)はじめにが表示されますので、自分の電子メールアドレスを入力します。こちらはAzureのIDと別アドレスでもOKです。

3)はじめにで入力したメールアドレスに確認コードが来ますのでこのコードをコピーします。

4)自分のアカウントの作成がありますので、氏名、パスワード、先ほどコピーした確認コードを入力し開始をクリックします。

5)他の人を招待が表示されます。必要ない場合はスキップします。

6)Power BIのホーム画面が表示されます。これでPower BIのアカウント作成は完了です。

2.Azure Stream Analyticsの作成

Azure Stream Analytics ジョブを作成します。まずはStream Analytics ジョブ自体を作成します。

Azure Stream Analytics ジョブのクイックスタートを参考に進めました。

      • Azure Stream Analytics ジョブのクイックスタート

https://docs.microsoft.com/ja-jp/azure/stream-analytics/stream-analytics-quick-create-portal

1)メニューでStream Analytics ジョブを選択します。追加を選択しジョブを作成します。

※似たような名前のサービスがあるので間違って選択しないように注意しましょう。

2)ジョブ名、リソースグループ名を入力し場所を選択します。今回は検証なのでストリーミングユニットは1にします。

※Azure IoT Hubを無償プランにしていても、Stream Analytics ジョブの課金は別に発生するので注意が必要です。課金はストリーミングユニット×利用時間で発生します。

      • Azure Stream Analytics 課金

https://azure.microsoft.com/ja-jp/pricing/details/stream-analytics/

これでAzure Stream Analytics ジョブ自体の作成は終了です。

3.Azure Stream Analytics ジョブの設定(ジョブの入力、出力、クエリの設定)

作成したAzure Stream Analyticsジョブの設定を行います。

      • 今回実施した内容
        • ジョブの入力設定でAzure IoT Hubと接続を作成
        • ジョブの出力設定でPower BIとの接続を作成
        • クエリの設定でジョブの入力と出力の関連付けを行う

1)Stream Analytics ジョブのメニューでジョブトポロジにある入力を選択します。ストリーム入力でIoT Hubを選択します。

2)入力のエイリアス名を設定します。前回作成したIoT Hubを選択し保存を選択します。それ以外はIoT Hubを選択し時点で自動入力されるのでそのまま進めます。

3)入力のエイリアスが出来ている事を確認します。

4)次にジョブトポロジの出力を選択し、ジョブ出力のエイリアスを作成します。追加で今回はPower BIを選択します。

5)Power BIの承認が表示されます。承認するをクリックします。(Power BI側での承認になります。)

6)サインインの画面が表示されますので、Power BIのアカウントでログインします。ログインが終わるとPower BI側で承認されます。

7)新規出力設定になります。出力エイリアス名、データセット名、テーブル名を設定します。データセット名はPower BI側で表示される名称になる為分かりやすい名前に設定します。(今回はRaspBerryPiで設定しています。)

これで出力のエイリアス設定が完了です。次にクエリ設定を行います。

8)ジョブトポロジでクエリを選択します。クエリの入力画面が表示されますの、クエリを入力して保存します。

クエリ内容(※入出力のクエリ名は〔〕の中に設定します。)

SELECT *
INTO
[出力のクエリ名]
FROM
[入力のクエリ名]

実際にデータが取得されているのが入力のプレビュー部分で確認出来ます。

4.Azure Stream Analytics ジョブを使ってPower BIへデータを送ってグラフを作成する

作成したAzure Stream Analyticsジョブを実行して、Power BIを使って温度データのグラフを作成します。

1)作成したStream Analytics ジョブを選択し開始をクリックします。

2)ジョブの開始画面が表示されますので、開始をクリックします。

3)Power BIにログインをしマイワークスペースを選択します。そうすると設定したRaspBerryPiというデータセットが表示されている事が確認出来ます。(ここに表示される名称はデータセット名になります。)

4)RaspBerryPiのレポートの作成を選択します。

5)今回は横軸にEvenEnqueuedUtcTimeを選択し、縦軸にtemperratureとhumidityを選択します。

実際にデータを2日ほど取得した所、下記のように取得した温度データと湿度データのグラフを作成することが出来ました。

今回は非常に簡単な設定にしていますが、Power BIを使いこなせるともっとちゃんとしたグラフも作成可能かと思います。

※最初の方のバタつきはデータ取得が安定してなかったためです。

Azure IoT HubにRaspberry Piで収集した温度データを送ってみた

 

今回は初めてのAzur IoTという事で、Raspberry Piで温度測定したデータをAzure IoT Hubで収集して受信データの確認までを試してみました。

      • Azure Iot Hub(公式サイト)

https://docs.microsoft.com/ja-jp/azure/iot-hub/about-iot-hub

      • Raspberry Pi(Wiki)

https://ja.wikipedia.org/wiki/Raspberry_Pi

ざっくりと言うと、Azure IoT HubはIoTデバイス(ラズパイ)からの情報をAzureに取り込むインターフェースで、Raspberry Piは温度や画像等の情報を取得してAzureに送るデバイスという所になります。

提供されているサンプルプログラムを活用しながら、初めてのIoTにチャレンジしてみました。言語はPhytonを利用しています。

1.Azure IoT Hubの作成

まず最初にデータをAzure で受ける為の窓口としてAzure IoT Hubを作ってみます。

      • 実施した内容
        • Azure IoT Hubの作成
        • IoTデバイスの作成

1)Azure PoratalでAzure IoT Hubのメニューを開き追加をクリックします。。

2)IoT ハブの作成画面になります。リソースグループ、領域(リージョン)、IoT Hub名を適時設定します。

3)ネットワーク設定します。IoTデバイスがどこから接続されるのかの設定になります。今回はパブリックエンドポイント(すべてのネットワーク)を選択して進めます。

4)IoT Hubのスケールとサイズを選択します。

詳細は下記に記載されておりますが、StandardとBasicにより出来る機能が異なります。エディションにより処理量が異なります。

      • IoT Hubの価格とレベル

https://azure.microsoft.com/ja-jp/pricing/details/iot-hub/

今回はF1:Freeレベル(Standard)を選択しています。

5)タグの設定を必要に応じて実施します。設定しない場合はそのまま次へ:確認および作成をクリックします。

6)確認画面が表示されます。内容に問題が無ければ作成をクリックします。

これでIoT Hubの作成は完了です。

次にIoTデバイスの設定を行います。IoTデバイス(今回の場合はラズパイ)はAzure IoT Hub接続とするための設定になります。作成したIoT Hubを表示します。

7)IoTデバイスのメニューを選択します。新規作成をクリックしIoTデバイスを追加します。

8)デバイスの作成を行います。デバイスのIDにIoTデバイス名を設定します。

X.509の証明書の利用も可能なようですが、今回はデフォルトの対称キーで進めます。主キーやセカンダリキーは自動(自動生成キーにチェックありの場合)払い出しされます。

IoTデバイスを確認すると作成されれている事が分かります。これでAzure側の準備は完了です。

2.Raspberry Piで温度/湿度測定を行う

今回はRaspberry Pi+DHT11(温度センサー)を利用して構成します。一番情報が多く、サンプルプログラムが提供されていたDHT11を利用しています。

実際の設定はこちらの記事を参考に進めました。

https://qiita.com/mininobu/items/1ba0223af84be153b850

記事を参考にして進めてサンプルでDHT11を使って温度/湿度データが取得出来ている所まで確認しました。

3.Raspberry Pi(DHT11)で取得した温度/湿度をAzure IoT Hubへのデータ転送

Raspberry Pi+DHT11(温度センサー)を利用して温度/湿度のデータが取得出来た前提で進めます。Phytonを使っています。

      • 今回実施した内容
        • Raspberry PiでAzure IoT用のモジュールインストール
        • サンプルプログラムダウロード
        • サンプルプログラムを合体させてAzure IoTへデータ転送
        • Azure Cloud Shellを使ってデータ転送状況の確認

まず最初にRaspberry PiでAzure IoT用のモジュールをインストールします。Raspberry Pi上で下記コマンドを実行します。(権限に応じてSudoしてコマンドを実行します。)

  pip install azure-iot-device

次にサンプルプログラムをダウンロードします。ダウンロードしたのは2つになります。

      • Azure IoTサンプルプログラム(SimulatedDevice.py)

https://github.com/Azure-Samples/azure-iot-samples-python/blob/master/iot-hub/Quickstarts/simulated-device

      • DHT11サンプルプログラム(example.py)

https://github.com/szazo/DHT11_Python

Azure IoTサンプルプログラムはランダムで値を生成しています。これをDHT11で取得したデータに置き換えます。

      • サンプルプログラムからの変更点
        • import部分は2つのプラグラムを統合
        • DHTStatでDHT11で得られる情報を取得し、DHT11Statusに格納
        • temperature、humidityにDHT11Statusから取得したデータを格納(サンプルプログラムではランダムの数値の部分を変更)
        • Port443を利用したかったのでwebsockets=Trueを追記
        • GPIOのピン番号4に変更(自分が作成した環境がGPIO4だったので。)

実際に利用したプログラムはこちらになります。(もっときれいになるとは思います。)

import RPi.GPIO as GPIO
import dht11
import time
import datetime
from azure.iot.device import IoTHubDeviceClient, Message

#Azure IoT Connection
CONNECTION_STRING = =”Azure IoT 接続情報

#DHT11設定
TMPGpio = 4
GPIO.setmode(GPIO.BCM)

#MSG TXT
MSG_TXT = ‘{{“temperature”: {temperature},”humidity”: {humidity}}}’

def iothub_client_init():

 # Create an IoT Hub client
 client = IoTHubDeviceClient.create_from_connection_string(CONNECTION_STRING, websockets=True)
 return client

def iothub_client_telemetry_sample_run():

 try:
  client = iothub_client_init()
  print ( “IoT Hub device sending periodic messages, press Ctrl-C to exit” )
  dhtStat = dht11.DHT11(pin = 4)

   while True:
    DHT11Status = dhtStat.read()
    DHT11Status.is_valid()
    temperature = DHT11Status.temperature
    humidity = DHT11Status.humidity
    msg_txt_formatted = MSG_TXT.format(temperature = temperature, humidity = humidity)
    message = Message(msg_txt_formatted)

# Add a custom application property to the message.
# An IoT hub can filter on these properties without access to the message body.
   if temperature > 30:
    message.custom_properties[“temperatureAlert”] = “true”
   else:
    message.custom_properties[“temperatureAlert”] = “false”

# Send the message.
   print( “Sending message: {}”.format(message) )
   client.send_message(message)
   print ( “Message successfully sent” )
   time.sleep(5)

  except KeyboardInterrupt:
   print ( “IoTHubClient sample stopped” )

  if __name__ == ‘__main__’:
   print ( “IoT Hub Quickstart #1 – Simulated device” )
   print ( “Press Ctrl-C to exit” )
   iothub_client_telemetry_sample_run()

Azure IoTの接続情報は作成したIoTデバイスのプライマリ接続文字列を指定します。この中にAzure IoTデバイス名やキー情報等、Azure IoT Hubへの接続に関する必要な情報がすべて含まれています。

Raspberry Pi上で適当な名前を付けて保存(拡張子は.py)します。

4.Raspberry PiからAzure IoT Hub転送されたデータを確認する

Raspberry Pi上で先ほど作成したプログラムを実行します。

保存したプログラムをダブルクリックするとThonnyが開きます。Runをクリックすると下記のようにプログラムが実行されます。

次にAzure Cloud Shellを開き以下のiot hub monitor-eventsコマンドを実行します。このコマンドを実行するとIoT Hubデバイスを通じて取得されているデータをリアルタイムで確認出来ます。

 az iot hub monitor-events –device-id IoTデバイス名 –hub-name IoT Hub名

過去データを参照するわけではないので、Raspberry Pi上でプログラム実行した状態でコマンドを実行する必要があります。

コマンドを実行すると取得出来ているデータが確認出来ます。

Azure Stream Analyticsジョブ+Power BIを使った温度データグラフ作成はこちらで試してみました。

Raspberry Pi+Azure IoT Hub+Azure Stream Analytics ジョブ+Power BIで温度データをグラフ化