mockmockでGoogle Cloud IoT Coreにデータを送るプロジェクトを作成する

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

本記事は [mockmockアドベントカレンダー](https://qiita.com/advent-calendar/2019/mockmock) 4日目の記事です。
昨日は「[mockmockでAWS IoT Coreにデータを送るプロジェクトを作成する](https://qiita.com/Y_uuu/items/6e0e7e532b3e65672d91)」でした。

今回は、**mockmock** から **Google Cloud IoT Core** にデータを送るプロジェクトを作成する方法をまとめます。

## 今回やること

Google Cloud IoT Coreにmockmockからデータを送るプロジェクトを作成します。

構成としては以下の通りです。

![Untitled_mockmock_-_Cacoo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/b1ff6ed9-92e8-1074-bb4a-109c6e13b39f.png)

## Google Cloud Platformの準備

### Pub/Subのトピックを作成する

Pub/Subのトピックを作成するため、コンソールを開きます。
Google Cloud Platformのコンソールにアクセスし、「画面左上のハンバーガーアイコン」→「Pub/Sub」の順でクリックしてください。

<img width="1922" alt="IoT_Core_–_IoT_Core_–_mockmock-dev_–_Google_Cloud_Platform_と_Slack___ext-fusic-soracom___fusic.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/1ec0eeb4-30c8-53fd-cf5a-e1d8a0edf825.png">

「トピックを作成」をクリックしてください。

<img width="1921" alt="トピック_–_Pub_Sub_–_mockmock-dev_–_Google_Cloud_Platform_と_Slack___ext-fusic-soracom___fusic.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/aa48fbb5-5e93-861c-bc5a-1bfffd809973.png">

モーダルが開くので、「トピックID」に任意のトピックIDを入力し「トピックを作成」をクリックしてください。

![トピック_–_Pub_Sub_–_mockmock-dev_–_Google_Cloud_Platform.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/5de18d94-7d49-eb8b-28fe-374329dec028.png)

以上でPub/Subのトピックの作成は完了です。

### IoT Coreのレジストリを作成する

IoT Coreのレジストリを作成するため、コンソールを開きます。
Google Cloud Platformのコンソールにアクセスし、「画面左上のハンバーガーアイコン」→「IoT Core」の順でクリックしてください。

<img width="1921" alt="トピック_–_Pub_Sub_–_mockmock-dev_–_Google_Cloud_Platform_と_Slack_____ext-fusic-soracom___fusic.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/3dcca000-4a24-d159-43da-4938e1685f0a.png">

「レジストリを作成」をクリックしてください。

<img width="1926" alt="IoT_Core_–_IoT_Core_–_mockmock-dev_–_Google_Cloud_Platform_と_Slack_____ext-fusic-soracom___fusic.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/1acc5eef-17ad-e196-1103-a009d1ef2a98.png">

以下の通り入力して「作成」をクリックしてください。

![レジストリの作成_-_mockmock-dev_-_Google_Cloud_Platform.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/cf97f4c6-c1bd-6c75-c39d-08cf4e9700a6.png)

|項目  |入力値  |
|---|---|
|レジストリID  |任意のレジストリID  |
|リージョン  |asia-east1  |
|プロトコル  |MQTT  |
|デフォルトのテレメトリーのトピック  |先の手順で作成したPub/SubトピックID  |
|デバイス状態のトピック  |先の手順で作成したPub/SubトピックID  |
|CA証明書の追加  |なし  |

以上でIoT Coreのレジストリの作成は完了です。

### サービスアカウントの作成

IoT Coreで受信したデータをPub/Subに送信するためのサービスアカウントを作成します。
コンソールを開くため、Google Cloud Platformのコンソールにアクセスし、「画面左上のハンバーガーアイコン」→「IAMと管理」→「サービスアカウント」の順でクリックしてください。

<img width="1944" alt="IoT_Core_–_mockmock-dev_–_Google_Cloud_Platform_と_Slack_____ext-fusic-soracom___fusic.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/3b8bea56-c305-72b5-d7e8-c691a1d7de5e.png">

「サービスアカウントを作成」をクリックしてください。

<img width="1921" alt="サービス_アカウント_–_IAM_と管理_–_mockmock-dev_–_Google_Cloud_Platform_と_Slack_____ext-fusic-soracom___fusic.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/4cf857f4-8e08-6dd9-50a7-730317423017.png">

「サービスアカウント名」に任意のサービスアカウント名を入力して、「作成」をクリックしてください。

<img width="1929" alt="サービス_アカウントの作成_–_IAM_と管理_–_mockmock-dev_–_Google_Cloud_Platform_と_Slack_____ext-fusic-soracom___fusic.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/a74b27a1-eff3-2e2a-cb05-815d0525bac9.png">

「役割」に「Cloud IoT プロビジョナー」を選択して、「続行」をクリックしてください。

<img width="1920" alt="サービス_アカウントの作成_–_IAM_と管理_–_mockmock-dev_–_Google_Cloud_Platform_と_company_session_detail_rb_—_joburu_academic.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/69a1100e-4c24-97e7-d400-03f4c2beea06.png">

「キーを作成」をクリックします。

<img width="1920" alt="サービス_アカウントの作成_–_IAM_と管理_–_mockmock-dev_–_Google_Cloud_Platform_と_company_session_detail_rb_—_joburu_academic.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/bc3b438f-63ac-2eef-90d6-92cd2d6b19be.png">

「キーのタイプ」に「JSON」を選択して、「作成」をクリックしてください。
秘密鍵がダウンロードされます。

![サービス_アカウントの作成_–_IAM_と管理_–_mockmock-dev_–_Google_Cloud_Platform.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/153aede7-1766-f5ce-a3ce-7c6a52b2f676.png)

「完了」をクリックしてください。

![サービス_アカウントの作成_–_IAM_と管理_–_mockmock-dev_–_Google_Cloud_Platform.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/b686ab10-48ce-379c-47f3-113079fe4131.png)

以上でサービスアカウントの作成は完了です。

## mockmockの準備

### プロジェクトを作成する

[プロジェクト新規作成画面](https://console.mock-mock.com/projects/new)へアクセスし、以下の通り入力後、「登録」をクリックしてください。

![IoT開発を加速する仮想デバイス作成サービス___mockmock.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/4fe0809f-154b-afb2-448f-cf46dbd60004.png)



|項目  |入力値  |
|---|---|
|プロジェクト名  |任意のプロジェクト名  |
|サーバタイプ  |[GCP] Cloud IoT Core  |
|キャパシティ  |cn1  |
|プロトコル  |MQTTS  |
|GCPリージョン  |先の手順で確認したIoT Coreのレジストリのリージョン  |
|GCPレジストリID  |先の手順で確認したIoT CoreのレジストリID  |
|GCP認証キー  |先の手順でダウンロードしたサービスアカウントの秘密鍵  |

### データテンプレートを作成する

送信するデータのテンプレートを作成します。

[データテンプレート新規作成画面](https://console.mock-mock.com/projects/pj-78d6dc59/data_templates/new)へアクセスし、「テンプレート名」に任意の名前を入力後、「登録」をクリックしてください。

![IoT開発を加速する仮想デバイス作成サービス___mockmock.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/b7637eaa-a636-6644-376f-9aa60902af51.png)


### mockグループを作成する

[mockグループ新規作成画面](https://console.mock-mock.com/projects/pj-78d6dc59/mock_groups/new)へアクセスし、以下の通り入力後、「登録」をクリックしてください。

![IoT開発を加速する仮想デバイス作成サービス___mockmock.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/020901f3-5ff1-5894-201c-324f821f8db9.png)

|項目  |入力値  |
|---|---|
|mockグループ名  |任意のmockグループ名  |
|最大稼働時間[sec]  |600  |

### mockステータスを作成する

次に「mockステータス」を作成します。
「作成したmockグループ名」→「mockステータス」→「mockステータス作成」の順でクリックしてください。

![IoT開発を加速する仮想デバイス作成サービス___mockmock.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/1b423472-46b4-b2be-0f8e-ffdc67954204.png)

以下の通り入力後、「登録」をクリックしてください。

![IoT開発を加速する仮想デバイス作成サービス___mockmock.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/dddff172-596c-2e53-39c4-6dde20edd271.png)

|項目  |入力値  |
|---|---|
|状態名  |default  |
|初期状態  |チェック  |
|Topic  |events  |
|QoS  |1  |
|Retain  |無効  |
|最小送信間隔[sec]  |10  |
|最大送信間隔[sec]  |10  |
|データテンプレート  |作成したデータテンプレート名  |

### mockを作成する

いよいよmockを作成します。「mockステータスタブ」で「mock新規作成」をクリックしてください。

![IoT開発を加速する仮想デバイス作成サービス___mockmock.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/bf50438a-c122-4706-e736-946c2a2afb27.png)

そのまま「登録」をクリックしてください。

![IoT開発を加速する仮想デバイス作成サービス___mockmock.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/068fdcc9-5800-8e5a-67f7-ec31c56cf532.png)

### テスト送信する

設定に齟齬が無いかテスト送信をして確認します。「mockステータスタブ」で「送信」をクリックしてください。

![IoT開発を加速する仮想デバイス作成サービス___mockmock.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/72a82f64-f78f-02de-4a95-69e2e989110b.png)

このように「成否」に「true」が表示されれば成功です。

![IoT開発を加速する仮想デバイス作成サービス___mockmock.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/8f500612-6b23-aaeb-6c06-a829e1ec1e73.png)

## mockmockからデータを送信する

いよいよデータを送信します。

### mockを起動する

「作成したmockグループ名」→「mock作成」の順でクリックしてください。

<img width="1440" alt="IoT開発を加速する仮想デバイス作成サービス___mockmock.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/b9842bac-6ba2-ba1b-f324-f0fcf812a017.png">

そのまま「登録」をクリックしてください。

![IoT開発を加速する仮想デバイス作成サービス___mockmock.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/ab7e0ead-7aae-6add-9d56-fbfd02774314.png)


mockが作成されました。
作成したmockの「操作」→「起動」をクリックしてください。

<img width="1439" alt="68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f36303939362f30343133653938332d313232612d613261322d663362332d3439626137346561313033312e706e67.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/340818e0-188d-12a6-f454-49c52fd1fcb3.png">

mockが作成され、データ送信が始まります。

### 送信したデータを確認する

設定したデータが送信されているか確認します。
Google Cloud Platformのコンソールにアクセスし、「画面左上のハンバーガーアイコン」→「Pub/Sub」→「トピック」の順でクリックしてください。

<img width="1923" alt="トピックの詳細_–_Pub_Sub_–_mockmock-dev_–_Google_Cloud_Platform_と_company_session_detail_rb_—_joburu_academic.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/5b6939fa-e4ab-c2cb-b9a5-2c5d4786e8c6.png">

先の手順で作成したトピックIDをクリックします。

<img width="1920" alt="トピック_–_Pub_Sub_–_mockmock-dev_–_Google_Cloud_Platform_と_company_session_detail_rb_—_joburu_academic.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/b6ab0c07-e312-7401-a944-70f871da3fb0.png">

「サブスクリプションを作成」をクリックします。

![トピックの詳細_–_Pub_Sub_–_mockmock-dev_–_Google_Cloud_Platform.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/edc4bded-2e6e-bdfb-af1e-efc4ee2352ec.png)

以下の通り入力後、「CREATE」をクリックしてください。

![サブスクリプションをトピックに追加_–_Pub_Sub_–_mockmock-dev_–_Google_Cloud_Platform.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/2fbfaead-0a8e-7166-e82c-59ee4d8624f2.png)

|項目  |入力値  |
|---|---|
|サブスクリプションID  |任意のサブスクリプションID  |
|配置タイプ  |pull  |
|サブスクリプションの有効期限  |操作がなかった日数の経過後に期限切れになります⇛1日  |
|確認応答期限  |10秒  |
|メッセージ保持期間  |１日  |
|確認済メッセージを保持  |チェックなし  |

「メッセージを表示」をクリックしてください。

![サブスクリプションの詳細_–_Pub_Sub_–_mockmock-dev_–_Google_Cloud_Platform.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/9c97bacd-ce73-81e1-3d08-b87f0d4a284d.png)

「PULL」をクリックすると、mockmockから送信されたメッセージが表示されます。

<img width="1920" alt="サブスクリプションの詳細_–_Pub_Sub_–_mockmock-dev_–_Google_Cloud_Platform_と_受信トレイ.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/702503d2-2595-41f1-ad03-dfe5898b0d07.png">

### mockを停止する

起動中のmockの「操作」→「停止」をクリックしてください。

<img width="1439" alt="68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f36303939362f37653830313761622d313837322d383436632d636137392d3063326431396136376434662e706e67.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60996/7d708067-a1b7-e9b1-f408-4e729a40775d.png">


以上でmockの停止は完了です。

## まとめ

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

明日は @cheekykorkind が `Azure IoT Hub` にデータを送るプロジェクトを作成する方法をご紹介します

## 参考

[[GCP] Cloud IoT Coreにデータを送る](https://console.mock-mock.com/docs/guides/gcp_cloud_iot_core)