UniboでAzure IoTHubと連携させてみる
AzureIoTHubでメッセージを送受信してみる。
Azure IoTHubとUniboのメッセージをやりとりしてみましょう。
##全体図

前提条件
- Azureに登録できていること
手順
AzureのIoTHubに登録するところから説明していきます。
##Azure IoTHubの設定 それでは、AzureにログインしてIoTHubを実際に作っていきましょう!
Azure ポータルを開いていきます。
新規からモノのインターネット(IoT)をクリックして、IoTHubをクリックします。これから必要な設定を行っていきます。

無事にIoTHubが開かれると複数の入力欄が出るので写真を参考に入力欄を埋めていきましょう。 それでは、必須項目であるIoTHubの名前を入力してください。この名前はドメインでも使われますので他の方と重複するとエラーが出ます。入力欄の右端が緑のチェックが入れば大丈夫です。 次に、価格とスケールティアを変更していきます。この際にFreeを必ず選んでください。Standardを選んだまま作成してしまうと、後からFreeに変更することができず、再度作り直すことになります。
Freeを選択したらクリックして反映させてください。

リソースグループは既存ものがあれば、それを使って頂いてもかまいませんが、今回は初めてだという前提で、新規作成で好きなグループ名を入力してください。
Azureサーバーがある場所を指定することができます。東日本、西日本と選べますのでお好みでどうぞ。
ここまで問題なくできていれば、作成ボタンをクリックしてIoTHubをデプロイしていきます。

数分かかりますのでしばしお待ちを…

無事にIoTHubのデプロイが終わるとこのような画面が表示されます。 この画面では先ほど設定した内容が見れるほか、IoTHubの使用状態を確認することができます。

デバイスを繋げるために必要な設定を行っていきます。 共有アクセスポリシーからiothubownerをクリックし、プライマリキーをコピーします。 このとき写真で示してある部分をクリックすると簡単にキーをコピーすることができます。
このプライマリキーは次の作業で使用します。

この作業からDevice Explorerというツールを使っていきます。 このツールはWindows専用になります。MacやLinuxの場合iothub-explorerを使うようですが、今回は取り扱いません。
###Device Explorerのダウンロード こちらのリンクからダウンロードしてインストールをよろしくお願いします。
インストールが終わったところでDevice Explorerを使っていこうと思います。
このツールでIoTHubに接続できる端末の登録、削除、ほかにはデバイスからIoTHubへの通信モニターになったり、IoTHubからデバイスにデータを送ることができるなどIoTHubに必須のものとなっております。
説明が長くなりましたが、それではこのDevice Explorerに先ほどのプライマリキーを入力してUpdateをクリックしてください。

プライマリキーが合っていれば、このような表示がされます。この表示がでれば先ほど作ったIoTHubと連携ができるようになります。
これからIoTHubに接続できるデバイスの設定をしていこうと思います。
この作業はデバイスごとにIDを割り振る作業になります。
ManagementからCreateをクリックします。
Createをクリックするとこのような画面が出ますので、Device IDに接続するデバイス名を入力してください。
入力が終わったらCreateをクリックしてください。

無事にデバイスが作れると先ほどのDevice IDを持ったものが増えているはずです。

無事に作成できていれば、次はデバイスに必要な情報をコピーしておきましょう。 今回作成したDevice IDをクリックすると青色の欄が移動しますので、選択された状態で右クリックするとCopy connection string for selected deviceを選んでクリックしてください。
そうすると必要な情報がコピーされますので、その情報をUniboに登録していきます。

スキルクリエイターの設定をしよう
前もって、スキルクリエイターにログインし、全体図の章に書いてあるjsonファイルをスキルクリエイターにインポートします。
インポートができたらAzure IoTHubに接続するために必要な情報を入力していきます。
今回はテンプレートNodeに必要な情報を入力します。動的に切り替えて接続先を変更することなども可能ですが今回はシンプルに作成します。
| タイトル | 入力内容 |
|---|---|
| deviceId | Device Explorerでデバイス登録時に入力したDeviceID |
| key | Device Explorerで取得したCopy connection string for selected deviceをkeyと書かれた欄に貼り付けします。一例ですがHostName=unibo.azure-devices.net;DeviceId=unibo;SharedAccessKey=tIrfnS6csQ=このように貼り付けされます。今回必要となるのはSharedAccessKeyの部分となります。上の例であればtIrfnS6csQ=となります。それ以外は削除してください。 |
| protocol | http,mqtt,AMQPから選択 |
| data | Azure IoTHubに送信したいデータ |

次にAzure IoTHub Nodeを設定していきます。
設定項目としては、Hostnameに必要な情報を入力します。
先ほども使ったDevice Explorerで取得したCopy connection string for selected deviceをHostnameに貼り付けします。
一例ですがHostName=unibo.azure-devices.net;DeviceId=unibo;SharedAccessKey=tIrfnS6csQ=このように貼り付けされます。
今回必要となるのはHostNameの部分となります。上の例であればunibo.azure-devices.netとなります。
それ以外は削除してください。

Azure IoTHubとしての設定はこれまでのもので完了です。 あとはAzure IoTHubからのデータを受信したときにどのような動作をするのかこれから順に説明していきます。

###データ整形
Azure IoTHub Nodeでは送信時と受信時にNodeを通ります。送信時にも下のNodeにイベントが行くので注意が必要となります。
受信時にイベントが発火する場合、データがHEXデータでくるので文字列として活用したい場合は関数Nodeで変換してください。
このように変換することで文字列として扱えるようになりました。
その後、送信なのか受信なのかを判定しています。その際の判定はMessage sent.という言葉がメッセージに含まれているかで判定することができます。
これにより、受信時のみUniboを動かすことができるようになりました。
受信時の処理
受信時にも注意が必要となります。 Azure IoTHubから別々のデータがネットワークなどの影響でまとめて届く場合があります。
この時に対策を取っていないと、Nodeが続々と発火する可能性があります。例としては、Uniboの動作が完了せずに終了することやUniboの発話が完了せずに終了するなど予期しない動作をする可能性があります。
対策としては、delay Nodeにて「レートの制限」や「時限リリースキュー」などがあります。もしくはグローバル変数などを用いフラグ管理するなどで対応することが可能です。
#まとめ
UniboとAzure IoTHubを使うことで外部との連携が簡単にできるようになります。 Azure IoTHubを使うことでハードウエアはもちろん、Webとの連携もできるのでぜひ試してみてください。