mockmockでAzure IoT Hubにデータを送るプロジェクトを作成する

こんにちは、mockmockチームエンジニアのジホです。

## この記事は
mockmockアドベントカレンダー 5日目の記事です。
mockmock から Azure IoT Hub にデータを送るプロジェクトを作成する方法をまとめます。

## やりたいこと
mockmockから json形式の `{"hello":"world"}` をAzure IoT Hubに送る！ことです。

## 手順
### 事前準備
#### [Azure]IoT Hubを作ります
- [チュートリアル](https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-raspberry-pi-web-simulator-get-started#create-an-iot-hub)を参考にIoT Hubを作成してください
- Shared access policiesを設定します
policy名をmockmockPolicyにして、permissionは[レジストリ書き込み]と[デバイス接続]をチェックします
![sharePolicy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/6fb11231-e491-b27a-8c44-e672b3accbf0.png)


- Message routingのCustom endpointsを設定します
  - endpoint名 : mockmock-endpoint-1
  - バッチ頻度 : 60秒
  - BLOB ファイル名形式 : {iothub}-{partition}-{YYYY}-{MM}-{DD}-{HH}-{mm}.avro
![customEndPoint.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/5b65ccf2-c8a4-c6b9-4228-33ff46491b5d.png)


- Message routingのRoutesを設定します
  - 名前 : mockmock-route-1
  - エンドポイント : mockmock-endpoint-1
![routes.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/359d45ee-ebda-6ca2-573a-244ba0571286.png)



#### [mockmock]プロジェクトを作成します
イメージで赤い線を引いたところを同じくします！  

- プロジェクト設定を作成します
![projectCreate.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/cb02c53c-06ba-0ce6-2111-dd8f3cecd9a0.png)


- mockグループを作成します
![groupCreate.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/9af18046-83e3-4081-76a1-1eedc96d77c7.png)


- mockステータスを作成します
![statusCreate.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/566b905a-a6b6-2094-597f-b46986d5f550.png)


- mockを作成します
![mockCreate.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/92a55d9a-9fba-6b8d-cbe1-f3bfeb71e5ed.png)




### データ送信
- [mockmock]プロジェクトから[Azure]IoT Hubにテスト送信します
送信をクリックするとポップアップが出ます。設定に問題なければ、ペイロードが `{"hello": "world"}` 、 成否が `true` という結果になるはずです。
![testSuccess.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/b26f5b92-f07c-72f5-b46b-3ecda8ad051f.png)


- mockを起動します(=mockステータスで指定した間隔で[Azure]IoT Hubにデータテンプレートで指定した値を送信する)
しばらくすると、データの送信が開始されます。
![mockStart.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/b6034142-67c0-760f-7957-e21c3a936b70.png)



### データ送信結果を確認
- [Azure]IoT HubのStorage Explorerから送信されたデータの存在を確認します
`{iothub}-{partition}-{YYYY}-{MM}-{DD}-{HH}-{mm}.avro` 形式の項目が見れます。ちゃんと送信できました！中身確認のためダウンロードします！
![storageExplorer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/88b8a531-e342-092b-f4df-68a768b5b9b8.png)


- Apache Avro形式なので、viewerを中身を確認します
  - 確認のためVisual Studio Codeの `Data Preview` Extensionをインストールします！
![vscodeDataPreview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/36a8ba98-f5b7-3b65-d115-8bc7fd75ced9.png)
  右を見ても
![vscodeDataPreviewRight.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/278de254-a800-104f-a89d-5c099da69cdb.png)
  左を見ても、
![vscodeDataPreviewLeft.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/a3c18d73-769f-742e-c440-20f9f22b9721.png)
だか送ったはずの `{"hello":"world"}` を見つかりません。。。  
調べてみると、binary formatであることが分かりました。であれば、上のイメージで見える `123 34 104 101 .....` がbinaryだと考えられます。
![binaryFormat.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/e87928bd-6c77-e9a4-2c46-cb67b7f5b3cb.png)
binary関連viewerが必要なのでVisual Studio Codeの `hexdump for VSCode` をインストールします。  
文字列 `hello` を検索すると発見できます！中身もmockmockで送った通りでした！！
![Hexdump.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247584/56b345b4-17e7-363f-b644-7126cb69db98.png)




## まとめ
本記事では、mockmockからAzure IoT Hubにデータを送るプロジェクトを作成しました。
Azure IoT Hubを使ってIoTシステムを構築している人はぜひお試しください。

明日は @Kta-M  がmockmockで `Amazon Kinesis Data Streams` にデータを送るプロジェクトを作成する方法をご紹介します。

## 参考
https://console.mock-mock.com/docs/guides/azure_iot_hub