

# 使用 AWS IoT Core for LoRaWAN 執行調適型資料速率 (ADR)
<a name="iot-lorawan-adr"></a>

為了最佳化裝置傳輸耗電量，同時確保閘道接收來自終端裝置的訊息，AWS IoT Core for LoRaWAN 會使用調適型資料速率。調適型資料速率會指示終端裝置最佳化資料速率、傳輸功率及重新傳輸次數，並同時嘗試降低閘道收到的封包錯誤率。例如，如果您的終端裝置位於閘道附近，則調適型資料速率就會降低傳輸功率並提高資料速率。

**Topics**
+ [調適型資料速率 (ADR) 的運作方式](#iot-lorawan-adr-algorithm)
+ [設定資料速率限制 (CLI)](#iot-lorawan-adr-use)

## 調適型資料速率 (ADR) 的運作方式
<a name="iot-lorawan-adr-algorithm"></a>

若要啟用 ADR，您的裝置必須在訊框標頭中設定 ADR 位元。設定 ADR 位元後，AWS IoT Core for LoRaWAN 會傳送 `LinkADRReq` MAC 命令，而您的裝置會使用包含 ADR 命令的 ACK 狀態的 `LinkADRAns` 命令進行回應。一旦裝置收到 ADR 命令的 ACK 狀態，就會按照來自 AWS IoT Core for LoRaWAN 的 ADR 指示進行，並調整傳輸參數值以達到最佳資料速率。

AWS IoT Core for LoRaWAN ADR 演算法會使用上行中繼資料歷程記錄中的 SINR 資訊，來判斷裝置要使用的最佳傳輸功率和資料速率。此演算法會使用框架標頭中設定了 ADR 位元後開始傳送的最近 20 個上行訊息。為了判斷重新傳輸次數，它會使用封包錯誤率 (PER)，也就是遺失的封包總數百分比。使用此演算法時，您只能控制資料速率的範圍，也就是資料速率的下限和上限。

## 設定資料速率限制 (CLI)
<a name="iot-lorawan-adr-use"></a>

根據預設，當您在 LoRaWAN 裝置的訊框標頭中設定 ADR 位元時，AWS IoT Core for LoRaWAN 將會執行 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 進行指定。

若要指定資料速率的下限和上限，請使用 `DrMin` 和 `DrMax` 參數搭配 `CreateServiceProfile` API 操作。預設的資料速率下限和上限分別為 0 和 15。例如，下列 CLI 命令會設定資料速率下限 3 和上限 12。

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

執行此命令會產生服務設定檔的 ID 和 Amazon Resource Name (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 命令擷取您自訂資料速率限制的服務設定檔。