【アップデート】AWS IoT Core Device Location が MQTT トピックによる位置情報の解決をサポートしました
先日、AWS IoT Core Device Location に新しいアップデートがありました。
従来は AWS IoT Core Device Location で位置情報を取得するには以下の方法で利用することができました。
- マネジメントコンソール
- AWS CLI
- SDK
そのため、デバイス側もしくは IoT Core のルールアクションで Lambda などで API を叩いて位置情報を取得する必要がありました。
今回のアップデートで、専用の MQTT トピックに IP アドレスや WiFi 情報などを送ることで位置情報を MQTT で受け取ることができるようになりました。
本機能のドキュメントは下記になります。
利用する MQTT トピック
今回のアップデートに伴い、専用の予約トピックが使えるようになりました。
$aws/device_location/customer_device_id/get_position_estimate
- 許可される操作:
Publish
- デバイスから送られる IP アドレスや WiFi 情報などを送るトピックです。
- 許可される操作:
$aws/device_location/customer_device_id/get_position_estimate/accepted
- 許可される操作:
Subscribe
get_position_estimate
トピックに送られた情報から位置を解決できたら、このトピックに位置情報が publish されます。
- 許可される操作:
$aws/device_location/customer_device_id/get_position_estimate/rejected
- 許可される操作:
Subscribe
- 位置の解決に失敗した場合、エラー情報が publish されます。
- 許可される操作:
トピックで指定する customer_device_id
はデバイスを識別する一意の ID になりますが、デバイスが AWS IoT Core に登録されているなら、その thing_name
を指定することが推奨されています。
(これは AWS IoT Core で MQTT を使う際の全般的な推奨事項になります)
やってみる
今回は簡単に動作確認したいので、AWS IoT Core のマネジメントコンソールにあるテストクライアントを使います。
最初に位置情報を受け取るトピックをサブスクライブしておきます。
テストクライアントの画面から、Subscribe to a topic
のタブを開いてトピックをサブスクライブします。トピックの「デバイス ID」にはワイルドカード +
を使いました。(個々の ID を指定しても構いません)
- サブスクライブするトピック:
$aws/device_location/+/get_position_estimate/accepted
次に位置情報をパブリッシュします。デバイス ID は適当に sampleThing
としています。(必要に応じて変更してください)
- パブリッシュするトピック:
$aws/device_location/sampleThing/get_position_estimate
送信するメッセージは、デバイスの IP アドレスを想定したものにしました。
MessageId
と Timestamp
はオプションです。Timestamp
が無い場合、リクエストを受信した時間が付与されます。位置情報が正常に解決できた場合、メッセージペイロードは同じ MessageId 情報を返します。
{ "MessageId": "ABCD1", "Timestamp": "1664313161", "Ip":{ "IpAddress": "54.240.198.35" } }
これでメッセージをパブリッシュすると $aws/device_location/+/get_position_estimate/accepted
のトピックにて、位置情報を受け取ることができました。
なお、位置情報を受け取れないなどうまくできない時は、トピック get_position_estimate/rejected
も合わせてサブスクライブしてエラー内容を確認しましょう。
下記はメッセージペイロードのフォーマットが正しくなかったときのエラーメッセージになります。
{ "errorMessage": "Validation error: Incorrect message payload", "errorCode": 400 }
最後に
今回のアップデートで従来よりもさらに簡単にデバイスの位置情報を取得できるようになりました。
すでにデータのやりとりで MQTT を利用されている場合は、ぜひ検討いただければと思います。
以上です。