

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# AWS IoT Device DefenderDemonstração do
<a name="dd-demo"></a>

**Importante**  <a name="deprecation-message-demo"></a>
Essa demonstração está hospedada no repositório Amazon-FreeRTOS, que está preterido. Recomendamos [começar aqui](freertos-getting-started-modular.md) ao criar um novo projeto. Se você já tem um projeto FreeRTOS existente baseado no repositório Amazon-FreeRTOS que está preterido, consulte o [Guia de migração do repositório Github do Amazon FreeRTOS](github-repo-migration.md).

## Introdução
<a name="dd-demo-introduction"></a>

Esta demonstração mostra como usar a biblioteca do AWS IoT Device Defender para se conectar ao [AWS IoT Device Defender](https://docs.aws.amazon.com/iot/latest/developerguide/device-defender.html). A demonstração usa a biblioteca coreMQTT para estabelecer uma conexão MQTT com TLS (autenticação mútua) ao agente MQTT da AWS IoT e a biblioteca coreJSON para validar e analisar as respostas recebidas do AWS IoT Device Defender. A demonstração mostra como construir um relatório em formato JSON usando métricas coletadas do dispositivo e como enviar o relatório construído para o serviço do AWS IoT Device Defender. A demonstração também mostra como registrar uma função de retorno de chamada na biblioteca coreMQTT para manipular as respostas do serviço AWS IoT Device Defender a fim de confirmar se um relatório foi aceito ou rejeitado.

**nota**  
Para configurar e executar as demonstrações do FreeRTOS, siga as etapas em [Conceitos básicos do FreeRTOS](freertos-getting-started.md).

## Funcionalidade
<a name="dd-demo-functionality"></a>

Esta demonstração cria uma tarefa de aplicação única que demonstra como coletar métricas, construir um relatório do Device Defender no formato JSON e enviá-lo ao serviço AWS IoT Device Defender por meio de uma conexão MQTT segura para o agente MQTT do AWS IoT. A demonstração inclui as métricas de rede padrão, bem como métricas personalizadas. Para métricas personalizadas, a demonstração inclui:
+ Uma métrica chamada "`task_numbers`" que é uma lista de IDs de tarefas do FreeRTOS. O tipo dessa métrica é "lista de números".
+ Uma métrica chamada "`stack_high_water_mark`" que é a marca d'água no topo da pilha para a tarefa da aplicação de demonstração. O tipo dessa métrica é "números".

A maneira de coletar métricas de rede depende da pilha TCP/IP em uso. Para as configurações do FreeRTOS\$1TCP e lwIP compatíveis, fornecemos implementações de coleta de métricas que coletam métricas reais do dispositivo e as enviam no relatório do AWS IoT Device Defender. Você pode encontrar as implementações para [ FreeRTOS\$1TCP](https://github.com/aws/amazon-freertos/blob/main/demos/device_defender_for_aws/metrics_collector/freertos_plus_tcp/metrics_collector.c) e [ lwIP](https://github.com/aws/amazon-freertos/blob/main/demos/device_defender_for_aws/metrics_collector/lwip/metrics_collector.c) no GitHub.

Para placas que usam uma outra pilha TCP/IP, fornecemos as definições de esboço das funções de coleta de métricas que retornam zeros para todas as métricas de rede. Implemente as funções em `freertos/demos/device_defender_for_aws/metrics_collector/stub/metrics_collector.c` na sua pilha de rede para a pilha de rede enviar métricas reais. O arquivo também está disponível no site do [GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/device_defender_for_aws/metrics_collector/stub/metrics_collector.c).

Para o ESP32, a configuração padrão do lwIP não usa bloqueio principal, sendo assim, a demonstração usa métricas esboçadas. Se desejar usar a implementação da coleção de métricas lwIP de referência, defina as seguintes macros em `lwiopts.h`:

```
#define LINK_SPEED_OF_YOUR_NETIF_IN_BPS 0
#define LWIP_TCPIP_CORE_LOCKING         1
#define LWIP_STATS                      1
#define MIB2_STATS                      1
```

Veja um exemplo de saída quando você executa a demonstração a seguir.

![\[Saída do log do console mostrando a conexão MQTT, a publicação e os eventos de uso de memória para o aplicativo DemoThing.\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/Defender_p4_supported.png)


Se sua placa não estiver usando FreeRTOS\$1TCP ou uma configuração lwIP compatível, a saída será semelhante à seguinte.

![\[Mensagens de log mostrando o estabelecimento da conexão MQTT, tentativas de inscrição em tópicos, publicação de carga útil e tratamento de pacotes para um aplicativo de demonstração.\]](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/Defender_p4_unsupported.png)


O código-fonte da demonstração está no seu download no diretório `freertos/demos/device_defender_for_aws/` ou no site do [GitHub](https://github.com/aws/amazon-freertos/tree/main/demos/device_defender_for_aws).

### Inscrição em tópicos do AWS IoT Device Defender
<a name="dd-demo-subscribing"></a>

A função [ subscribeToDefenderTopics](https://github.com/aws/amazon-freertos/blob/main/demos/device_defender_for_aws/defender_demo.c#L514-L530) assina os tópicos do MQTT nos quais as respostas aos relatórios publicados do Device Defender serão recebidas. Ela usa a macro `DEFENDER_API_JSON_ACCEPTED` para criar a sequência de tópicos na qual as respostas aos relatórios aceitos do Device Defender são recebidas. Ela usa a macro `DEFENDER_API_JSON_REJECTED` para criar a sequência de tópicos na qual as respostas aos relatórios rejeitados do Device Defender serão recebidas.

### Coleta de métricas de dispositivos
<a name="dd-demo-collecting-metrics"></a>

A função [ collectDeviceMetrics](https://github.com/aws/amazon-freertos/blob/main/demos/device_defender_for_aws/defender_demo.c#L376-L511) reúne métricas de rede usando as funções definidas em `metrics_collector.h`. As métricas coletadas são o número de bytes e pacotes enviados e recebidos, as portas TCP abertas, as portas UDP abertas e as conexões TCP estabelecidas.

### Geração de relatório do AWS IoT Device Defender
<a name="dd-demo-generating-report"></a>

A função [ generateDeviceMetricsReport](https://github.com/aws/amazon-freertos/blob/main/demos/device_defender_for_aws/defender_demo.c#L552-L581) gera um relatório de defesa do dispositivo usando a função definida em `report_builder.h`. Essa função pega as métricas de rede e um buffer, cria um documento JSON no formato esperado pelo AWS IoT Device Defender e o grava no buffer fornecido. O formato do documento JSON esperado pelo AWS IoT Device Defender é especificado nas [métricas do lado do dispositivo](https://docs.aws.amazon.com/iot/latest/developerguide/detect-device-side-metrics.html) no *Guia do desenvolvedor do AWS IoT*.

### Publicação do relatório do AWS IoT Device Defender
<a name="dd-demo-publishing-report"></a>

O relatório AWS IoT Device Defender é publicado no tópico MQTT para publicação de relatórios JSON do AWS IoT Device Defender. O relatório é criado usando a macro `DEFENDER_API_JSON_PUBLISH`, conforme mostrado neste [trecho de código](https://github.com/aws/amazon-freertos/blob/main/demos/device_defender_for_aws/defender_demo.c#L691-L695) no site do GitHub. 

### Retorno de chamada tratar respostas
<a name="dd-demo-callback-handling"></a>

A função [publishCallback](https://github.com/aws/amazon-freertos/blob/main/demos/device_defender_for_aws/defender_demo.c#L302-L373) trata as mensagens MQTT de publicação recebidas. Ela usa a API `Defender_MatchTopic` da biblioteca do AWS IoT Device Defender para verificar se a mensagem MQTT recebida é do serviço AWS IoT Device Defender. Se a mensagem for do serviço AWS IoT Device Defender, ela analisará a resposta JSON recebida e extrairá o ID do relatório na resposta. Em seguida, será verificado se o ID do relatório é o mesmo que foi enviado no relatório.