AWS IoT Device DefenderDemonstração do - FreeRTOS

AWS IoT Device DefenderDemonstração do

Importante

Essa demonstração está hospedada no repositório Amazon-FreeRTOS, que está preterido. Recomendamos começar aqui 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.

Introdução

Esta demonstração mostra como usar a biblioteca do AWS IoT Device Defender para se conectar ao AWS IoT Device Defender. 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.

Funcionalidade

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+TCP 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+TCP e lwIP 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.

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.

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.

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.

Inscrição em tópicos do AWS IoT Device Defender

A função subscribeToDefenderTopics 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 função collectDeviceMetrics 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 função generateDeviceMetricsReport 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 no Guia do desenvolvedor do AWS IoT.

Publicação do relatório do AWS IoT Device Defender

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 no site do GitHub.

Retorno de chamada tratar respostas

A função publishCallback 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.