AWS IoT Core - Integração
Tags: aws, iot, awsiot
Published: 2024-03-19 11:27:37

**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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t6hmq4vswu1fxl0jlpjn.png)

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. O **IoT Core** roteia os dados para o **Kinesis Data Streams**.
3. O **Kinesis Data Streams** processa os dados em tempo real e os envia para o **Kinesis Firehose**.
4. 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:

![Script Node.js](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v85bv1g61zbkc57xst7c.png)

**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.