AWS IoT Core - Integração

gugamainchein

Gustavo Mainchein

Posted on March 19, 2024

AWS IoT Core - Integração

Introdução

Neste guia, exploraremos a integração de dispositivos com o serviço AWS IoT Core utilizando Node.js como uma "thing” que irá enviar dados e também uma stack de data stream para processá-los, com Kinesis (Data Stream e Firehose) + S3. Pensando nesse cenário, começaremos a abordar e entender o serviço de IoT Core da AWS.

A sigla IoT significa Internet das Coisas (em inglês, Internet of Things) e se refere à rede de objetos físicos que são conectados à internet e podem coletar / trocar dados. Essa conexão permite que os objetos sejam monitorados e controlados remotamente, abrindo um mundo de possibilidades para diversas áreas.

Como funciona o IoT?

O funcionamento da IoT pode ser dividido em quatro etapas principais:

1. Coleta de dados: Sensores (equipamentos como Arduíno, MTJ e outros) presentes nos objetos físicos coletam dados sobre o ambiente em que estão inseridos. Esses dados podem ser, como por exemplo, temperatura, umidade, localização, movimento, entre outros.

2. Transmissão de dados: Os dados coletados são então transmitidos para a nuvem através de uma conexão Wi-Fi, Bluetooth, celular ou via satélite. Geralmente, é muito comum encontrarmos transmissão via Wi-Fi e/ou Bluetooth.

3. Armazenamento de dados: Na nuvem, os dados são processados, por recursos exclusivos que conseguem entender as conexões que utiliza, como MQTT e HTTPS, e armazenados em storages, de forma particinada, para uma análise / tomada de ação futura.

4. Análise e uso dos dados: Os dados armazenados são analisados e podem ser utilizados para diversas finalidades.

O que é o AWS IoT Core?

O AWS IoT Core é um serviço integralmente gerenciado pela AWS, criado para simplificar e fortalecer as operações relacionadas à Internet das Coisas (IoT) em escala massiva. Sua utilização está fundamentada em 3 principais pilares:

  1. Conectividade Avançada: O AWS IoT Core é projetado para suportar múltiplos protocolos de comunicação, incluindo MQTT (Message Queuing Telemetry Transport), HTTP (Hypertext Transfer Protocol) e WebSockets. Essa capacidade é crucial para garantir a interoperabilidade e a flexibilidade necessárias em ambientes IoT complexos e heterogêneos.
  2. Gerenciamento Abrangente: O serviço oferece ferramentas e funcionalidades para simplificar e automatizar o gerenciamento de dispositivos IoT em larga escala. Além disso, o AWS IoT Core oferece recursos avançados de monitoramento e diagnóstico, permitindo que os operadores identifiquem e resolvam problemas de forma proativa, minimizando interrupções no fluxo de dados e maximizando a eficiência operacional.
  3. Segurança Robusta: Em um cenário onde a segurança dos dispositivos IoT e dos dados transmitidos é uma preocupação constante, o AWS IoT Core oferece um conjunto abrangente de recursos para proteger a integridade e a confidencialidade das operações IoT. Isso inclui mecanismos avançados de autenticação e autorização, garantindo que apenas dispositivos autorizados tenham acesso aos recursos da nuvem IoT. Além disso, o serviço utiliza técnicas de criptografia para proteger a comunicação entre dispositivos e a nuvem.

Casos de Uso do AWS IoT Core

O AWS IoT Core pode ser utilizado em diversos casos de uso, como:

  • Monitoramento ambiental: Coleta de dados de sensores para monitorar temperatura, umidade, qualidade do ar etc.
  • Automação residencial: Controle de dispositivos domésticos inteligentes, como lâmpadas, termostatos e eletrodomésticos.
  • Rastreamento de ativos: Monitoramento da localização e do status de ativos em tempo real.
  • Manutenção preditiva: Análise de dados de sensores para prever falhas de equipamentos e realizar manutenções preventivas.

Integração de Dispositivos com Node.js

O Node.js é uma plataforma ideal para desenvolver aplicações de IoT devido à sua natureza leve, escalável e assíncrona. A integração de dispositivos com o AWS IoT Core utilizando Node.js pode ser realizada através do seguinte processo:

a. Instalar as bibliotecas necessárias:

  • mqtt: Biblioteca para comunicação com o protocolo MQTT.
  • fs: Biblioteca para interpretação dos arquivos de certificados que a aplicação irá utilizar para realizar a comunicação com as things do IoT Core.

b. Criar um cliente Node.js:

O cliente Node.js é responsável por se conectar ao AWS IoT Core, publicar e receber mensagens. Trata-se de uma aplicação Node.js que irá embarcada nos “sensores”, que são os equipamentos que coletam dados, como por exemplo um Arduíno, MTJ e/ou outros.

c. Configurar o cliente com os dados de conexão do IoT Core:

  • Endpoint do broker MQTT: Endereço do broker MQTT do AWS IoT Core, localizado na aba de "Connect” > "Connect one device” do serviço.
  • Credenciais do dispositivo: Chave privada e certificado do dispositivo, geradas no momento da criação de um certificado ou de uma thing.
  • Tópico MQTT: Tópico utilizado para comunicação entre o dispositivo e o AWS IoT Core, configurado na aba de "Message routing” > "Rules”.

d. Conectar o cliente ao AWS IoT Core:

O cliente Node.js se conecta ao broker MQTT utilizando as credenciais do dispositivo, publicar mensagens no tópico MQTT configurado e receber mensagens de outros dispositivos que estão inscritos no mesmo tópico MQTT.

Protocolos Envolvidos na Integração

Para uma integração de dispositivos com o AWS IoT Core usando Node.js, é essencial entender os principais protocolos envolvidos. Aqui estão alguns deles:

  1. MQTT (Message Queuing Telemetry Transport): O MQTT é um protocolo leve e altamente eficiente projetado para facilitar a comunicação em tempo real entre dispositivos IoT e a nuvem. Ele é particularmente adequado para ambientes onde largura de banda e recursos computacionais são limitados, pois minimiza a sobrecarga de rede e oferece uma troca de mensagens assíncrona e confiável.
  2. HTTPS (Hypertext Transfer Protocol Secure): O HTTPS é um protocolo amplamente utilizado para comunicação segura entre clientes web e servidores. No contexto da integração de dispositivos com o AWS IoT Core usando Node.js, o HTTPS é empregado como uma camada adicional de segurança para proteger a comunicação entre o cliente Node.js e a plataforma AWS IoT Core. Ao utilizar HTTPS, todas as comunicações são criptografadas, garantindo a confidencialidade e a integridade dos dados transmitidos. Isso é especialmente importante em cenários onde a segurança é uma prioridade, como na transmissão de dados sensíveis ou na execução de operações críticas.

Arquitetura Envolvida na Integração

Pensando nos tópicos documentados acima, temos a seguinte arquitetura que é muito comum de ser utilizada quando nos tratamos de um projeto que envolva IoT, pois é capaz de processar uma massa gigantesca de dados do seu dispositivo:

Arquitetura AWS

Sobre a arquitetura acima, temos:

  1. Os dispositivos IoT (Arduíno rodando uma aplicação Node.js) enviam dados para o IoT Core usando o protocolo MQTT, que é leve e altamente eficiente quando precisamos enviar grande quantidade de dados.
  2. IoT Core roteia os dados para o Kinesis Data Streams.
  3. Kinesis Data Streams processa os dados em tempo real e os envia para o Kinesis Firehose.
  4. Kinesis Firehose transforma os dados e os armazena no S3, de forma particionada entre /ano/mes/dia/hora.

Script para Envio de Dados ao IoT Core

Pensando no script para conexão MQTT e envio de dados ao IoT Core da AWS, temos:

Script Node.js

1. Importação de Bibliotecas:

  • mqtt: Utilizada para comunicação com o protocolo MQTT, padrão na comunicação com a Internet das Coisas (IoT).
  • fs: Fornece funções para interagir com o sistema de arquivos, permitindo a leitura de arquivos de configuração e certificados.
  • dotenv: Permite carregar variáveis de ambiente a partir de um arquivo .env, facilitando a configuração sem a necessidade de expor dados sensíveis no código.

2. Configuração de Variáveis:

  • iotMqttEndpoint: URL do endpoint MQTT do serviço AWS IoT Core, composto pelo endpoint da região, porta e protocolo seguro (mqtts).
  • iotKeyFile, iotCertFile, iotCaFile: Caminhos para os arquivos de chave privada, certificado e CA (Autoridade Certificadora) necessários para autenticação no AWS IoT Core.
  • iotTopic: Nome do tópico MQTT para troca de mensagens.
  • message: Mensagem a ser publicada no tópico MQTT, contendo o tipo da mensagem ("String") e os dados ("Send message with successfully!"), junto com um timestamp.

3. Conexão ao AWS IoT Core:

  • Cria um cliente MQTT usando a biblioteca mqtt e a URL do endpoint configurado.
  • Fornece as credenciais (chave, certificado e CA) para autenticação.
  • Especifica o protocolo MQTT e a versão 5.

4. Eventos do Cliente:

  • connect: Ao conectar-se com sucesso, o cliente se inscreve no tópico MQTT. Em caso de falha na inscrição, um erro é registrado.
  • subscribe: Ao inscrever-se no tópico com sucesso, uma mensagem é publicada nesse tópico.
  • message: Ao receber uma mensagem no tópico, o conteúdo da mensagem é exibido no console.
  • error: Se ocorrer algum erro durante a comunicação com o AWS IoT Core, o erro é registrado no console.

O script estabelece uma conexão segura com o AWS IoT Core utilizando o protocolo MQTT. Ele se inscreve em um tópico específico e publica uma mensagem nesse tópico. Também é capaz de receber mensagens publicadas por outros dispositivos ou aplicações no mesmo tópico. Esse tipo de script é comum na comunicação com dispositivos IoT e na interação com serviços de nuvem relacionados à Internet das Coisas.

Acesse o respositório do link ao lado, baixe e crie o seu: https://github.com/gugamainchein/aws-iot-core-publish-messages

Considerações Finais

Neste guia, exploramos a integração de dispositivos com o serviço AWS IoT Core utilizando Node.js. Abordamos os principais tópicos, como:

  • O que é IoT e como funciona;
  • O que é o AWS IoT Core e seus casos de uso;
  • Como integrar dispositivos com Node.js;
  • Os protocolos envolvidos (MQTT e HTTPS);
  • Arquitetura para processamento de dados (Kinesis, Firehose e S3);
  • Script para envio de dados ao IoT Core.

Fornecemos um resumo detalhado do funcionamento, dos componentes e da comunicação entre eles na arquitetura proposta. Também destacamos as vantagens e aplicações da integração com o AWS IoT Core.

Para aprofundar seus conhecimentos, acesse o repositório com o script completo: https://github.com/gugamainchein/aws-iot-core-publish-messages.

Este guia serve como base sólida para iniciar o desenvolvimento de suas aplicações de IoT utilizando Node.js e o AWS IoT Core.

💖 💪 🙅 🚩
gugamainchein
Gustavo Mainchein

Posted on March 19, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related