Nos tempos atuais, a internet, essa a grande rede mundial de computadores, faz parte da nossa rotina o tempo todo. Quase como a energia elétrica, é difícil imaginar um mundo sem a conexão global que nos acompanha 24h.
A internet, deriva da ARPANET, que foi criada com o intuito de conectar centros de pesquisa norte-americanos, e que em pouco tempo passou a integrar órgãos do governo dos EUA e sua inteligência militar. A expansão da mesma, deu origem à grande rede que nos conecta em qualquer parte do globo.
Com sua expansão, surgiram os primeiros navegadores, serviços de email, redes sociais, e com a chegada dos smartphones, aplicativos. Todos estes softwares, mesmo tendo finalidades diferentes, compartilham uma função: a utilização da internet para conectar pessoas através de computadores.
A internet das coisas
A internet das coisas, ou IoT sigla em inglês para Internet of Things, surge para utilizar esta conexão pré-existente para conectar coisas, fazer a troca de dados e tomada de decisão sem necessariamente depender da interferência humana.
E como é feito?
Através de sensores embutidos em objetos do dia-a-dia, coletamos dados necessários para criar essa rede de troca de informações. E quando digo coisas, quero dizer qualquer coisa; Geladeiras, ar-condicionado, lâmpadas, relógios, óculos, cortinas, pontos de venda em supermercados, irrigadores de jardim, balanças, termômetros, plantações…uma vasta extensão de possibilidades, residencial, comercial, ou industrial.
Três partes essenciais da Internet das Coisas:
- As coisas, que é onde temos os sensores dos quais coletamos os dados;
- A nuvem, que é onde recebemos, processamos e armazenamos esses dados;
- A Inteligência, que é a utilização destes dados para otimizar processos, resolver problemas, ou obter vantagem à partir do conhecimento coletado.
Arquitetura da internet das coisas e protocolos de comunicação
Agora vamos aprofundar um pouco na arquitetura da internet das coisas, quais seus componentes, ferramentas e protocolos que fazem parte da tecnologia.
Para isto, quero utilizar um exemplo prático para entendermos os passos para a criação da solução desde a identificação do problema, passando por prototipação e criação final.
1. Identificando o problema
O primeiro passo para a aplicação de IoT, é identificar o problema a ser resolvido, e à partir desta identificação, devemos pensar em como coletar dados que ajudem na tomada de decisão para sua resolução, como iremos trafegar e armazenar os dados coletados, como trabalhar para transformar este dado em informação, e fazer a tomada de decisão.
Neste exemplo, o nosso problema será fazer o controle da temperatura de um ar-condicionado de acordo com a temperatura ambiente.
Para este problema já existem soluções que você pode comprar facilmente. Vamos apenas trabalhar com sua hipótese.
2. Exemplos de plataformas
Existem diversos tipos de plataformas que podem ser utilizadas para a coleta dos dados pois possuem conectividade com diversos tipos de sensores. Abaixo exemplos de algumas delas.
- Arduino – É uma Plataforma de prototipagem que possui um microcontrolador onde podemos conectar os sensores. Desenvolvimento feito em C/C++.
- MCU – É um microcontrolador embarcado que possui chip único, de sistema operacional real time. Muito utilizado em soluções para uso médico ou militar, pois atua em sistemas de alta confiabilidade, de missão crítica.
- Raspberry Pi – É uma versão pocket do computador como conhecemos. Possui processador, memória, entradas e saídas, e possui grande capacidade para executar software. Pode executar sistemas operacionais convencionais, o que facilita a execução em diversas linguagens de programação.
- Smartphones – Sim, muitas vezes não percebemos, mas temos em nossas mãos a todo momento uma grande ferramenta para fazer a coleta de dados. Nossos telefones atualmente são mais poderosos que muitos computadores, com sensores para vários tipos de atividades, como GPS, giroscópio, sensor de luminosidade, temperatura ambiente, acelerômetro entre outros.
3. O protocolo de comunicação
Voltando ao nosso exemplo do ar-condicionado inteligente, primeiro precisamos identificar o que será utilizado para fazer a coleta dos dados. Pode ser desenvolvida uma solução utilizando qualquer um dos dispositivos apresentados acima para a coleta de dados.
Dado este cenário, é importante estabelecer um protocolo padrão de comunicação, para o envio e recebimento destes dados.
No início dos anos 90, a IBM criou o protocolo MQTT (Message Queue Telemetry Transport) que é um protocolo M2M (machine to machine) com foco específico para IoT. MQTT é um protocolo cliente servidor, onde o cliente pode tanto se inscrever no servidor para receber informações de determinado assunto que o interesse, quanto postar informações para que o servidor notifique aos inscritos naquele assunto específico. Ele é baseado no paradigma Publish-subscribe.
O Paradigma Publish-subscribe
Para efeito de comparação e entendimento sobre o paradigma Publish-subscribe, vamos compará-lo a um velho conhecido nosso: O paradigma Request-response, representado pelo protocolo HTTP.
Em Request-response, a comunicação se dá de forma síncrona, onde o cliente envia ao servidor uma requisição, e fica aguardando sua resposta. A conexão entre os dois é feita de forma temporária, apenas durante o período da troca de mensagens.
Já no paradigma Publish-subscribe a comunicação se dá de forma assíncrona, onde as mensagens são recebidas e distribuídas aos respectivos destinatários através de um broker. O broker é um moderador que recebe as mensagens, e as entrega à todos que estão inscritos para recebê-la.
O MQTT
O protocolo MQTT, apesar de trazer a palavra queue no nome, não trabalha com um sistema de filas, e sim com um sistema de tópicos. Os tópicos são estruturas hierarquicamente criadas para tratar determinado assunto. Os clientes têm liberdade de efetuar a criação de um novo tópico, publicar mensagens em um tópico, e de se subscrever em um tópico.
Para efetuar a transmissão de dados, o MQTT faz a utilização de outro protocolo, o TCP.
A mensagem MQTT segue um padrão, onde existe um header com uma quantidade específica de bytes que pode variar entre 2 e 5. Apenas o primeiro destes bytes é obrigatório.
Dentro dele, as informações são divididas da seguinte forma: os 4 primeiros bits referem-se ao tipo de mensagem. o 5º bit refere-se ao indicador de mensagem duplicada, os dois bits seguintes para identificar o QoS (quality of service) do pacote, e o último bit indica se a mensagem deve ser retida ou não, para que ao entrar um novo subscriber, ele receba a última mensagem publicada no tópico. Os próximos 4 bytes irão definir o tamanho do restante do pacote, variando de 0 a 268 335 455 bits.
Veja abaixo representação gráfica dos da mensagem MQTT:
A tabela abaixo, mostra os tipos de mensagem MQTT. As mensagens mais utilizadas são as de Conexão/desconexão, inscrição/desinscrição e publicação.
QoS
O QoS, ou Quality of Service é dividido em 3 categorias, e devem ser informados no header de cada mensagem.
São eles:
- QoS 0 – No máximo uma vez
Conhecido como fire and forget (atirar e esquecer), nesse QoS a mensagem é enviada apenas uma vez e não haverá passos seguintes, dessa forma a mensagem não será armazenada, nem haverá um feedback para saber se ela chegou ao destinatário.
Esse modo de transferência é o mais rápido, porém o menos seguro já que a mensagem será perdida caso o envio falhe ou o cliente esteja desconectado.
- QoS 1 – Pelo menos uma vez
Nesse modo de transferência, a mensagem é entregue pelo menos uma vez, havendo uma espera da recepção de feedback da entrega da mensagem, o chamado Puback. Não recebendo o Puback, a mensagem continuará sendo enviado até que haja o feedback.
Nesse QoS pode acontecer da mensagem ser enviada diversas vezes e ser processada diversas vezes. Para que haja o envio da mensagem mais de uma vez, a mensagem precisa ser armazenada. Ela será excluída do receptor após ter recebido o feedback de confirmação do envio.
- QoS 2 – Exatamente uma vez
Nesse modo de transferência, a mensagem é entregue exatamente uma vez, necessitando que seja armazenada localmente no emissor e no receptor até que seja processada. Para garantir a segurança desse QoS, é necessário o envio de 2 pares de request-response(chamado de four-part handshake), onde temos o envio da mensagem(Publish), a resposta de recepção(Pubrec), o aviso do recebimento do Pubrec(Pubrel) e a confirmação de que o processo foi concluído e pode ser feita a exclusão(Pubcomp).
Após o recebimento do Pubrel, o receptor pode excluir a mensagem e ao publicador receber o Pubcomp ele poderá excluir a mensagem.
Estrutura dos tópicos e exemplo de mensagem MQTT
Os tópicos MQTT são flexíveis, e podem ser criados e formatados de forma inteligente, de maneira que possa ser rastreável quem envia a informação.
Uma boa prática é utilizar a teoria dos conjuntos para dividir os grupos e facilitar a inscrição para receber os dados de uma mesma espécie.
mqtt://broker/topico
Sendo: mqtt o protocolo de comunicação; broker, é o endereço do broker, podendo ser um IP, ou um DNS, e tópico o endereço que vai receber a informação em si.
No nosso exemplo podemos fazer a seguinte análise: digamos que a casa tenha mais de um sensor de temperatura e status do ar-condicionado, e que também existem sensores de iluminação ambiente que controle as lâmpadas em diversos cômodos.
Seguindo este modelo, podemos criar os tópicos para que os sensores publiquem dados da seguinte forma:
- mqtt://broker/ar-condicionado/sala
- mqtt://broker/ar-condicionado/suite
- mqtt://broker/ar-condicionado/quarto1
- mqtt://broker/ar-condicionado/quarto2
- mqtt://broker/iluminacao/sala
- mqtt://broker/iluminacao/suite
- mqtt://broker/iluminacao/quarto1
- mqtt://broker/iluminacao/quarto2
- mqtt://broker/iluminacao/cozinha
- mqtt://broker/iluminacao/banheiro
Assim, o aparelho de ar-condicionado da sala, que é quem está interessado em receber dados de temperatura desse ambiente, pode subscrever-se apenas no primeiro tópico.
Coringas
Vamos imaginar que nesta casa inteligente exista um tablet de comandos que terá um dashboard central com os dados de todos os sensores. Nele, existe o desenho da planta da casa, onde é mostrado a localização de cada sensor/aparelho.
Para que o tablet pudesse receber os dados de todos os sensores, e desenhar na tela seu status, ele deveria se subscrever para receber em todos os tópicos acima, correto? Errado!
Existem estruturas coringa, que podemos usar no caminho da URL para que o receptor faça subscrição em um conjunto de tópicos simultaneamente. As mais utilizadas, normalmente, são o + e o # sendo o primeiro para substituir algo no meio do caminho, e o segundo, a parte final da URL.
No nosso caso, o tablet pode se inscrever nos tópicos da seguinte forma:
- mqtt://broker/ar-condicionado/#
- mqtt://broker/iluminacao/#
Caso houvesse a necessidade de se inscrever em tópicos para recuperar dados especificamente de um ambiente, como por exemplo a instalação de um totem fixo na suíte que irá fazer todos os controles deste local, este totem pode se subscrever da seguinte maneira:
- mqtt://broker/+/suite
Ou seja, a estrutura dos tópicos são bastante flexíveis e devem ser pensadas com inteligência e estratégia para evitar throughput grande que cause gargalo.
4. A nuvem
Nós que trabalhamos e lidamos com tecnologia todos os dias, estamos acostumados e entendemos as vantagens e a revolução que a nuvem trouxe.
Com seu potencial de escalabilidade, a nuvem torna-se uma grande aliada da IoT para aplicações em grande escala. Imagine aplicativos que capturam posição geográfica de GPS de diversos veículos, e que podem ter milhares, talvez milhões de conexões ao mesmo tempo.
Ou até mesmo no nosso cenário, em que uma empresa de automação residencial esteja construindo diversas smart homes e decida armazenar os dados coletados em um único servidor, conectando sensores e receptores à um único broker. Neste cenário, somente a escalabilidade proporcionada pela nuvem pode segurar a coleta e o armazenamento dessa grande quantidade de dados.
Mas como funcionaria esta aplicação na nuvem? Assim como no ambiente local, necessitamos que o recebimento dos dados coletados seja feito e processado.
Nós fazemos isso através de workers que são serviços na nuvem que irão se subscrever para receber as informações do nosso broker.
No exemplo abaixo, temos 2 workers recebendo informações de uma mesmo tópico, e trabalhando com elas de forma diferente. O primeiro, recebe os dados sobre utilização de energia e temperatura ambiente, e os armazena em um Data Store. O Segundo, recebe os mesmos dados, porém os envia para uma área de Cache onde somente a última informação é relevante.
Este, é acessado por um serviço web ou mobile, que disponibiliza o status atual dos periféricos observados.
Conclusão
Vimos nesta primeira parte os conceitos de IoT, qual sua arquitetura, seus protocolos, e como utilizá-la para ter vantagem no acirrado, competitivo e tecnológico mundo em que vivemos. Aprendemos também como fazer para implementá-la. Em seguida, iremos executar um exemplo prático de sua utilização.
Algumas referências usadas:
- O Que é Internet of Things (IoT)? | Oracle Brasil
- Internet das Coisas (IoT): Tudo que você precisa saber | PROOF
- ‘Internet das Coisas’: entenda o conceito e o que muda com a tecnologia | Notícias | TechTudo
- Protocolo MQTT: a solução para comunicação M2M?
- Protocolo MQTT – Redes 1
- Introdução ao MQTT | Curto Circuito
- Digital Innovation One
Tem alguma dúvida ou questionamento sobre o assunto? Conta pra gente nos comentários!