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
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 na sua pilha de rede para a pilha de rede enviar métricas reais. O arquivo também está disponível no site do GitHubfreertos/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.
Se sua placa não estiver usando FreeRTOS+TCP ou uma configuração lwIP compatível, a saída será semelhante à seguinte.
O código-fonte da demonstração está no seu download no diretório ou no site do GitHubfreertos/demos/device_defender_for_aws/
Inscrição em tópicos do AWS IoT Device Defender
A função subscribeToDefenderTopicsDEFENDER_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 collectDeviceMetricsmetrics_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 generateDeviceMetricsReportreport_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
Retorno de chamada tratar respostas
A função publishCallbackDefender_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.