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

GravioのMQTTPublishコンポーネントを使用して、Azure IoT Hubへ温度データをPublishしてみました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/58494aad-5b87-cda5-0b53-8c70d5f7cd87.png)


#使用したもの

###ハードウェア
Windows 10 PC（バージョン1809）
Gravioクライメートセンサー（温湿度センサー）

###ソフトウェア
・[**Gravio**](https://www.gravio.com/jp/gpromo/1901-casual-iot)
　-Gravio Studio Ver.2.0.2065
　-Gravio Server Ver.2.0.2153

#Azure IoT Hubの設定
Azure IoT Hubを作成します。
[Azure IoT Hubを生MQTTS(mosquitto)やHTTP RESTで使う方法](https://qiita.com/ma2shita/items/032370350cba282d35ff)を参考に作業しました。

新しいIoT Hubリソースを追加します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/f8033d26-3933-eb1c-a891-8f49dc91ee3d.png)

IoT Hub 名などの必要事項を設定します。今回は、下記内容で設定しました。

|項目|設定内容|
|:-----:|:--|
|サブスクリプション|従量課金|
|リソースグループ|任意のリソースグループ、ない場合は新規作成|
|リージョン|任意のリージョン、今回は東日本を選択|
|IoT Hub 名|任意の名前、今回はgraviodemoで設定|

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/b2583387-a349-4d2e-0aff-339e76052d5a.png)

**IoT Hub 名**はGravio上で設定に使用するため、メモしておきます。

次にサイズとスケールを設定します。
サイズとスケールでは、F1のFreeレベルを今回は設定します。設定後、”確認及び作成”をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/051e0f00-eda7-bd9c-7556-b7e3ae6af307.png)

内容を確認後、作成をクリックすると、デプロイ進行中画面が表示されます。
2分くらいでデプロイが完了します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/3c064461-9bfe-2944-b7c7-580aac9e4546.png)

次に、”リソースに移動”からリソースの画面を表示し、エクスプローラー＞IoT デバイスを選択し、IoTデバイスを追加します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/83116acb-205d-33e5-37fc-4345acb885da.png)


任意のデバイスIDを入力し、保存します。Azure上で設定した**デバイスID**はGravio上の設定においても使用するためメモしておきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/ab3fa58b-c0bf-8107-4683-2df1170380f4.png)

ここまでで、Azure IoT Hub環境の設定は完了です。

#SAS Tokenの取得とビューアーの設定

SAS Tokenを取得するためにはSDKツールを使用します。
合わせて、データの送信確認のために、SDKツールのViewer機能を使用してモニタリングします。

SDKツールを利用するために、”iothubowner”に対する共有アクセスポリシーの取得が必要です。

設定＞共有アクセスポリシーを選択し、"iothubowner"をクリックします。
表示される、共有アクセスキーの、**接続文字列―プライマリーキー**をメモします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/9a80c8be-7141-4f49-d129-3be2bbc9ff4f.png)


##SDKツールのインストールと起動
Device Explorerという、SDKツールを使用します。

下記サイトより、msiファイルをダウンロードし、インストールします。
https://github.com/Azure/azure-iot-sdk-csharp/releases/tag/2019-1-4

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/d816955f-0bb7-903b-d901-f9d72edd519b.png)


インストール後、スタートメニューからAzure IoT Hub＞Device Explorerを開きます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/9cb26e16-2f55-62e2-3fe5-f3ba5b98cadd.png)

開くと、下記ツールが表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/d1a24a45-902d-8ba4-3b9d-90ca45353b11.png)

上段の赤枠内に、先程メモした接続文字列―プライマリーキーを貼り付け、Updateをクリックします。
ここまでの設定で、SDKツールが使えるようになりました。

##SAS Tokenの作成
Managementタブを開き、Azure上で作成したデバイスを選択し、"SAS Token..."ボタンをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/badc6a10-d9c1-52d2-e8ad-0794cb6d9516.png)

Generateをクリックし、'SharedAccessSignature sr'で始まる文字列をコピーします。こちらが、**SAS Token**となります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/55985b6d-8c82-1564-8327-c62c76dc0bce.png)

##ビューアーでモニタリングの開始
Dataタブを開き、"Monitor"をクリックすると、IoT Hubで受信するデータのモニタリングがスタートします。IoT Hubで受信したデータがリアルタイムで表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/bddba6ee-7f68-96f9-1420-d58afdf383e8.png)

ここまでで、Gravioの設定に必要となる各種設定情報の取得、およびGravioからの実行結果をモニタリングする設定が完了しました。

#Gravioの設定
温度センサーのデータをAzure IoT HUBへPublishします。
##センサーの設定
センサーの設定については、下記記事をご参照ください。
[温度センサーのデータをエクセルで簡単に表示](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)

##動作（アクション）の設定
最新の温度データ（1レコード）をSensorDBコンポーネントで取得し、
MQTTPublishコンポーネントを用いてAzure IoT HubへデータをPublishします。

アクション作成画面で、SensorDBコンポーネント＞MQTTPublishコンポーネントを並べます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/d76b78ff-8c0c-dd91-b657-36047e89c243.png)
####(1)SensorDBコンポーネントの設定

プロパティを選択し、各種項目を設定します。

|項目|設定値|
|:---|:---|
|エリア、レイヤー、デバイス|前節にて設定した内容|
|Latest Record Only|☑|
|その他|デフォルト値|

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/2c67be01-789f-9905-0d74-f05de382fac9.png)

次にMQTTPublishコンポーネントへ送るデータを設定します。
ステップ変数の横に表示されている矢印アイコンをクリックし、ステップ出力を設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/027d7439-9e50-6312-caa3-b45084a0f4b2.png)

####(2)MQTTPublishコンポーネントの設定

プロパティを選択し、各種項目を設定します。
IoT Hub Hostnameは\<IoT Hub 名>.azure-devices.net'です。
今回はIoT Hub名が`graviodemo` なので `graviodemo.azure-devices.net` になります。

|項目|設定内容|例|
|:---:|:--------|:---|
|Broker Hostname|IoT Hub Hostname|graviodemo.azure-devices.net|
|Broker Port|8883|
|Client ID|Device ID|temperature-sensor|
|MQTT Username|"\<IoT Hub Hostname>/\<Device ID>/api-version=2016-11-14"|"graviodemo.azure-devices.net/temperature-sensor/api-version=2016-11-14"|
|MQTT Password|作成したSAS Token| SharedAccessSignature sr=graviodemo.azure-devices.net&sig=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&se=xxxxxxxxxx&skn=xxxxxxxxxx| 
|Topic|"devices/\<Device ID>/messages/events"|"devices/temperature-sensor/messages/events/"|
|Data Format|JSON|JSON|
|QoS|QoS2 以外|QoS 0|
|Retain|-|-|
|Secure Connection|☑|☑|
|Client Certificate File|-|-|
|Client Certificate Password|-|-|
|CA Certificate File|-|-|

プロパティ設定後は、以下のようになります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/012ed41b-81b6-a6c5-81dc-d1ffa426eb07.png)

次にステップ出力変数を作成します。プロパティ＞ステップ入力の横の矢印ボタンを選択し、IoT Hubへ送信するステップ出力変数を作成します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/18da81c9-45bf-bfa2-0671-7ad5e987b08f.png)


設定後、右上の"▷"をクリックし、動作を確認します。
正常に動作している場合は、Gravio、SDKツールの画面は以下のようになります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/5559e77f-04c7-5879-7302-f9478bcdb036.png)
Gravio画面
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/4a8f7da9-ad2f-d853-a859-6af155bb9f56.png)
SDKツール画面


##動作タイミング（トリガー）の設定
温度データを取得したタイミングでデータを送るように設定します。
トリガー画面から、新しいトリガーを設定します。

|項目|内容|
|:---:|:---|
|エリア、レイヤー|温度センサーを設定しているレイヤー|
|アクション名|作成したアクション|
|Classic/Threshold Trigger|Cassic Trigger|
|温度|>=0|

今回の設定は、温度が0度以上でAzure側にデータを送信するアクションを5秒ごとに行なう、という設定です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/9f221da0-b5dd-aba6-61b8-4ca3baac4f88.png)


以上で設定終了です。

#動作確認
ビューアーを見ることで、Azure IoT Hubがデータを受け取っていることを確認できます。
温度センサーを温めたり冷やしたりすること、センサーがデータを何度も送信するので確認しやすいです。

#あとがき
Azure IoT Hubと接続することによって、Azureと接続している各種可視化・分析ソリューションを利用できます。
普段からMicrosoft Azureを使っていらっしゃる方はGravioを使うことで簡単にIoTを始められるのではないでしょうか？
次回は、GravioのMQTT機能を使い、AWS IoT Coreへ同様にデータ送信を行なう方法をご紹介します。


#参考
Azure SDKのインストールについて
[Azure IoT Hubを触ってみた②　SDK編](https://azure-recipe.kc-cloud.jp/2016/03/iothub-2/)


Azure IoT Hubからのデータ連携例
[AzureとArduinoでIoT連携(IoTHub+StreamAnalytics+BlobStorage)](https://qiita.com/dojyorin/items/b461fa54d7bf0462ee92)