使用 Amazon IoT Core 设备位置 MQTT 主题解析设备位置 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Amazon IoT Core 设备位置 MQTT 主题解析设备位置

您可以使用保留的 MQTT 主题通过设备定位功能获取设备的最新位置信息。 Amazon IoT Core

设备位置 MQTT 主题的格式

Amazon IoT Core 设备定位的保留主题使用以下前缀:

$aws/device_location/{customer_device_id}/

要创建完整的主题,请先将 customer_device_id 替换为用于识别设备的唯一 ID。我们建议您指定WirelessDeviceId,例如 LoRa WAN 和 Sidewalk 设备thingName,以及您的设备是否已注册为 Amazon IoT 事物。然后在主题后面附加主题存根,如下一节所示的 get_position_estimateget_position_estimate/accepted

注意

{customer_device_id} 仅可包含字母、数字和短划线。订阅设备位置主题时,只能使用加号(+)作为通配符。例如,您可以将 + 通配符用于 {customer_device_id} 来获取设备的位置信息。当您订阅主题 $aws/device_location/+/get_position_estimate/accepted 时,系统将发布一条消息,其中包含与任何设备 ID 匹配的设备的位置信息(如果成功解析)。

以下是用于与 Amazon IoT Core 设备位置进行交互的保留主题。

设备位置 MQTT 主题
主题 允许的操作 描述

$aws/device_location/customer_device_id/get_position_estimate

Publish

设备向本主题发布信息,以获取扫描的原始测量数据,以便通过 “ Amazon IoT Core 设备位置” 进行解析。

$aws/device_location/customer_device_id/get_position_estimate/accepted

订阅

Amazon IoT Core 设备定位成功解析设备位置后,会向该主题发布位置信息。

$aws/device_location/customer_device_id/get_position_estimate/rejected

订阅

Amazon IoT Core 当设备位置无法解析设备位置时,它会将错误信息发布到此主题。

设备位置 MQTT 主题的策略

要接收来自设备位置主题的消息,您的设备必须使用允许其连接到 Amazon 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" ] } ] }

设备位置主题和有效负载

下面显示了 “ Amazon IoT Core 设备位置” 主题、其消息负载的格式以及每个主题的示例策略。

/get_position_estimate

向此主题发布一条消息,以获取设备上的原始测量数据,以供 Amazon IoT Core 设备位置解析。

$aws/device_location/customer_device_id/get_position_estimate

Amazon IoT Core 设备位置通过发布到/get_position_estimate/accepted或来响应/get_position_estimate/rejected

注意

发布到该主题的消息必须是有效的 JSON 有效负载。如果输入消息不是有效的 JSON 格式,则不会得到任何响应。有关更多信息,请参阅消息有效负载

消息有效负载格式遵循与 Amazon IoT Wireless API 操作请求正文 GetPositionEstimate 类似的结构。其中包含:

  • 一个可选 Timestamp 字符串,对应于解析该位置的日期和时间。Timestamp 字符串的最小长度可以为 1,最大长度可以为 10。

  • 一个可选 MessageId 字符串,可用于将请求映射到响应。如果您指定此字符串,则发布到 get_position_estimate/acceptedget_position_estimate/rejected 主题的消息将包含此 MessageIdMessageID 字符串的最小长度可以为 1,最大长度可以为 256。

  • 来自包含以下一种或多种测量类型的设备的测量数据:

以下内容显示了示例消息有效负载示例。

{ "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

Amazon IoT Core 设备定位在返回设备已解析的位置信息时,会发布对此主题的回复。位置信息以 GeoJSON 格式返回。

$aws/device_location/customer_device_id/get_position_estimate/accepted

下面显示了消息有效负载和示例策略。

以下是 GeoJSON 格式的消息有效负载示例。如果您在原始测量数据MessageId中指定了,并且 Amazon IoT Core 设备位置成功解析了位置信息,则消息负载将返回相同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

Amazon IoT Core 当设备位置无法解析设备位置时,它会发布对此主题的错误响应。

$aws/device_location/customer_device_id/get_position_estimate/rejected

下面显示了消息有效负载和示例策略。有关这些错误的信息,请参阅对解析位置时出现的错误进行故障排查

以下是提供错误代码和消息的消息负载示例,这表明了 Amazon IoT Core 设备定位未能解析位置信息的原因。如果您MessageId在提供原始测量数据时指定了,而 Amazon 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" ] } ] }