Gustavo Mainchein
Posted on March 19, 2024
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:
- 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.
- 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.
- 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:
- 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.
- 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:
Sobre a arquitetura acima, temos:
- 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.
- O IoT Core roteia os dados para o Kinesis Data Streams.
- O Kinesis Data Streams processa os dados em tempo real e os envia para o Kinesis Firehose.
- O 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:
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.
Posted on March 19, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.