O blog da AWS

Usando AWS IoT Core e Amazon OpenSearch Service para monitorar transformadores de distribuição de energia

Por Jairo da Silva Junior, Arquiteto de Soluções, AWS Brasil Setor Público,

e Douglas Ramiro, Arquiteto de Soluções, AWS Brasil Setor Público,

e Vinicius Silva, Arquiteto de Soluções, AWS Brasil Setor Público.

 

Clientes do segmento de energia e serviços públicos têm buscado formas de ingerir grandes quantidades de dados de sensores de forma segura e escalável para realizar análise de dados em tempo real, detectar anomalias, treinar modelos de Machine Learning (ML) para predição de falhas e extrair insights destes dados.

A utilização de sensores nesse segmento é uma tendência que temos observado em interações constantes com nossos clientes que buscam soluções de Smart Grids e Smart Meter Data Analytics (MDA). Como mostra uma pesquisa realizada em 2018 pelo IDC,  o crescimento de dispositivos conectados no setor de energia e serviços públicos aumentará enormemente a coleta e a análise de dados operacionais e de clientes. O estudo mostrava também que a indústria investiria US$ 73 bilhões em soluções de Internet das Coisas (IoT) em 2018, de acordo com o IDC’s Worldwide Semiannual Internet of Things Spending Guide.

Dessa forma, com o crescimento contínuo dos gastos com IoT, os serviços baseados em nuvem oferecem às empresas de energia e serviços públicos maior flexibilidade quando a largura de banda do armazenamento de dados excede a capacidade local. Além disso, a nuvem oferece a capacidade de aumentar ou diminuir rapidamente essa largura de banda, conforme necessário, permitindo que as empresas se ajustem a eventos como o ritmo de implementações de medidores inteligentes ou o tempo de implantação de sensores em ativos em campo. Os recursos de nuvem também ajudam a gerenciar o aumento da coleta e utilização de dados, fornecendo segurança, escala e agilidade ao mesmo tempo em que gerencia com economia.

 

Boas práticas para workloads de IoT na AWS

Quando projetamos arquitetura para a Nuvem, o AWS Well-Architected Framework nos ajuda a entender os prós e contras das nossas decisões, e ao utilizá-lo podemos aprender melhores práticas de arquitetura para o projeto e operação de sistemas confiáveis, seguros, eficientes e com otimização de custos.

Existem abordagens do Well-Architected Framework para casos de uso específicos, como IoT (Internet das Coisas), onde o foco são cargas de trabalho de IoT, desde a aquisição de dispositivos conectados (coisas), até o eventual descomissionamento destes dispositivos de forma segura, confiável e automatizada. A AWS provê múltiplos serviços que permitem projetar arquiteturas robustas para cargas de trabalho em IoT.

Aplicações de IoT são compostas de vários dispositivos (ou coisas) que se conectam de forma segura e interagem com componentes na borda da nuvem, ou dentro da própria nuvem para entregar valor de negócio. Estas aplicações coletam, processam, analisam e agem nos dados gerados por dispositivos conectados. Existem sete camadas lógicas a serem consideradas ao construir cargas de trabalho IoT na perspectiva do Well-Architected Framework:

  1. Projeto e manufatura: Após identificar os requisitos de negócio, o ponto de partida de um projeto de IoT é engajar fabricantes capazes de construir os sensores necessários. As decisões tomadas nesta etapa irão impactar as camadas a seguir.
  2. Borda: Esta camada consiste dos dispositivos físicos, responsáveis por coletar métricas e agir nos dispositivos aos quais estão vinculadas. A partir do momento que sabemos que é possível construir estes dispositivos, podemos iniciar a implementação imediatamente utilizando o AWS IoT Device Simulator ou através do “Get Started” do IoT Core e utilizando o script de exemplo disponibilizado nesse projeto.
  3. Provisionamento: A camada de provisionamento de suas cargas de trabalho IoT consiste na infraestrutura de chave pública (PKI) usada para criar identidades únicas do dispositivo e o fluxo de trabalho do aplicativo que fornece dados de configuração para o dispositivo. A camada de provisionamento também está envolvida com a manutenção contínua e eventual descomissionamento de dispositivos ao longo do tempo.
  4. Comunicação: A camada de comunicação lida com a conectividade, roteamento de mensagens entre dispositivos remotos e roteamento entre dispositivos e a nuvem. A camada de comunicação permite estabelecer como as mensagens IoT são enviadas e recebidas pelos dispositivos, e como os dispositivos representam e armazenam seu estado físico na nuvem.
  5. Ingestão: Um impulsionador de negócios chave para IoT é a capacidade de agregar todos os fluxos de dados criados por seus dispositivos e transmitir os dados para seu aplicativo IoT de maneira segura e confiável. A camada de ingestão desempenha um papel fundamental na coleta de dados do dispositivo, enquanto desacopla o fluxo de dados com a comunicação entre dispositivos.
  6. Análise de Dados: Um dos benefícios da implementação de soluções de IoT é a capacidade de obter insights profundos e dados sobre o que está acontecendo no ambiente local e na borda. Uma forma primária de perceber insights contextuais é através da implementação de soluções que podem processar e realizar análises em dados de IoT.
  7. Aplicação: AWS IoT fornece várias maneiras de facilitar como os aplicativos nativos da nuvem consomem dados gerados por dispositivos IoT. Esses recursos conectados incluem recursos de computação sem servidor, bancos de dados relacionais para criar visualizações materializadas de seus dados de IoT e aplicativos de gerenciamento para operar, inspecionar, proteger e gerenciar suas operações de IoT.

Arquitetura de Referência

Neste blog vamos simular um cenário onde sensores estão instalados em transformadores de distribuição de energia para coletar métricas como temperatura e umidade do ambiente, nível de óleo, dispersão de gases, umidade interna e emissão de ruído. Estes dados irão auxiliar na manutenção destes dispositivos, e a arquitetura utilizada pode ser aplicada a outros cenários de monitoramento e manutenção preditiva, como distribuição de água, gás ou qualquer tipo de dados de sensores coletados para uma análise próxima de tempo real (near real-time).

Para atingir esse objetivo a Figura 1.1 descreve uma arquitetura de referência seguindo o seguinte fluxo:

  1. Um sensor IoT conectado na internet, através do uso do protocolo MQTT, publica uma mensagem em um tópico disponibilizado pelo IoT Core.
  2. Uma regra definida pelo IoT Core monitora o tópico aguardando por novas mensagens. Assim que uma mensagem é recebida, essa regra envia os dados recebidos para o Amazon Kinesis Data Firehose.
  3. Amazon Kinesis Data Firehose é responsável por:
    1. Armazenamento dos dados originais (raw) recebidos em um bucket do Amazon S3.
    2. Enriquecimento dos dados utilizando uma função AWS Lambda que busca informações dos geradores cadastrados previamente no Amazon DynamoDB, como data de instalação e geolocalização.
    3. Envio dos dados para o serviço de indexação Amazon OpenSearch Service para que possam ser visualizados no Kibana.
  4. Para visualizar os dados no Kibana disponibilizado pelo serviço do Amazon OpenSearch Service, é necessário realizar autenticação através do Amazon Cognito para prevenir acesso não autorizado aos dados. Além de disponibilizar o Kibana, o Amazon OpenSearch Service também pode ser configurado para solicitar o envio de um email em caso de um dado com anomalia, utilizando para isso, o serviço Amazon Simple Notification Service.

Figura 1.1 Ingerindo dados de transformadores para análise na AWS

 

Em nossa demonstração utilizamos o IoT Device Simulator para gerar dados de telemetria de 13 transformadores, e a partir do momento que os dados são recebidos no IoT Topic, uma ação é executada para enviar estes registros para o Amazon Kinesis Data Firehose.

No Kibana, nós temos dois dashboards:

O primeiro é chamado de visão geral. Ele mostra um mapa de um bairro de São Paulo onde os transformadores são exibidos como pontos e suas cores representam o risco de falha, um campo calculado que define uma pontuação com base em valores de outros atributos. Neste dashboard também podemos ter uma visão geral da quantidade de dispositivos conectados naquele território, e o agrupamento destes pelo nível de ruído, distribuído em três faixas de risco: verde, amarelo e vermelho.

Dashboard de visão geral

 

O segundo dashboard exibe detalhes dos transformadores, onde podemos analisar um ou mais destes dispositivos, e ter uma visão geral do seu estado em uma janela de tempo.

Dashboard de visão detalhada

 

Implantação da solução

A implantação dessa demonstração pode ser feita através do AWS Cloud Development Kit (CDK). O AWS Cloud Development Kit (AWS CDK) é um framework de desenvolvimento de software de código aberto para definir recursos de aplicações em nuvem usando linguagens de programação conhecidas como por exemplo Java, Python e NodeJS.

São necessários os seguintes pré-requisitos para implantar a demonstração:

  • Ter uma conta na AWS.
  • Python 3
  • Gerenciador de pacotes pip.
  • Shell Bash
  • CDK CLI

Para implantar a infraestrutura acima utilizando o AWS Cloud Development Kit (CDK), execute os seguintes comandos no Bash:

$ git clone https://github.com/aws-samples/power-transformers-iot-kinesis-elasticsearch
$ cd power-transformers-iot-kinesis-elasticsearch/
$ chmod +x run.sh; USER_EMAIL=<seu email> ./run.sh

Simulando os dados de transformadores

Para simular dispositivos IoT, a AWS disponibiliza um simulador como solução. Esse simulador habilita a possibilidade de realizações de testes de integração através de uma aplicação web que pode ser implantada em uma conta da AWS de forma segura e escalável. Utilize o link abaixo para fazer a implantação do simulador:

https://aws.amazon.com/solutions/implementations/iot-device-simulator/

Geração de dados no Device Simulator

Siga os seguintes passos para simular o envio de dados de transformadores no Device Simulator:

  1. Ao se autenticar no Device Simulator, clique no menu superior Device Types.
  2. Clique no botão Add Device Type.
  3. Preencha o valor transformador no campo Device type name
  4. Preencha o valor pt/telemetry no campo Topic.
  5. Clique no botão Add attribute, preencha com os seguintes dados e clique no botão Save: 
    1. Attribute name: oilTemperature
    2. Attribute data type:  Integer
    3. Minimum Value: 20
    4. Maximum Value: 110
  6. Clique no botão Add attribute, preencha com os seguintes dados e clique no botão Save: 
    1. Attribute name: oilLevel
    2. Attribute data type:  Integer
    3. Minimum Value: 0
    4. Maximum Value: 100
  7. Clique no botão Add attribute, preencha com os seguintes dados e clique no botão Save: 
    1. Attribute name: temperature
    2. Attribute data type:  Integer
    3. Minimum Value: 0
    4. Maximum Value: 50
  8. Clique no botão Add attribute, preencha com os seguintes dados e clique no botão Save: 
    1. Attribute name: humidity
    2. Attribute data type:  Integer
    3. Minimum Value: 5
    4. Maximum Value: 99
  9. Clique no botão Add attribute, preencha com os seguintes dados e clique no botão Save: 
    1. Attribute name: noiseLevel
    2. Attribute data type:  Integer
    3. Minimum Value: 40
    4. Maximum Value: 105
  10. Clique no botão Add attribute, preencha com os seguintes dados e clique no botão Save: 
    1. Attribute name: gasEmissionLevel
    2. Attribute data type:  Integer
    3. Minimum Value: 1
    4. Maximum Value: 16
  11. Clique no botão Add attribute, preencha com os seguintes dados e clique no botão Save: 
    1. Attribute name: moistureLevel
    2. Attribute data type:  Integer
    3. Minimum Value: 1
    4. Maximum Value: 7
  12. Clique no botão Add attribute, preencha com os seguintes dados e clique no botão Save: 
    1. Attribute name: timestamp
    2. Attribute data type:  UTC timestamp
    3. Timestamp Format: Default
  13. Clique no botão Add attribute, preencha com os seguintes dados e clique no botão Save: 
    1. Attribute name: id
    2. Attribute data type:  Pick one from array
    3. Array: PEQUETITA,SHOPPINGJK,ROCIO,EATALY,SHOPPINGVILAOLIMPIA,FERREIRALOBO,ESTANPLAZAFUNCHAL,FUNCHAL10,ESTACAOVILAOLIMPIA,TEATROSANTANDER,NACOESUNIDAS05,FARIALIMA28,FARIALIMA14,FARIALIMA100,FARIALIMA42
  14. Clique no botão Save para criar o tipo transformador. A sua tela deverá estar parecida com a imagem abaixo:

    Device Simulator – Criando um dispositivo
  15. Após a criação de um dispositivo, agora é possível criar uma nova simulação. Para isso, clique no menu superior Simulations.
  16. Preencha os campos com os seguintes dados:
    1. Simulation name: TransformadoresSP
    2. Simulation type: User created
    3. Select a device type: transformador
    4. Number of devices: 20
    5. Data transmission interval: 5
    6. Data transmission duration: 20
  17. Clique no botão Save para salvar a simulação. A sua tela deverá estar parecida com a imagem abaixo:
  18. Para iniciar uma simulação, selecione a simulação TransformadoresSP na tabela e clique no botão Start Simulation(s).

 

Acesse o Kibana para verificar os gráficos após a finalização da simulação.

 

Conclusão e próximos passos

AWS Well-Architected Framework fornece práticas recomendadas de arquitetura em todos os pilares para projetar e operar sistemas confiáveis, seguros, eficientes e econômicos na nuvem para aplicativos IoT. O Framework fornece um conjunto de perguntas que você pode usar para revisar uma arquitetura IoT existente ou proposta e também um conjunto de práticas recomendadas da AWS para cada pilar. Usar a estrutura em sua arquitetura ajuda a produzir sistemas estáveis e eficientes, o que permite que você se concentre em seus requisitos funcionais.

Neste blog post apresentamos uma arquitetura para processamento de dados de sensores que estão instalados em transformadores de distribuição de energia para coletar métricas como temperatura e umidade do ambiente, nível de óleo, dispersão de gases, umidade interna e emissão de ruído.

Como próximos passos de evolução da arquitetura proposta podemos fazer integração com outros serviços AWS de AI/ML como o Amazon SageMaker para realização de manutenção preditiva, por exemplo.

 

Referências

https://github.com/aws-samples/power-transformers-iot-kinesis-elasticsearch

 

 


Sobre os autores

Jairo Silva Junior é Arquiteto de Soluções na AWS no time de Public Sector com foco em Governo. Anteriormente atuou em diversos papéis no ciclo de entrega de software, como desenvolvimento, arquitetura e operação, em diversos tipos de empresas. Possui Mestrado em Ciência da Computação e é apaixonado por viagens e comida.

 

 

 

 

Douglas Ramiro é arquiteto de soluções com especialização em Spot e Graviton na AWS. Todos os dias, os clientes da AWS economizam ao adotar essas tecnologias. Douglas tem a missão de disseminar essas tecnologias em LATAM para que os clientes AWS possam reduzir seus custos.

 

 

 

 

Vinicius Silva é arquiteto de Soluções na AWS e apoia clientes do setor público com foco na indústria de energia e serviços básicos. Formado em Ciências da Computação pela Universidade de São Paulo (USP), possui interesse em modernização e desenvolvimento de aplicações, containers e na cultura DevOps.