

# Executar a taxa de dados adaptativa (ADR) com o AWS IoT Core for LoRaWAN
<a name="iot-lorawan-adr"></a>

Para otimizar o consumo de energia de transmissão do dispositivo e, ao mesmo tempo, garantir que as mensagens dos dispositivos finais sejam recebidas nos gateways, o AWS IoT Core for LoRaWAN utiliza a taxa de dados adaptativa. A taxa de dados adaptativa instrui os dispositivos finais a otimizarem a taxa de dados, a potência de transmissão e o número de retransmissões enquanto tentam reduzir a taxa de erros dos pacotes recebidos nos gateways. Por exemplo, se o dispositivo final estiver localizado próximo aos gateways, a taxa de dados adaptativa reduzirá a potência de transmissão e aumentará a taxa de dados. 

**Topics**
+ [Como funciona a taxa de dados adaptativa (ADR)](#iot-lorawan-adr-algorithm)
+ [Configurar limites de taxa de dados (CLI)](#iot-lorawan-adr-use)

## Como funciona a taxa de dados adaptativa (ADR)
<a name="iot-lorawan-adr-algorithm"></a>

Para habilitar a ADR, o dispositivo deve definir o bit ADR no cabeçalho do quadro. Depois que o bit ADR é definido, o AWS IoT Core for LoRaWAN envia o comando `LinkADRReq` do MAC e os dispositivos respondem com o comando `LinkADRAns`, que inclui o status de ACK do comando ADR. Depois que os dispositivos aceitarem (ACK) o comando ADR, ele seguirá as instruções da ADR do AWS IoT Core for LoRaWAN e ajustará os valores dos parâmetros de transmissão para obter a taxa de dados ideal. 

O algoritmo ADR do AWS IoT Core for LoRaWAN utiliza as informações de SINR no histórico de metadados de uplink para determinar a potência de transmissão e a taxa de dados ideais a serem utilizadas pelos dispositivos. O algoritmo utiliza as vinte mensagens de uplink mais recentes que se iniciam quando o bit ADR é definido no cabeçalho do quadro. Para determinar o número de retransmissões, ele usa a taxa de erro de pacote (PER), que é uma porcentagem do número total de pacotes perdidos. Ao utilizar esse algoritmo, você só pode controlar o intervalo de taxas de dados, ou seja, os limites mínimo e máximo das taxas de dados.

## Configurar limites de taxa de dados (CLI)
<a name="iot-lorawan-adr-use"></a>

Por padrão, o AWS IoT Core for LoRaWAN executará a ADR quando você definir o bit ADR no cabeçalho do quadro do dispositivo LoRaWAN. É possível controlar os limites mínimo e máximo da taxa de dados ao criar um perfil de serviço para os dispositivos LoRaWAN utilizando a operação de 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) do AWS IoT Wireless ou o comando [https://docs.aws.amazon.com/cli/latest/reference/create-service-profile.html](https://docs.aws.amazon.com/cli/latest/reference/create-service-profile.html) da AWS CLI.

**nota**  
Não é possível especificar os limites mínimo e máximo da taxa de dados ao criar um perfil de serviço no Console de gerenciamento da AWS. Só é possível especificá-los utilizando a API do AWS IoT Wireless ou a AWS CLI.

Para especificar os limites mínimo e máximo da taxa de dados, utilize os parâmetros `CreateServiceProfile` e `DrMax` com a operação de API `DrMin`. Os limites mínimo e máximo padrão da taxa de dados são 0 e 15. Por exemplo, o comando da CLI a seguir define um limite mínimo de 3 para a taxa de dados e um limite máximo de 12.

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

A execução desse comando gera um ID e um nome do recurso da Amazon (ARN) para o perfil de serviço.

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

É possível obter os valores dos parâmetros especificados utilizando a operação de 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) do AWS IoT Wireless ou o comando [https://docs.aws.amazon.com/cli/latest/reference/get-service-profile.html](https://docs.aws.amazon.com/cli/latest/reference/get-service-profile.html) da CLI. 

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

A execução desse comando gera os valores para os parâmetros do perfil de serviço.

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

Se você criou vários perfis, poderá utilizar a operação de 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) ou o comando [https://docs.aws.amazon.com/cli/latest/reference/list-service-profiles.html](https://docs.aws.amazon.com/cli/latest/reference/list-service-profiles.html) da AWS CLI para listar os perfis de serviço na Conta da AWS e utilizar a API `GetServiceProfile` ou o comando `get-service-profile` da CLI para recuperar o perfil de serviço para o qual você personalizou os limites da taxa de dados. 