Vamos falar sobre Smart Cities?


Acreditamos que a grande maioria do público do Microsoft Tech já esteja minimamente familiarizado com IoT. Quem nunca foi em uma apresentação Maker e viu um Dev criar um dispositivo que acendia leds coloridos por meio de comandos enviados pela internet?

Mas podemos ir além, podemos falar sobre casas automatizadas, aquelas que ficam conectadas ao seu celular, com o qual você consegue ligar o ar condicionado, mandar preparar um café e até mesmo receber notificações de que existe algum item em falta na sua geladeira para otimizar as suas compras.

Exemplos de IoT não faltam, mas o mais interessante é quando todos estes exemplos trabalham unidos de forma a transformar toda a infraestrutura de uma cidade e não apenas a vida dos cidadãos que tem maior poder aquisitivo para se divertir com estes dispositivos.

Dois pesos, uma medida

Criar uma solução de IoT pode ser algo banal ou pode ser algo complicado, depende muito da solução que você se propõe a fazer.

Por exemplo, se quisermos criar um dispositivo para nos informar a temperatura de um ambiente monitorado, iremos precisar de um sensor capaz de monitorar a temperatura do ambiente, um protocolo de envio de dados, uma placa de Arduino, uma placa de rede (caso sua placa de Arduino não tenha), uma placa de ensaio para montagem de circuitos elétricos, alguns jumpers e meia dúzia de linhas de código.

Depois de algumas configurações de protocolo, da programação do Arduino e de alguns conceitos de eletrônica aplicados, seu sensor estará monitorando a temperatura e enviando os dados por meio de uma rede wifi. Um tanto quanto simples e divertido, não?

Mas vamos ampliar um pouco essa escala. Imagine agora que queremos monitorar possíveis vazamentos na rede de abastecimento de água e na rede de esgotos. Antes mesmo de pensarmos em qualquer implementação de código, precisamos primeiro entender como ocorre a o fluxo de vazão normal das redes, saber aonde instalar os sensores, calibrar cada um para que não “confunda” um aumento de fluxo com um vazamento. Além disso, essas redes são compostas de quilômetros e quilômetros de encanamentos que normalmente são difíceis de serem alcançados. Precisamos também saber calcular quantos sensores são necessários e desenvolver uma rede de “self healing” que nos ajuda a identificar quando um determinado sensor parou de funcionar.

Depois de tudo isso calculado e instalado, o problema passa a ser simples. Será? No exemplo do controle de temperatura havíamos determinado um protocolo de informação de dados para um único dispositivo. No exemplo das redes de esgoto e abastecimento de água, temos milhares de sensores espalhados, que estão conectados um ao outro, enviando dados a todo o momento. Acredito que o protocolo tenha ficado um pouco mais complexo, pois precisamos criar níveis hierárquicos de relevância, de desastre e de recuperação. Não podemos trabalhar com uma fila única e simples de envio de dados do tipo FIFO.

Aonde está o “dois pesos, uma medida”? Bom, se você está acompanhando o raciocínio deve ter percebido que a solução é praticamente a mesma, o que tornou uma muito mais complexa que a outra foi a escalabilidade e alguns problemas logísticos, porém, ainda estamos trabalhando com sensores que enviam dados pela internet.

Escalabilidade

Uma forma simples de resolvermos o problema da escalabilidade é trabalharmos com computação em nuvem. Podemos criar uma arquitetura que facilite nosso gerenciamento. Para isso, o ideal é trabalharmos com uma arquitetura de multicamadas.

Uma arquitetura básica para esse tipo de solução pode trabalhar com três camadas. Os dados são capturados dos sensores, são enviados para o serviço de Edge (borda) e na sequência é enviado para o serviço de nuvem. Segue um exemplo na figura abaixo.

uma imagem da arquitetura IoT em 3 camadas. Dispositivo, na camda de baixo, borda na camada do meio e a nuvem na camada superior

Esta arquitetura poderia ser mais robusta com inclusão de camadas verticais que atravessam as camadas a fim de garantirmos gerenciamento de identidade e segurança.

Aqui a camada de dispositivo, basicamente captam os dados e os enviam para a próxima camada. Alguns sensores já possuem algum tipo de processamento e outros dispositivos podem enviar seus dados diretamente para a nuvem, depende da arquitetura que você julgue mais adequada.

A camada de borda, recebe os dados dos sensores e fica responsável pela análise e pré-processamento. Esta análise deve ser feita em “tempo real” por meio do processamento do fluxo de dados. Aqui normalmente ocorrem tarefas simples como filtragem, agregação e pré-processamento de dados.

Estes dados são então enviados a nuvem, já pré-processados, e então recebem um processamento adicional, armazenamento e servem como insumos para o dispositivo do usuário, como um dashboard, por exemplo.

Na nuvem também é possível aplicarmos algoritmos preditivos de machine learning como regressão linear, por exemplo, a fim de prevermos o entupimento de um encanamento antes que ela aconteça.

Boas práticas

Como estamos falando de IoT para Smart Cities, é extremamente interessante que, ao pensarmos em arquitetura, trabalhemos com segurança por design. Isso quer dizer que a segurança precisa estar em todas as camadas da nossa arquitetura, de forma vertical. Lembrando que ao iniciarmos qualquer projeto de desenvolvimento, vale darmos uma olhada no OWASP.org.

Outro fator relevante é pensarmos na interoperabilidade e na automatização das soluções. É extremamente necessário que nossa solução de IoT seja automatizada e orquestrada em todas as camadas. As opções são bem variadas para isso, a implementação de microsserviços com contêineres orquestrados por Kubernetes na camada de borda ou na nuvem é um bom exemplo.

A interoperabilidade é necessária para que nossa arquitetura não fique dependente de um fornecedor ou tecnologia. Uma maneira curiosa de obtermos a interoperabilidade é a busca por padrões. Por mais paradoxal que possa parecer, padrões oferecem flexibilidade e facilidade para trocarmos dispositivos, desde que estejam dentro do padrão.

Por último, uma ideia interessante é termos arquiteturas de referência para ajustarmos a nossa solução. Aqui segue uma referência de arquitetura de IoT do Microsoft Azure. Também temos algumas referências utilizando o IoT Hub.

Para terminarmos, vimos que soluções IoT, embora tenham um resumo simplório (sensor, envio de dados, tratamento), não são banais de serem implementadas e dependem muito da arquitetura mais adequada ao seu problema. 


Autor: Microsoft Tech