使用 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(例如,对于 LoRaWAN 和 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" ] } ] }