ちょっと話題の記事

仮想デバイス作成サービス「mockmock」を使ってデータをAWS IoTにあげてみた

2017.01.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、せーのです。今日はなかなか難しい大量デバイスからのデータ送信テストをモックを使ってサクッとやってしまおう、というお話です。

mockmock

IoTの開発はAWS IoTを初めとするクラウドサービスの充実とRaspberry PiやIntel Edisonなどのシングルボードの性能向上によってかなりやりやすくなり、もはや組み込み分野の仕事、という感じはかなりなくなってきました。

通常のプログラマやエンジニアがIoTの開発をすると意外に困ってしまうのがテストです。大抵開発段階は1〜2台の実機しか手元にないことが多く、その場では動くけれども実際本番で数百台、数千台のデバイスを一気に動かすと思いもよらなかった不具合が出て来る、なんてことはよくあることです。
mockmockは専用のサーバに仮想のデバイスをWeb上から作成し、そこからデータを送り続けることができる、というサービスです。使いこなせば面倒だったテストプログラムの構築や実機の事前調達が一気に解決するかもしれません。現在はβモニターを募集中のようで、今登録すると2017年3月まではデバイス5台分が無料で使えるようです。今回はAWS IoTとの接続を試してみました。

やってみた

それではやってみましょう。これから行う作業内容をまとめておきます。

  • AWS IoTで証明書とRuleを作る
  • mockmockでプロジェクトを作り、証明書をセットする
  • 「mockグループ」を作ってどのパスに何秒ごとにデータを送るか設定する
  • 「mockテンプレート」を作って送るデータの内容を決める
  • mockの数を設定して、実際に送信する

まずはmockmockのトップページにアクセスして一番下のβモニターに参加ボタンをクリックしてアカウントを作成します。

mockmock14

アカウントを作ったらログインします。

mockmock1

ログイン出来たら一旦置いといてAWS IoT側の構築を行います。マネージメントコンソールからAWS IoTを開いてCertificationを開きます。

mockmock15

右上のcreateボタンより新規に証明書を作ります。1-clickで自動生成ができるのでこちらを使います。

mockmock16

証明書、秘密鍵、中間証明書をダウンロードしたらIoT Policyを作って紐付けます。Policyを新規に作成し

mockmock18

先程作った証明書からアタッチをクリックし

mockmock19

作ったポリシーと紐付けます。

mockmock20

次にRuleを作ります。今回はtest/testというTopicにデータがきたらS3にタイムスタンプをファイル名にして溜める、というルールを書きます。

mockmock17

これでAWS IoTの設定は終わりです。

さて、mockmockに戻りましょう。ヘルプを参考にしながらAWS IoTと繋いでみます。

まずログインしている状態を確認したらプロジェクトを新規に作成します。

mockmock2

MQTTSがまだ用意されていないのでHTTPSでつなぎます。AWS IoTのホストはAWS IoTの画面の左下にある「Settings」ボタンを押すと出てきます。

mockmock21

HTTPSで繋ぐ場合メソッドはPOSTがいいでしょう。ポートは[8443]です。次に証明書、秘密鍵、中間証明書をアップロードします。

mockmock3

証明書はAWS IoTからはcrtファイルでダウンロードされていますが、こちらではcrtファイルは使えないようなので拡張子をpemに変えてアップロードして下さい。全て終わったらボタンを押して登録します。

次にmockグループを作ります。下部にあるmockグループより新規登録を押します。

mockmock4

HTTPSでAWS IoTに繋ぐ場合パスは「<ホスト名>/topics/<トピック名>」というREST API形式になります。今回で言えば「<ホスト名>/topics/test/test」ですね。データテンプレートを追加リンクを押すとデータテンプレートの名前を入力する画面が出てきますので適当につけてテンプレートを登録します。テンプレートを登録するとデフォルトでサンプルのテンプレートが構成されてすぐ使えるので選択したら登録します。

mockmock5

次に先程のデータテンプレートを確認、修正します。上のメニューバーからデータテンプレートを選択し、先程作ったテンプレートの詳細を押して内容を直します。上でテンプレートを作らなかった方はこちらで新規登録を押して下さい。

mockmock6

テンプレートの中身を確認します。

mockmock7

キーバリューの形で書くことができるので必要な情報で書き換えます。今回は{"val1":"test"}というJSONを出したいと思います。

mockmock8

テンプレートを設定し終えたらmockグループに戻ります。mockボタンを押します。

mockmock9

最後にmockそのものの設定をします。mock数を設定し更新ボタンを押すとその数のmockが起動し始めます。

mockmock10

mockmock11

しばらく待ってS3を見てみると、mockmockから飛んできたデータが10秒置きに溜まっていました。

mockmock12

中身を見てみるときちんと{"val1":"test"}になっていました。成功です。

mockmock13

まとめ

いかがでしたでしょうか。MQTTSがない、mockのSTART/STOPボタンがない等まだ荒削りなところはありますが、手組みでスクリプト組むより何倍も早く仮想端末を用意することが出来ました。こちらまだβ版なので皆さんもいちど使ってみてフィードバックをあげてみてはいかがでしょうか。

参考リンク