

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

# 通过 Amazon Location Service 使用 AWS IoT 和 MQTT 进行跟踪
<a name="tracking-using-mqtt"></a>

[MQTT](http://mqtt.org/) 是一种轻量级且被广泛采用的消息传递协议，专为受限的设备而设计。AWS IoT Core 支持使用 MQTT 协议和基于 WebSocket Secure (WSS) 的 MQTT 协议的设备连接。

[AWS IoT Core](https://aws.amazon.com/iot-core/) 将设备连接到设备 AWS 并使您能够在它们之间发送和接收消息。AWS IoT Core 规则引擎存储有关设备消息主题的查询，并允许您定义向其他 AWS 服务（例如 Amazon Location Service）发送消息的操作。知道自己位置为坐标的设备可以通过规则引擎将其位置转发到 Amazon Location 。

**注意**  
设备可能知道自己的位置，例如通过内置 GPS。AWS IoT 还支持第三方设备位置跟踪。想要了解更多信息，请参阅 *AWS IoT Core 开发人员指南*中的 [AWS IoT Core Device Location](https://docs.aws.amazon.com/iot/latest/developerguide/device-location.html)。

以下演练介绍了使用 AWS IoT Core 规则进行跟踪。如果您需要在将设备信息发送到 Amazon Location 之前对其进行处理，也可以将设备信息发送到您自己的 AWS Lambda 函数。有关使用 Lambda 处理您的设备位置的更多详细信息，请参阅 [AWS Lambda 与 MQTT 一起使用](tracking-using-mqtt-with-lambda.md)。

**Topics**
+ [先决条件](#mqtt-prerequisite)
+ [创建 AWS IoT Core 规则](#mqtt-create-iot-rule)
+ [在控制台中测试 AWS IoT Core。](#mqtt-test-iot-rule)
+ [AWS Lambda 与 MQTT 一起使用](tracking-using-mqtt-with-lambda.md)

## 先决条件
<a name="mqtt-prerequisite"></a>

在您开始跟踪之前，您必须完成以下前提条件：
+ [创建跟踪器资源](start-create-tracker.md)，将设备位置数据发送到该资源。
+ [创建 IAM 角色](https://docs.aws.amazon.com/iot/latest/developerguide/iot-create-role.html)以授予对跟踪器的 AWS IoT Core 访问权限。

  执行这些步骤时，请使用以下策略授予对您的跟踪器的访问权限：

  ```
  {
    "Version": "2012-10-17",		 	 	 
    "Statement": [
      {
        "Sid": "WriteDevicePosition",
        "Effect": "Allow",
        "Action": "geo:BatchUpdateDevicePosition",
        "Resource": "arn:aws:geo:*:*:tracker/*"
      }
    ]
  }
  ```

## 创建 AWS IoT Core 规则
<a name="mqtt-create-iot-rule"></a>

接下来，创建一条 AWS IoT Core 规则，将设备的位置遥测数据转发给 Amazon Location Service。有关创建规则的更多信息，请参阅 *AWS IoT Core 开发人员指南*中的以下主题：
+ 为有关创建新规则的信息[创建 AWS IoT 规则](https://docs.aws.amazon.com/iot/latest/developerguide/iot-create-rule.html)。
+ [位置操作](https://docs.aws.amazon.com/iot/latest/developerguide/location-rule-action.html)，用于特定于创建发布到 Amazon Location 的规则的信息 

## 在控制台中测试 AWS IoT Core。
<a name="mqtt-test-iot-rule"></a>

如果当前没有设备发布包含位置的遥测数据，则可以使用 AWS IoT Core 控制台测试规则。控制台有一个测试客户端，您可以在其中发布一条示例消息来验证解决方案的结果。

1. 通过以下网址登录到 AWS IoT Core 控制台：[https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/iot/home)。

1. 在左侧导航窗格中，展开**测试**，然后选择 **MQTT 测试客户端**。

1. 在**发布到主题**下，将**主题名称**设置为 *iot/topic*（或设置为您在 AWS IoT Core 规则中设置的主题名称，如果不同的话），然后为**消息负载**提供以下内容。将时间戳 *1604940328* 替换为最近 30 天内的有效时间戳（Amazon Location Service 跟踪器会忽略任何超过 30 天的时间戳）。

   ```
   {
     "payload": {
       "deviceid": "thing123",
       "timestamp": 1604940328,
       "location": { "lat": 49.2819, "long": -123.1187 },
       "accuracy": { "Horizontal": 20.5 },
       "positionProperties": { "field1": "value1", "field2": "value2" }
     }
   }
   ```

1. 选择**发布**到主题来发送测试消息。

1. 要验证 Amazon Location Service 是否已收到该消息，请使用以下 AWS CLI 命令。如果您在设置过程中对其进行了修改，请将跟踪器名称替换为您使用的名称。

   ```
   aws location batch-get-device-position --tracker-name MyTracker --device-ids thing123
   ```