8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

mockmockでより現実に近い条件でIoTテストをしてみる(デバイス=>AWS IoT Core)

Last updated at Posted at 2021-03-24

やりたいこと

社内研修の一環で**「ウォーターサーバーの水ボトルの在庫管理&発注を自動化するIoTシステム」**をRuby on RailsとAWSを使って開発しています。

前回はデバイスの代わりとしてMQTT Boxを利用して、デバイス => IoT Core => DynamoDBのテストをしていましたが、それを**mockmock**を使うことでより実際の条件に近い状態でテストをしてみました。(ちなみに自社サービスです)

というのもMQTT Boxはデバイスモックを1台しか設置できないのです。
今回の開発ではデバイスが2台必要で、この場合、自分でポチポチ2個データを作って、ポチポチ送信ボタンを押さねばなりません。一回だけならいいですが、毎度毎度となるとやや面倒だったりします。

MQTT Boxでできること

  • MQTTプロトコルでIoT Coreに送信できる

mockmockでできること

  • MQTTプロトコル、HTTP(S)でIoT Coreに送信できる
  • 同時に複数デバイス(モック)からデータを送信できる
  • データ送信をスケジューリングできる
  • データの値を複数用意しておいてそこから選んでデータを生成してくれる
  • and so on

mocmoc-01-830x460.png

実装!

ソフトウェアをダウンロードするとかではなく、ブラウザでの利用となります。
公式サイトでユーザー登録します。

プロジェクト作成

まずはプロジェクトを作成します。
mockmock_create.png

メニュー 選び方
サーバータイプ AWS IoT Coreを選択。AWSだと他にKinesisも選択できます。
プロトコル MQTTSを選択。
証明書ファイル IoT Coreの「このモノの証明書」を添付。前回記事の「IoT Coreの証明書を作成する」ご参照。
秘密鍵ファイル IoT Coreのプライベートキーを添付。前回記事の「IoT Coreの証明書を作成する」ご参照。
Root証明書ファイル IoT Coreのルート証明書 Root CAを添付。前回記事の「ルート証明書 Root CA」ご参照。

テンプレート作成

プロジェクトができたら、まずはIoT Coreに送信するデータの形式を作りました。

データテンプレート新規作成

左メニューから、データソース > テンプレート > + で、新規作成。

まずIoT Coreに送信したいデータのサンプル(それをテンプレートと言う)をJSONで記入。
mockmock_template.png

データテンプレートの中身を定義

次に、↑で作成したデータ型を一つずつ具体的に定義していきます。
どんなアーキテクチャかこの記事で明示してないのでなんのこっちゃかもしれませんが、参考までに。

生成タイプ「日時」

まずレポートID(String)。
生成タイプを「日時」とすると、データを生成するタイムスタンプを自動で生成してくれます。MQTTの時は手で書き換えていてやや面倒でした...。
mockmockでの時刻のフォーマットはこちらにあります。
スクリーンショット 2021-03-24 11.15.22.png

生成タイプ「mock定数」

デバイスID(String)。
生成タイプを「mock定数」とすると、あとで作るモックで決まった値(定数)を入れることができるようになります。
フィールド名は、あとでモックを作る際にデバイスIDを入れる時の名前(フィールド名)に。
スクリーンショット 2021-03-24 11.18.48.png

生成タイプ「バケット」

重さの情報(Integer)。
ここが今回のIoTシステムでセンサーが取得する値、みたいなイメージです。
生成タイプが「バケット」となっていますが、値をリスト化してそこから自動的に選んでデータを生成してくれるようになります。後述します。
スクリーンショット 2021-03-24 11.19.29.png

モックを作る

まずはmockグループを作成します。

左メニューから、mockグループ > + で新規作成します。
スクリーンショット 2021-03-24 11.45.13.png
+ mock定数フィールドを追加で先ほど作ったmock定数(device_id)を追加します。

mockグループの中に1台ずつモックを作る

mock管理 > mock一覧 > mock作成 と進んで作成します。

テンプレート作成時に設定し、mockグループ作成時に追加した、device_idはここに出てきます。
MQTTクライアントIDは省略可です。
スクリーンショット 2021-03-24 12.34.40.png

mockステータス

mockができたので、そのmockにどのような挙動をさせるかということを設定します。
スクリーンショット 2021-03-24 12.40.54.png

バリュージェネレーター

IoTデバイスがセンサーで取得し、送信する値(バリュー)を仮想で生成(ジェネレート)してくれる機能です。
今回は重さ(weight)という値を生成したいです。
先ほども「テンプレート」の時に選択した、バケットを使用しました。値のリストみたいな感じです。
スクリーンショット 2021-03-24 12.46.27.png

モック起動!

mock一覧画面 > 操作 > 起動 を選択するとモックが動き出します。
スクリーンショット 2021-03-24 12.49.20.png

↓AWSのコンソール画面でDynamoDBを確認するとちゃんとデータが届いています(๑˃̵ᴗ˂̵)و ヨシ!
スクリーンショット 2021-03-24 12.48.12.png

最後に

もし何かご指摘あれば、ぜひお願いします。
今回のケースではおそらく、mockmockの機能の1/1000くらいしか使えていません。。。
@yukabeoka 先輩の指導を賜りました。感謝。

8
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?