Device Location MQTTトピックを使用した AWS IoT Core デバイスロケーションの解決 - AWS IoT Core

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Device Location MQTTトピックを使用した AWS IoT Core デバイスロケーションの解決

予約済みMQTTトピックを使用して、デバイスロケーション機能を使用して AWS IoT Core デバイスの最新の位置情報を取得できます。

デバイスの場所MQTTトピックの形式

AWS IoT Core Device Location の予約済みトピックでは、次のプレフィックスを使用します。

$aws/device_location/{customer_device_id}/

完全なトピックを作成するには、まず customer_device_id を、デバイスを識別するために使用する固有の ID に置き換えてください。デバイスが AWS IoT モノとして登録されている場合はWirelessDeviceId、 for LoRaWAN や Sidewalk デバイスなどの thingName、および を指定することをお勧めします。次に、以下のセクションに示すように、get_position_estimate または get_position_estimate/accepted などのトピックスタブをトピックに追加します。

注記

{customer_device_id} に含むことができるのは、英文字、数字、およびダッシュのみです。デバイス位置トピックに登録する場合、プラス記号 (+) をワイルドカードとして使用することのみが可能です。例えば、{customer_device_id} に対して + ワイルドカードを使用して、デバイスの位置情報を取得できます。トピック $aws/device_location/+/get_position_estimate/accepted にサブスクライブすると、正常に解決された場合、任意のデバイス ID と一致するデバイスの位置情報を含むメッセージが発行されます。

Device AWS IoT Core Location の操作に使用される予約済みトピックを次に示します。

デバイスの場所MQTTに関するトピック
トピック 許可されている操作 説明

$aws/device_location/customer_device_id/get_position_estimate

公開

デバイスはこのトピックに発行し、スキャンされた raw 測定データを AWS IoT Core Device Location で解決します。

$aws/device_location/customer_device_id/get_position_estimate/accepted

Subscribe

AWS IoT Core Device Location は、デバイスの場所が正常に解決されると、このトピックに位置情報を公開します。

$aws/device_location/customer_device_id/get_position_estimate/rejected

Subscribe

AWS IoT Core Device Location は、デバイスの場所の解決に失敗したときに、エラー情報をこのトピックに発行します。

デバイスの場所に関するMQTTトピックのポリシー

デバイスの場所トピックからメッセージを受信するには、デバイスが AWS IoT デバイスゲートウェイに接続し、MQTTトピックをサブスクライブできるようにするポリシーを使用する必要があります。

以下は、さまざまなトピックのメッセージを受信するために必要なポリシーの例です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/device_location/customer_device_id/get_position_estimate" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/device_location/customer_device_id/get_position_estimate/accepted", "arn:aws:iot:region:account:topic/$aws/device_location/customer_device_id/get_position_estimate/rejected" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account:topicfilter/$aws/device_location/customer_device_id/get_position_estimate/accepted", "arn:aws:iot:region:account:topicfilter/$aws/device_location/customer_device_id/get_position_estimate/rejected" ] } ] }

デバイスの位置情報トピックとペイロード

以下に、 AWS IoT Core デバイスロケーショントピック、メッセージペイロードの形式、各トピックのポリシー例を示します。

/get_position_estimate

このトピックにメッセージを発行して、デバイスロケーションによって解決される AWS IoT Core デバイスから未加工の測定データを取得します。

$aws/device_location/customer_device_id/get_position_estimate

AWS IoT Core Device Location は、 /get_position_estimate/acceptedまたは に発行することで応答します/get_position_estimate/rejected

注記

このトピックに発行されるメッセージは、有効なJSONペイロードである必要があります。入力メッセージが有効なJSON形式ではない場合、レスポンスは取得されません。詳細については、「メッセージペイロード」を参照してください。

メッセージペイロード形式は、 AWS IoT Wireless APIオペレーションリクエスト本文 と同様の構造に従いますGetPositionEstimate。以下を含みます。

  • 位置が解決された日時に対応するオプションの Timestamp 文字列。Timestamp 文字列の最小長は 1、最大長は 10 です。

  • リクエストをレスポンスにマッピングできる、オプションの MessageId 文字列。この文字列を指定すると、get_position_estimate/accepted または get_position_estimate/rejected トピックにパブリッシュされるメッセージにはこの MessageId が含まれます。MessageID 文字列の最小長は 1、最大長は 256 です。

  • 次の 1 つ以上の測定タイプを含む、デバイスからの測定データ。

以下は、メッセージペイロードのサンプルを示しています。

{ "Timestamp": "1664313161", "MessageId": "ABCD1", "WiFiAccessPoints": [ { "MacAddress": "A0:EC:F9:1E:32:C1", "Rss": -66 } ], "Ip":{ "IpAddress": "54.192.168.0" }, "Gnss":{ "Payload":"8295A614A2029517F4F77C0A7823B161A6FC57E25183D96535E3689783F6CA48", "CaptureTime":1354393948 } }

以下に示しているのは、必要なポリシーの例です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/device_location/customer_device_id/get_position_estimate" ] } ] }

/get_position_estimate/accepted

AWS IoT Core Device Location は、デバイスの解決された位置情報を返すときに、このトピックに対するレスポンスを発行します。位置情報は GeoJSON 形式で返されます。

$aws/device_location/customer_device_id/get_position_estimate/accepted

次は、メッセージペイロードとポリシーの例を示しています。

以下は、GeoJSON 形式のメッセージペイロードの例です。raw 測定データMessageIdで を指定し、 AWS IoT Core Device Location が位置情報を正常に解決した場合、メッセージペイロードは同じMessageId情報を返します。

{ "coordinates": [ 13.37704086303711, 52.51865005493164 ], "type": "Point", "properties": { "verticalAccuracy": 707, "verticalConfidenceLevel": 0.68, "horizontalAccuracy": 389, "horizontalConfidenceLevel": 0.68, "country": "USA", "state": "CA", "city": "Sunnyvalue", "postalCode": "91234", "timestamp": "2022-11-18T14:03:57.391Z", "messageId": "ABCD1" } }

以下に示しているのは、必要なポリシーの例です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account:topicfilter/$aws/device_location/customer_device_id/get_position_estimate/accepted" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/device_location/customer_device_id/get_position_estimate/accepted" ] } ] }

/get_position_estimate/rejected

AWS IoT Core Device Location は、デバイスの場所の解決に失敗すると、このトピックにエラーレスポンスを発行します。

$aws/device_location/customer_device_id/get_position_estimate/rejected

次は、メッセージペイロードとポリシーの例を示しています。これらのエラーの詳細については、「位置の解決時のトラブルシューティング」を参照してください。

以下は、エラーコードとメッセージを提供するメッセージペイロードの例です。これは、 AWS IoT Core Device Location が位置情報の解決に失敗した理由を示しています。未加工の測定データを提供するMessageIdときに を指定し、 AWS IoT Core デバイスロケーションが位置情報の解決に失敗した場合、同じMessageId情報がメッセージペイロードに返されます。

{ "errorCode": 500, "errorMessage":"Internal server error", "messageId": "ABCD1" }

以下に示しているのは、必要なポリシーの例です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:region:account:topicfilter/$aws/device_location/customer_device_id/get_position_estimate/rejected" ] }, { "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:region:account:topic/$aws/device_location/customer_device_id/get_position_estimate/rejected" ] } ] }