Fusic Tech Blog

Fusicエンジニアによる技術ブログ

GPSマルチユニットSORACOM Editionの仮想デバイスでらくらくテスト!
2024/03/29

GPSマルチユニットSORACOM Editionの仮想デバイスでらくらくテスト!

こんにちは。毛利です。

今回、mockmockにてGPSマルチユニットSORACOM Editionの仮想デバイスプロジェクトを公開しましたので、その概要と使い方を書いてみようと思います。

GPSマルチユニット

先日、GPSマルチユニットSORACOM Editionが発売されました。

「位置情報(GPS)」「温度」「湿度」「加速度」の4つのセンサーがついたマルチなユニットです。 LTE-Mで通信を行います。 これだけでいろんなことができそうですね。IoT入門のハードルがどんどん低くなっています。

弊社でもジホがこれを使ってサテライトオフィスの鍵管理を試していました

仮想デバイスがほしい

さて、これを使ってIoTシステムを作ったとしましょう。 テストをどうやってやりましょうか?

  • 温度が40度以上になったらアラートだ! -> 40度まで温める?
  • 移動経路を可視化しよう! -> 実際に持って歩く?

などなど、作ったものによってはちょっとテストが面倒かもしれません。

また、試しにGPSマルチユニット1つでうまくいったとしましょう。 複数台でやってみたときにどうなるか確認したいとしたらどうしましょうか?

10台ぐらいでもお試しで買うのはちょっと厳しいかもしれません。

mockmockを使おう!

そんなときに役立つのがmockmock

その名の通り(?)、IoTデバイスのmock(仮想デバイス)を作るサービスです。 思い通りにテストデータを生成して、指定したところにデータを送信します。 そして仮想なので、台数も数千、数万単位で増やせます。

mockmockはSORACOMと連携しており、Beam/Funnel/Funkにもデータを送れちゃいます。

ただ、GPSマルチユニットはUDPでデータが送られるので、データの内容が

{"payload": "<データのJSON文字列をBase64エンコードした文字列>"}

という形になっています。 Funk/FunnelはJSONに変換してくれるオプションがあるのですが、Beamはそうはいかず。。 ということで、mockmockはこの形式のデータも作れるよう対応しました!

さらに、mockmock公式としてGPSマルチユニットの仮想デバイスプロジェクトを公開しました! 自分のアカウントにこのプロジェクトをコピーすることができます!

やってみよう!

アカウント作成

アカウントをまだお持ちでない方はこちらから。

メールアドレス、お名前、会社名、電話番号だけですぐに登録可能です。 お支払い情報のご登録なしでも無料枠としてmock1台が1年間ご利用いただけます。

プロジェクトコピー

プロジェクトコピー画面に移動し、 コピー元プロジェクトとして、[公開プロジェクト]から[mockmock official/soracom-gps-multiunit]を選択します。 プロジェクト名を付けてコピーしましょう。

コピーすると、次のようなプロジェクト設定画面に移動します。

SORACOM CLIの設定

mockmockのSORACOM連携機能では、mockmockが管理しているSORACOMアカウントを利用します。 プロジェクトごとにSORACOMのデバイスグループが割り当てられますので、 CLIを利用してデバイスグループの設定を行います。

まずは公式のSORACOM CLI 利用ガイドを参考にCLIをインストールしてください。

インストールが完了したら認証を行います。 その際、認証キーが必要になるので、mockmockのプロジェクト設定画面から発行します。

「SORACOM 認証キー一覧」 > 「新規作成」をクリックしてください。

認証キーシークレットは画面を移動すると再表示できませんので、ダウンロードやコピーを忘れずに行なってください。

認証キーID, 認証キーシークレットが取得できたら、それを使ってCLIでの認証を行います。

$ soracom configure --profile mockmock-gps-multiunit
--- SORACOM CLI セットアップ ---
/Users/yourname/.soracom ディレクトリがなければ作成し、そこにファイル 'mockmock-gps-multiunit.json' を作成します。

カバレッジタイプを選択してください。

1. Global
2. Japan

選択してください (1-2) > 2


認証方法を選択してください。

1. AuthKeyId と AuthKey を入力する(推奨)
2. オペレーターのメールアドレスとパスワードを入力する
3. SAM ユーザーの認証情報を入力する(オペレーターID、ユーザー名、パスワード)

選択してください (1-3) > 1
authKeyId: keyId-XXXXXXXXXXXX
authKey:

SORACOM Beamを利用する場合

CLIを使ってBeamの設定をします。 SORACOMデバイスグループIDはプロジェクト設定画面から取得できます。

$ cat << 'EOT' >./beam.json
[
  {
    "key": "inventory://beam.soracom.io",
    "value": {
      "enabled": true,
      "name": "dev-server",
      "addEquipmentHeader": false,
      "addSignature": false,
      "addSubscriberHeader": false,
      "customHeaders": {},
      "skipStatusCode": false,
      "useClientCert": false,
      "useClientCredentials": false,
      "addDeviceIdHeader": false,
      "destination": "<Beamからの送信先・ポート : (例)http://example.com:80/>"
    }
  }
]
EOT
$ soracom groups put-config --group-id <SORACOMデバイスグループID> \
--namespace SoracomBeam --body @beam.json --profile mockmock-gps-multiunit

SORACOM Funnelを利用する場合

認証情報ストアにFunnelに渡す認証情報を作成します。 [SORACOM 認証情報ストア] > [新規作成]をクリックし認証情報を作成します。 この時点では認証情報の内容は空なので、CLIを使って設定する必要があります。

Funnelの転送先サービスによって必要な認証情報は異なります。 詳細はGetting started with SORACOM Funnelを参照してください。

ここでは、AWS IoT Coreに転送する例を示します。 AWS IoT Coreに転送するには、認証情報としてIAMのクレデンシャル情報が必要です。 以下のように設定します。

$ cat << 'EOT' >./credential.json
{
  "type": "aws-credentials",
  "description": "for mockmock gps multiunit",
  "credentials": {
    "accessKeyId": "<IAMユーザーのアクセスキーID>",
    "secretAccessKey": "<IAMユーザーのシークレットアクセスキー>"
  }
}
$ soracom credentials update --credentials-id <SORACOM 認証情報ID> \
--body @credential.json --profile mockmock-gps-multiunit

次に、CLIを使ってデバイスグループにFunnelの設定を行います。 SORACOMデバイスグループID、SORACOM認証情報IDはプロジェクト設定画面から取得できます。 なお、resourceUrlにはSORACOM デバイスのIDである#{deviceId}が使用可能です。

$ cat << 'EOT' >./funnel.json
[
  {
    "key": "contentType",
    "value": "json"
  },
  {
    "key": "credentialsId",
    "value": "<SORACOM 認証情報ID>"
  },
  {
    "key": "destination",
    "value": {
      "provider": "aws",
      "resourceUrl": "<転送先URL : (例)xxxxxxxxxxxxx-ats.iot.ap-northeast-1.amazonaws.com/myTopic/#{deviceId}>",
      "service": "aws-iot"
    }
  },
  {
    "key": "enabled",
    "value": true
  }
]
EOT
$ soracom groups put-config --group-id <SORACOMデバイスグループID> \
--namespace SoracomFunnel --body @funnel.json --profile mockmock-gps-multiunit

SORACOM Funkを利用する場合

認証情報ストアにFunkに渡す認証情報を作成します。 [SORACOM 認証情報ストア] > [新規作成]をクリックし認証情報を作成します。 この時点では認証情報の内容は空なので、CLIを使って設定する必要があります。

Funnelの転送先サービスによって必要な認証情報は異なります。 詳細はGetting Started with SORACOM Funkを参照してください。

ここでは、AWS Lambdaに転送する例を示します。 AWS Lambdaに転送するには、認証情報としてIAMのクレデンシャル情報が必要です。 以下のように設定します。

$ cat << 'EOT' >./credential.json
{
  "type": "aws-credentials",
  "description": "for mockmock gps multiunit",
  "credentials": {
    "accessKeyId": "<IAMユーザーのアクセスキーID>",
    "secretAccessKey": "<IAMユーザーのシークレットアクセスキー>"
  }
}
$ soracom credentials update --credentials-id <SORACOM 認証情報ID> \
--body @credential.json --profile mockmock-gps-multiunit

次に、CLIを使ってデバイスグループにFunkの設定を行います。 SORACOMデバイスグループID、SORACOM認証情報IDはプロジェクト設定画面から取得できます。

$ cat << 'EOT' >./funk.json
[
  {
    "key": "contentType",
    "value": "json"
  },
  {
    "key": "credentialsId",
    "value": {
      "$credentialsId": "<SORACOM 認証情報ID>"
    }
  },
  {
    "key": "destination",
    "value": {
      "provider": "aws",
      "resourceUrl": "<Lambda関数のARN : (例)arn:aws:lambda:ap-northeast-1:xxxxxxxxxxxx:function:gps_multiunit>",
      "service": "lambda"
    }
  },
  {
    "key": "enabled",
    "value": true
  }
]
EOT
$ soracom groups put-config --group-id <SORACOMデバイスグループID> \
--namespace SoracomFunk --body @funk.json --profile mockmock-gps-multiunit

SORACOMの設定を確認する

プロジェクト設定画面の[SORACOM デバイスグループ設定] > [表示]ボタンをクリックすると、設定内容が表示されます。

例えば以下はFunnelを設定した場合の画面です。

テスト送信する

mockグループを2つ用意していますが、利用するSORACOMサービスによって使い分けてください。

  • Beam : gps_multiunit_base64
  • Funnel/Funk : gps_multiunit_json

使用するmockグループの画面に入り、[mock管理]タブ > [mock作成]ボタンをクリックするとmockが1つ作成されます。

次に、[mockステータス]タブ > [テスト送信] > [送信]ボタンをクリックすると、テスト送信が実行されます。

Funnelに送信した場合、以下のような結果になります。

mockを起動する

テスト送信がうまくいったら、次は実際にmockを起動してみましょう。 [mock管理]タブで、作成したmockに対して[操作] > [起動]をクリックすると起動が始まります。 数分でmockが起動しますので、しばらく待ちます。

以下はFunnelでAWS IoT Coreに転送し、AWS IoT Coreのテスト用MQTTクライアントで受信した図です。

調整してみよう

温度や湿度の変化を変える

温度や湿度は、グラフバリュージェネレーターによって連続的に変化するようにしています。 このグラフの形を変えることで、出力する値を変えることができます。

電池残量やアンテナ強度の変化を変える

電池残量やアンテナ強度は、バケットバリュージェネレーターによって離散値を生成しています。 送信ルールやデータリストの内容を変えることで、出力する値を変えることができます。

移動経路を変える

移動経路には、位置ジェネレーターを使用しています。デフォルトでは、ソラコム本社周辺のお散歩コースを設定してます。 経路や移動速度、各地点での滞在時間を更新することで、出力する値を変えることができます。

データフォーマットを変える

GPSマルチユニットは、SORACOMコンソールで出力するパラメーターが切り替えられます。 公開プロジェクトではすべてを出力した場合のフォーマットにしていますが、一部を出力しないようにした場合、フォーマットの変更が必要です。 データフォーマットは、データテンプレートで設定します。

送信頻度を変える

送信頻度は、mockステータスで設定します。デフォルトでは、GPSマルチユニットの最小送信間隔の1分で設定しています。 mockグループの[mockステータス]タブから、mockステータスの[設定]ボタンをクリックし、最大、最小送信間隔を設定してください。

エラーデータを送らないようにする

こちらは状態遷移の機能を使用しています。デフォルトでは、defaultから始まり、10%の確率でerrorに遷移し、1回エラーデータを送信したらdefaultステータスに戻るようにしています。 defaultからの状態遷移設定を削除すれば、エラーデータを送らないようになります。

その他

この他にもさまざまな設定が行えます。 以下をご覧ください。

まとめ

mockmockを使えば、簡単にGPSマルチユニットのmock(仮想デバイス)が作成できます。 ぜひみなさまのIoTシステム開発にお役立てください。

kta-m

kta-m

先進技術部門 IoTチーム チームリーダー