Integrando a “IoT” com o Magic xpi e o MQTT

O Magic xpi permite de forma muito fácil e rápida a conectividade entre diversos dispositivos de IoT (Internet of Things) através do MQTT (Message Queue Telemetry Transport).

Vamos conhecer um pouco mais sobre isso.

Antes que possamos efetivamente entrar na questão do uso do Magic xpi e MQTT em projetos de IoT, precisamos conhecer algumas definições teóricas sobre o MQTT, para que os demais itens desta publicação tenham um sentido completo.

O MQTT  é um “protocolo de comunicação” criado em cima da infraestrutura TCP, similar ao protocolo HTTP. Numa estrutura hierárquica, o MQTT estaria ao lado do HTTP, ambos abaixo do TCP. E ainda podemos ter o SOAP e REST representados abaixo do HTTP.

O MQTT foi concebido como um protocolo de comunicação “leve”, para eficiência em conexões de baixa qualidade, como seria o caso dos dispositivos inteligentes (que apesar de inteligentes, não possuem toda a capacidade de processamento e robustez de um computador normal – e geralmente usando conexões wireless).

O MQTT prevê a existência de dois atores: O MQTT Client e o MQTT Broker (em alguns casos, também chamado de MQTT Server).

NOTA: Este é um caso onde “Broker” e “Server” são sinônimos, e não componentes complementares

O modelo de mensageria no MQTT é o PSS (Publish & Subscribe)Os MQTT Clients são os responsáveis por “publicar mensagens associadas a tópicos” e também por “subscrever tópicos” de forma a serem notificados sempre que uma mensagem associada àquele tópico específico tenha sido publicada. O MQTT Broker é o responsável por gerenciar este tráfego das mensagens, e controlar a lista de subscritores dos tópicos, afim de distribuir corretamente as mensagens para os seus destinatários. Um MQTT Client envia a sua mensagem para o, MQTT Broker que a distribui para os demais (devidos) MQTT Clients da rede.

Tendo esta compreensão, vamos então ver como é fácil inserir o Magic xpi nesta arquitetura.

Magic xpi é um MQTT Client. Assim, ele tem a capacidade de “publicar mensagens” e “subscrever tópicos”.

Para esta demonstração precisaremos também (como visto acima) de um MQTT Broker. Vamos usar o MosquittoMosquitto é um software Open Source popular no mundo MQTT, disponível em várias plataformas (Mac, Windows, iOS, Linux) e também no Raspberry Pi. Raspberry Pi é um dispositivo inteligente (praticamente um micro computador) também bastante popular nos projetos IoT, pois ele vem “cru” e permite programação livre, sendo utilizado na automação de vários outros dispositivos e equipamentos.

Nós usaremos a versão Windows do Mosquitto que uma vez instalada na máquina, registra um serviço no SO:

e inicia o MQTT Broker na porta TCP 1883:

Publicando Mensagens com o Magic xpi

É bastante simples este procedimento.

Inicialmente, precisamos definir um recurso do tipo MQTT no nosso projeto Magic xpi:

O MQTT  apesar de “leve” oferece várias opções de configuração da comunicação, como canal SSL, uso de certificados digitais, credenciais de acesso (usuário/senha), versões 1, 1.1 e 1.2 do TLS, além do LWT (Last Will Testament). Nós iremos pelo caminho mais simples, informando apenas o protocolo (tcp) e o endereço do MQTT Broker (ip e porta).

tcp://127.0.0.1:1883

É só o que vamos precisar por agora.

Na sequência, arrastamos o conector MQTT do Magic xpi para a área de fluxo e o associamos a este recurso:

e iniciamos a sua configuração:

Informamos o QoS (Quality of Service) da publicação e ao clicar “OK“, o Studio nos apresenta o assistente de parametrização do conector, onde podemos informar o “tópico” e o “conteúdo(payload) da mensagem:

Os formatos de mensagens no MQTT são totalmente livres, variando de texto (normal, json, xml, …) a binário., não podendo contudo ultrapassar o tamanho de 256MB. Por isso esta informação é um blob.

Como mostrado ali na tela de configuração do conector MQTT do Magic xpi, podemos armazenar o resultado da operação (propriedade Store Result in). Este resultado é disponibilizado como um documento xml com informações para avaliar posteriormente se a publicação foi bem sucedida ou não:

O esquema (xsd) para leitura deste retorno do componente é disponibilizada em:

%AddOnConnector%MQTT\xsd\MQTT_PublishResult.xsd

E é isso. Ao executar este componente neste fluxo, uma mensagem “x” associada a um tópico “y” será transmitida ao MQTT Broker.

Subscrevendo Tópicos com o Magic xpi

É mais simples ainda.

Criamos um serviço do tipo MQTT no nosso projeto Magic xpi (e também o associamos a um recurso MQTT):

NOTA: ClientID é um número exclusivo que vai identificar o Magic xpi lá no MQTT Broker.

Na sequência, arrastamos o conector MQTT do Magic xpi para a área de trigger e o associamos a este serviço:

Fazemos sua parametrização informando:

♦ Tópico que estamos subscrevendo (Topic)

♦ Qualidade da transmissão que vamos exigir (QoS)

♦ Onde vamos guardar o conteúdo da mensagem recebida (Message Payload)

♦ Qual o tópico associado àquela mensagem (Message Topic), no caso de estarmos subscrevendo mais de um

NOTA: Este é um raro caso onde não precisamos informar nenhum valor de retorno no conector, já que nenhum dado será devolvido ao MQTT Broker (exceto a sinalização de mensagem recebido cfe. o QoS escolhido).

E é isso. Ao ser publicada no MQTT Broker uma mensagem “x” associada ao tópico “y”, que está subscrito pelo Magic xpi, este fluxo começa a executar imediatamente.

Executando o Projeto Demo

Um projeto Magic xpi 4.7 exemplo desta integração com o MQTT  está disponível aqui neste endereço.

Neste projeto, temos um fluxo chamado “Publicar” que gera mensagens aleatórias (texto simples, json, xml) e as publica num tópico chamado:

MagicBRDemo1

no Mosquitto.

E um outro fluxo chamado “Subscrever” que assina um tópico chamado:

MagicBRDemo2

no Mosquitto.

Para que possamos ver este projeto efetivamente em ação, precisamos da ajuda de um terceiro ator, que é um outro MQTT Client, aquele que receberá as mensagens publicadas pelo Magic xpi e que publicará mensagens no tópico que o Magic xpi  subscreveu.

Num projeto IoT  real, este seria o (ou “os”) dispositivo(s) inteligente(s). Nesta nossa demonstração, usaremos o MQTT.fx para fazer este papel.

Assim, sempre que o Magic xpi publica uma mensagem no tópico MagicBRDemo1:

O MQTT.fx (que está assinando este mesmo tópico) a recebe:

E de forma inversa, sempre que o MQTT.fx publica uma mensagem no tópico MagicBRDemo2 :

Magic xpi (que está assinando este mesmo tópico) a recebe:

 

Podemos confirmar então como é simples, rápido e prático “conversar” com equipamentos dentro de um processo de automação ou integração, usando o Magic xpi e o seu conector MQTT.

 

Manoel Frederico Silva – Gerente de Tecnologia e Evangelista MAGIC – Magic Brasil

Manoel Frederico Silva – Gerente de Tecnologia e Evangelista MAGIC – Magic Brasil

Para receber os artigos do Blog Magic Brasil em primeira mão no seu email registre-se aqui

Novo Comentário