

# 使用 适用于 LoRaWAN 的 AWS IoT Core 执行自适应数据速率 (ADR)
<a name="iot-lorawan-adr"></a>

适用于 LoRaWAN 的 AWS IoT Core 使用自适应数据速率来降低设备传输功耗，同时确保由网关接收来自终端设备的消息。自适应数据速率指示终端设备优化数据速率、传输功率和重传次数，同时尝试降低网关收到的数据包的错误率。例如，如果您的终端设备靠近网关，则自适应数据速率会降低传输功率并提高数据传输速率。

**Topics**
+ [自适应数据速率（ADR）的工作原理](#iot-lorawan-adr-algorithm)
+ [配置数据速率限制（CLI）](#iot-lorawan-adr-use)

## 自适应数据速率（ADR）的工作原理
<a name="iot-lorawan-adr-algorithm"></a>

要启用 ADR，您的设备必须在帧头中设置 ADR 位。设置 ADR 位后，适用于 LoRaWAN 的 AWS IoT Core 会发送 `LinkADRReq` MAC 命令，您的设备将使用包含 ADR 命令的 ACK 状态的 `LinkADRAns` 命令进行响应。设备确认 ADR 命令后，它将按照来自 适用于 LoRaWAN 的 AWS IoT Core 的 ADR 说明调整传输参数值以获得最佳数据速率。

适用于 LoRaWAN 的 AWS IoT Core ADR 算法使用上行链路元数据历史记录中的 SINR 信息来确定设备使用的最佳传输功率和数据速率。该算法使用在帧头中设置 ADR 位后开始的 20 个最近的上行链路消息。为了确定重传次数，它使用数据包错误率（PER），即丢失的数据包总数的百分比。使用此算法时，您只能控制数据速率的范围，即数据速率的最小和最大限制。

## 配置数据速率限制（CLI）
<a name="iot-lorawan-adr-use"></a>

默认情况下，当您在 LoRaWAN 设备的帧头中设置 ADR 位时，适用于 LoRaWAN 的 AWS IoT Core 将执行 ADR。使用 AWS IoT Wireless API 操作 [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_CreateServiceProfile.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_CreateServiceProfile.html) 或 AWS CLI 命令 [https://docs.aws.amazon.com/cli/latest/reference/create-service-profile.html](https://docs.aws.amazon.com/cli/latest/reference/create-service-profile.html) 为 LoRaWAN 设备创建服务配置文件时，您可以控制数据速率的最小和最大限制。

**注意**  
从 AWS 管理控制台 创建服务配置文件时，无法指定最大和最小数据速率限制。只能使用 AWS IoT Wireless API 或 AWS CLI 指定该值。

要指定数据速率的最小和最大限制，请在 `CreateServiceProfile` API 操作中使用 `DrMin` 和 `DrMax` 参数。默认的最小和最大数据速率限制为 0 和 15。例如，以下 CLI 命令将最低数据速率限制设置为 3，将最大限制设置为 12。

```
aws iotwireless create-service-profile \ 
    --lorawan DrMin={{3}},DrMax={{12}}
```

运行此命令会生成服务配置文件的 ID 和 Amazon 资源名称（ARN）。

```
{
    "Arn": "arn:aws:iotwireless:us-east-1:123456789012:ServiceProfile/12345678-a1b2-3c45-67d8-e90fa1b2c34d",
    "Id": "12345678-a1b2-3c45-67d8-e90fa1b2c34d"
}
```

您可以使用 AWS IoT Wireless API 操作 [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_GetServiceProfile.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_GetServiceProfile.html) 或 AWS CLI 命令 [https://docs.aws.amazon.com/cli/latest/reference/get-service-profile.html](https://docs.aws.amazon.com/cli/latest/reference/get-service-profile.html) 获取指定参数的值。

```
aws iotwireless get-service-profile --id {{"12345678-a1b2-3c45-67d8-e90fa1b2c34d"}}
```

运行此命令会生成服务配置文件参数的值。

```
{
    "Arn": "arn:aws:iotwireless:us-east-1:651419225604:ServiceProfile/12345678-a1b2-3c45-67d8-e90fa1b2c34d",
    "Id": "12345678-a1b2-3c45-67d8-e90fa1b2c34d",
    "LoRaWAN": {
        "UlRate": 60,
        "UlBucketSize": 4096,
        "DlRate": 60,
        "DlBucketSize": 4096,
        "AddGwMetadata": false,
        "DevStatusReqFreq": 24,
        "ReportDevStatusBattery": false,
        "ReportDevStatusMargin": false,
        "DrMin": 3,
        "DrMax": 12,
        "PrAllowed": false,
        "HrAllowed": false,
        "RaAllowed": false,
        "NwkGeoLoc": false,
        "TargetPer": 5,
        "MinGwDiversity": 1
    }
}
```

如果您创建了多个配置文件，则可以使用 API 操作 [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ListServiceProfiles.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ListServiceProfiles.html) 或 AWS CLI 命令 [https://docs.aws.amazon.com/cli/latest/reference/list-service-profiles.html](https://docs.aws.amazon.com/cli/latest/reference/list-service-profiles.html) 列出 AWS 账户中的服务配置文件，然后使用 `GetServiceProfile` API 或 `get-service-profile` CLI 命令检索您为其自定义数据速率限制的服务配置文件。