10/03/2015

SORACOMとAzureでIoTをやってみた(Event Hub編)

 

 みなさんこんにちは。今回は 2015年9月30日にリリースされた ソラコムSORACOM AirSORACOM Beam を、 Microsoft Azure で使ってみたいと思います。Microsoft Azure で利用するサービスは、皆さんおなじみの Event Hub、Stream Analytics と Power BI を使った Cortana Analytics になります。

 センサーは Raspberry PI に接続した秋月電子の「BME280使用 温湿度・気圧センサモジュールキット」と「TSL2561使用 照度センサーモジュール」を想定していますが、こちらの接続方法まで記事に含めると主旨がわかりにくくなるので、今回は割愛させてください。

soracomsimraspi

 2015年9月30日(日本時間)という日は、AzureConで IoT Suite のアナウンスと、SORACOMのアナウンスがあり、IoTの運命的な出会いを感じますね! ;)

  1. SORACOMってなに?
  2. 今回のシナリオ
  3. SORACOM Beam から IMSI取得
    1. Azure Web Appsの作成
    2. SORACOMユーザコンソールのSORACOM Beam設定
    3. IMSI情報の取得を確認
  4. Event HubにJSONで送信
    1. Event Hubの作成
    2. Raspberry PIの送信プログラム作成
    3. Event Hubで受信を確認
  5. 受信データを分析する
    1. Stream Analyticsの作成
    2. Power BIでデータの確認
  6. 最後に

 

1. SORACOMってなに?

 SORACOMは、IoTデバイス向けに最適化された「つなげる」を提供するIoTプラットフォームです。現段階の主なサービスは、SORACOM Air(IoTデバイス向けの LTE/3G ネットワーク提供)と、SORACOM Beam(IoTデバイスのクラウドオフロード等を提供)です。

 

2. 今回のシナリオ

 今回は、Raspberry PIに接続されたセンサー情報を Power BI で分析するシナリオを紹介します。Raspberry PI のセンサー情報は SORACOM を経由してMicrosoft Azure に送られた後、データ整形されて Power BI に送られます。

  1. SORACOM Beamを経由してIMSI情報を取得
  2. 取得したIMSI情報とセンサー情報を、Event HubにJSONフォーマットで送信
  3. 送られてきたデータを単位時間のデータとしてデータ整形した後、Power BIで利用

 また、今回の構成では SORACOM Beam を使用していますが SSLのオフロードのためではなく、デバイス識別のために SIMカードのIMSI情報を取得するために使用しています。取得したIMSI情報は、センサーデータとともにMicrosoft Azure へ送信します。データをIMSIで管理すると、デバイス管理も便利になりますね。

 

00

 なお、Event Hubへの通信には SORACOM BeamのSSLのオフロードは使用していません(IMSIの取得には使っています)。Raspberry PIのようなパワーのあるLinuxなどのデバイスには Microsoft Azure が用意するSDKが存在し、これらのSDKはデバイスとAzureの間でSASトークンとSSLを使用したEnd-to-Endのセキュリティの仕組みが組み込まれているためです。また、Event Hubも一秒当たり数百万のイベントを直接デバイスから受けることができるので、間に入る部品をなるべく少なくしたほうが良いと考えたからです。Arduinoなどを使う場合や、Raspberry PIでも通信費を抑えるためにSDKを使わない方法(HTTPヘッダを通信に含めないなど)を考える場合は、SORACOM Beamのオフロードを使ったほうが良いと思います。

 

3. SORACOM Beam から IMSI取得(図の1の箇所)

 SORACOM Beamを使ってIMSI情報を取得します。②のEvent Hub に送信する JSON に IMSI情報を含めるためです。SORACOM Beamを経由したHTTP通信ではHTTPヘッダにIMSI 情報が追加されるため今回はAzure Web app を使いIMSI情報を取得します。まずは、SORACOM Beam経由のHTTPSリクエストを受けるためのAzure Web appを作成した後に、SORACOMのユーザコンソールでSORACOM Beamを設定します。

 

3.1. Azure Web Appsの作成

 Azureのポータルから Azure Web Apps の Web app でアプリケーションを作成します。今回は HTTPの要求ヘッダ情報を取得するためにPHPを使っています。ToolsのExtensionsからVisual Studio Onlineを使うと便利です。

0101

01

index.phpのコードは下記のような感じです。

3.2. SORACOMユーザコンソールのSORACOM Beam設定

 次は、SORACOM のユーザコンソールで、SORACOM Beam の設定を行います。ユーザコンソールを開いた後に、SIM の Group に HTTP Entry Point の設定を追加します。

02

 HTTP Entry Point の設定では、先ほど作成したAzure Web appのホスト名を指定し、IMSIヘッダをONにします。これにより、SORACOM Airから http://beam.soracom.io:8888/ にアクセスがあると、そのリクエストに”X-Soracom-Imsi"のヘッダが追加されます。これにより、Azure Web appでIMSI情報の取得を行います。

03

以上で、SORACOM Beamの設定は完了です。

04

 

3.3. IMSI情報の取得を確認

 SORACOM Beam と Azure Web app の接続を確認します。SORACOM Air に接続された Raspberry PI から、wget を使って SORACOM Beam にアクセスします。例えば、下記のような感じで環境変数としても使うことができます。

 

4. Event HubにJSONで送信(図の2の箇所)

 次は Raspberry PI からのセンサー情報を Event Hub で取得する箇所です。Event Hubを作成した後にRaspberry PIの送信プログラムを作成します。

 

4.1. Event Hubの作成

 AzureのポータルからEvent Hubを作成します。Event HubはService Busの一部となっているため、初めにService Busの作成から始めます。

0701

ポータルからEvent Hubをクリックすると、少し画面のデザインが異なる旧ポータルに変わり、サービスバスの名前空間の作成が開始されます。TypeにMessagingを選択し、好きなMessaging Tierを選択します。

07

次に、作成されたService Busの名前空間からEvent Hubを作成します。今回は簡易作成を選択しています。

08

 Event Hubが作成されたら共有アクセスポリシーの設定を行います。Raspberry PIからデータを受け取るポリシーとして SendRuleを作成します。また、Stream AnalyticsからのアクセスポリシーとしてReceiveRuleを作成ます。パーミッションは以下の通りです。

  1. SendRule:送信
  2. ReceiveRule:管理、送信、リッスン

設定したら、画面下の保存を忘れないようにしてください。これでEvent Hubの作成は完了です。

09

 

4.2. Raspberry PIの送信プログラム作成

 Raspberry PIからAzure Event Hubにデータを送信するために、プログラムを作成します。今回のRaspberry PIは、LinuxとPythonを使用します。以下のように追加でパッケージなどをインストールします。

 Pythonの実行環境が整いましたので、以下のようなプログラムを作成します。プログラムの中では、16行目辺りでSORACOM BeamからIMSI情報を取得して、そのIMSI情報を27行目のJSON内のDeviceIDとして使用しています。こうすることで、Raspberry PIを出荷する際は同じイメージを用意しておいても、Azure Event Hubに送られてきたセンサーの情報をSIMのIMSI情報で管理することができるようになります。SORACOMユーザコンソールでもIMSIを元にSIMの管理を行うため、管理が楽になりますね!(センサーから情報を取得する箇所は割愛しています)

なお、8行目の共有アクセスキーは、Event Hubの構成ページから取得してください。

10

 作成したプログラムは、cronなどで動かすと定期的にセンサーから取得した情報をEvent Hubに送信できるので便利です。

 

4.3. Event Hubで受信を確認

Event Hubで受信しているデータは、Event Hubのダッシュボードで確認することができます。

11

 

5. 受信データを分析する(図の3の箇所)

 受信したデータは Stream Analyticsを使用して Event Hub からのデータ取得と、30秒間隔の平均値計算、そして、計算された結果を Power BI に送信しています。

 

5.1. Stream Analyticsの作成

それでは、Azure ポータルからStream Analyticsを作成します。

12

 作成された後は、次の順で設定を行います。始めにInputの作成、次にOutputの作成、最後にQueryの作成です。下図のJob Topologyを順にクリックしていきます。

13

 Input の作成では、前に作成した Event Hub の ReceiveRule ポリシーを指定して設定を行います。なお、エイリアス名は後で説明する Stream Analytics の Query 内で使用する文字列になるので”-“文字は使用しないようにしてください。入力が終わったら Create をクリックします。

14

 次に、Output の作成です。今回は Power BI への出力ですが、現段階ではプレビューということもあり、少しデザインの異なる旧ポータル画面からの作成となります。

15

 Power BIとの接続が行われます。すでにPower BIのアカウントを持っている方は、組織アカウントを入力が求められます。

16

 Stream AnalyticsのQueryで使用するエイリアス名と、Power BIで使用されるデータセット名、テーブル名、グループ名を設定します。こちらも、エイリアス名には”-“を使用しないほうが良いでしょう。

17

 最後にQueryを設定します。今回はDeviceIDをグループにして、30秒間の平均値を生成しています。FROMでEvent Hubの入力エイリアスを指定して、INTOでPower BIの出力エイリアスを指定します。

18

Queryは以下になります。

全ての設定が終わったらStartをクリックして、Stream Analyticsを開始します。

19

 

5.2. Power BIでデータの確認

 Stream Analyticsから送られたデータはPower BIのデータセットとして入ってきます。このデータからレポートを作成し、ダッシュボードで表示することができます。

20

 

6. 最後に

 Microsoft Azure を使うと End-to-End の IoT システムを素早く構築することができるのがいいですね。あと、デバイスとクラウドの間は SORACOM の IoT プラットフォームが素早く安価に接続してくれるので最高にうれしいです。

 今回はデータをそのまま Power BI に送ってしまいましたが古いデータは捨てられてしまうので、SQL Database に保存したり、Storage Blob に入れたりするなど、データの分析で使用しやすいように保存してください。

 時代の変わり目を体験することができてうれしかったです。IoT を利用した未来を考えると凄くワクワクしますね!