

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 Defender demonstração
<a name="dd-demo"></a>

**Importante**  <a name="deprecation-message-demo"></a>
Essa demonstração está hospedada no Amazon-FreeRTOS repositório que está obsoleto. Recomendamos [começar aqui](freertos-getting-started-modular.md) ao criar um novo projeto. Se você já tem um projeto FreeRTOS existente com base no repositório agora Amazon-FreeRTOS obsoleto, consulte o. [Amazon-FreeRTOS Guia de migração do repositório Github](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 [AWS IoT Device Defender](https://docs.aws.amazon.com/iot/latest/developerguide/device-defender.html)a. A demonstração usa a biblioteca CoreMQTT para estabelecer uma conexão MQTT via TLS (autenticação mútua) com o AWS IoT MQTT Broker e a biblioteca CoreJSON para validar e analisar as respostas recebidas do serviço. AWS IoT Device Defender A demonstração mostra como criar um relatório em formato JSON usando métricas coletadas do dispositivo e como enviar o relatório construído para o AWS IoT Device Defender serviço. A demonstração também mostra como registrar uma função de retorno de chamada na biblioteca CoreMQTT para lidar com as respostas do AWS IoT Device Defender serviço e confirmar se um relatório enviado 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 única tarefa de aplicativo que demonstra como coletar métricas, criar um relatório do Device Defender no formato JSON e enviá-lo ao AWS IoT Device Defender serviço por meio de uma conexão MQTT segura com o MQTT Broker. 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 forma como coletamos métricas de rede depende da TCP/IP pilha em uso. Para FreeRTOS\+TCP e configurações LWIP compatíveis, fornecemos implementações de coleta de métricas que coletam métricas reais do dispositivo e as enviam no relatório. AWS IoT Device Defender [Você pode encontrar as implementações do [FreeRTOS\+TCP e do LWIP](https://github.com/aws/amazon-freertos/blob/main/demos/device_defender_for_aws/metrics_collector/freertos_plus_tcp/metrics_collector.c) em.](https://github.com/aws/amazon-freertos/blob/main/demos/device_defender_for_aws/metrics_collector/lwip/metrics_collector.c) GitHub

Para placas que usam qualquer outra TCP/IP pilha, fornecemos definições de esboços 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 [ GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/device_defender_for_aws/metrics_collector/stub/metrics_collector.c)site.

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 eventos de conexão, publicação e uso de memória do MQTT para o DemoThing aplicativo.](http://docs.aws.amazon.com/pt_br/freertos/latest/userguide/images/Defender_p4_supported.png)


Se sua placa não estiver usando FreeRTOS\+TCP 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á em seu download no `{{freertos}}/demos/device_defender_for_aws/` diretório ou no [GitHub](https://github.com/aws/amazon-freertos/tree/main/demos/device_defender_for_aws)site.

### Inscrevendo-se em AWS IoT Device Defender tópicos
<a name="dd-demo-subscribing"></a>

A ToDefenderTopics função de [assinatura assina](https://github.com/aws/amazon-freertos/blob/main/demos/device_defender_for_aws/defender_demo.c#L514-L530) os tópicos do MQTT sobre os 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 DeviceMetrics função [collect](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.

### Gerando o AWS IoT Device Defender relatório
<a name="dd-demo-generating-report"></a>

A DeviceMetricsReport função [generate](https://github.com/aws/amazon-freertos/blob/main/demos/device_defender_for_aws/defender_demo.c#L552-L581) gera um relatório do Device Defender 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 AWS IoT Device Defender e o grava no buffer fornecido. O formato do documento JSON esperado por AWS IoT Device Defender é especificado nas [Device-side métricas](https://docs.aws.amazon.com/iot/latest/developerguide/detect-device-side-metrics.html) no *Guia do AWS IoT desenvolvedor*.

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

O AWS IoT Device Defender relatório é publicado no tópico MQTT para publicação de relatórios JSON AWS IoT Device Defender . O relatório é construído 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 GitHub site. 

### 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. Ele usa a `Defender_MatchTopic` API da AWS IoT Device Defender biblioteca para verificar se a mensagem MQTT recebida é do AWS IoT Device Defender serviço. Se a mensagem for do AWS IoT Device Defender serviço, 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.