Aplicação exemplo: Driver MQTT em comunicação com Broker Mosquitto MQTT.

Introdução

Neste artigo, será criado um ambiente de demonstração das configurações básicas de um driver MQTT em comunicação com um Broker Mosquitto MQTT, com um cliente (MQTT Lens) conectado para fins de teste em cenários de publicação/assinatura de Mensagens MQTT.

Protocolo MQTT (Message Queue Telemetry Transport)

O MQTT é um dos melhores protocolos de rede para dispositivos de Internet das Coisas (IoT), tendo sido projetado para um transporte extremamente leve de mensagens. Com o MQTT, o dispositivo pode “ouvir” e ser notificado apenas quando houver alguma alteração na variável. Dessa forma, a conexão permanece aberta, mas os dados só serão transmitidos quando necessário, o que contribui para a economia de bateria, largura de banda da rede e uma melhora em geral dos recursos em tempo real.

Neste protocolo, o ponto de comunicação central é o Broker MQTT, que é responsável por gerenciar todas as mensagens entre os remetentes e os receptores. O protocolo MQTT define dois tipos de entidades na rede: um message broker e inúmeros clientes. O broker é um servidor que recebe todas as mensagens dos clientes e, em seguida, roteia essas mensagens para os clientes de destino relevantes. Um cliente é qualquer coisa que possa interagir com o broker e receber mensagens; exemplos de cliente são sensores de IoT em campo ou aplicativos em um data center que processam dados de IoT.

A sequência de comunicação é a seguinte:

  1. Primeiramente, o cliente (MQTT Lens) se conecta ao broker. Ele pode assinar qualquer “tópico” de mensagem no broker.
  2. Depois, o cliente (MQTT Lens) publica as mensagens em um tópico, enviando a mensagem e o tópico ao broker.
  3. Em seguida, o broker encaminha a mensagem a todos os clientes que assinam esse tópico (Driver MQTT Elipse).

 

Instalação do Mosquitto MQTT Broker

1. Primeiramente, faça o download do Mosquitto na seção Download do site Mosquitto.org. Neste exemplo, usaremos o instalador mosquitto-1.6.2-install-windows-x86, que é a compilação nativa aplicável ao Windows Vista ou superior.

2. Logo após, execute o arquivo baixado, selecione o componente Service e clique em Next.

3.  Então, selecione o local de instalação e clique em Install.

4. Posteriormente, inicie o serviço Mosquitto Broker, através da opção: Painel de Controle–Ferramentas Administrativas–Serviços (services.msc).

5. Para verificar se o Broker está funcionando, utilize o comando netstat -an a partir do prompt.

 

Teste com cliente MQTTlens

O MQTT Lens (extensão do Chrome) foi utilizado para se conectar ao MQTT Broker no exemplo deste artigo.
Importante mencionar, que qualquer outro cliente MQTT pode ser utilizado (ex.: MQTT X, MQTT Explorer, etc.).

1. Para adicionar a extensão, primeiramente clique neste endereço.

2. Após sua instalação, clique no aplicativo de instalação ou inicialização e execute o complemento.

3. Logo depois, adicione a conexão ao broker.

4. Ao clicar em Criar Conexão, você será levado para a tela onde será preciso fornecer as informações de publicação e assinatura para testar o Broker.

 

Subscribe: Plant-1/Sensor-001/Data/#
Publish: Plant-1/Sensor-001/Data/
Message: {"Temperature":25,"Humidity":44}

5. No exemplo acima, note que o símbolo # na caixa Subscribe assina todo o conteúdo disponível no tópico Plant-1/Sensor-001/Data/.

6.  Para maiores informações sobre a mensagem, clique no botão Informações ao lado direito da mensagem.

7.  Para enviar mensagens ao Broker, e consequentemente ao Driver MQTT, com o driver ativo no E3, clique no botão Publish do MQTTlens.

Configurando o Driver MQTT para comunicar com o Broker Mosquitto

1. Antes de tudo: para que o driver receba a mensagem enviada pelo Broker, será preciso criar o seguinte template JSON para extrair a mensagem:

{"Temperature":"E3VAL",  "Humidity":"E3VAL"}

2. Logo após, acesse a aba Ethernet e informe o endereço IP e a porta utilizada pelo broker.

3. Como a palavra-chave utilizada no template para os valores extraídos é igual a E3VAL, será preciso criar um tag bloco com dois elementos, que receberá um valor em cada item.

4. Logo após, no parâmetro Item do tag, deve-se especificar o tópico e o template (Plant-1/Sensor-001/Data/;Plant) desejado.

A aplicação exemplo em anexo foi desenvolvida no Elipse E3 v5.1.175.

Anexos:

AppMQTT.zip
Mosquitto-1.6.2-install-windows-x86.zip

Print Friendly, PDF & Email

Este artigo foi útil? Was this helpful?

Classificação média - Average rating 4.8 / 5. Count: 5

Comentários em “Aplicação exemplo: Driver MQTT em comunicação com Broker Mosquitto MQTT.

  1. Tenho esse JSON que recebo dos meus dispositivos MQTT e gostaria de coletar os valores Time , var1 e var2. Qual seria a configuração do template no Elipse ?

    Menssage Json que recebo dos dispositivos e o Elipse precisa interpretar
    {“FormatId”:”TagValues”,”ApiVersion”:1,”CollectionId”:1,”TagData”:[{“Time”:”2020-05-25T21:11:07.337-3:00″,”Values”:{“var1″:100,”var2”:true}}]}

    Muito obrigado

    1. João,
      Você pode utilizar o seguinte Template:

      {“FormatId”:”DUMMY”,
      “ApiVersion”:”DUMMY”,
      “CollectionId”:”DUMMY”,
      “TagData”:[{“Time”:”TS_TEXT(%Y-%m-%dT%H:%M:%S.%f%+)”,
      “Values”:{“var1″:”E3VAL”,”var2″:”E3VAL”}}]}

      Para receber os valores das variáveis, crie um tag bloco com dois elementos, e no parâmetro Item do tag, especifique o tópico e o template.
      O valor da variável Time será atribuído automaticamente a estampa de tempo (TimeStamp) do tag.

    1. Olá Alessandro,
      O Driver MQTT não é compatível com o Elipse SCADA, uma vez que o software não possui as opções Dispositivo e Item (necessário para a configuração dos Tags).
      Sugerimos a utilização do Elipse E3/Power.

  2. Existe algum painel de controle para o servidor ? por exemplo, eu preciso saber quantos equipamentos conectados ao servidor, quantos usuários, largura de banda utilizada….etc…

    1. O E3 possui algumas estatísticas que podem ser acessadas clicando com o botão direito no E3 Admin – Estatísticas.
      Na opção E3 Admin – Licenças, também há outras estatísticas.

      Com relação ao Mosquitto, com base em sua documentação temos o seguinte:
      Broker Status
      Os clientes podem localizar informações sobre o Broker, inscrevendo-se em tópicos na hierarquia $SYS da seguinte forma. Os tópicos marcados como estáticos são enviados apenas uma vez por cliente na assinatura. Todos os outros tópicos são atualizados a cada sys_intervalsegundos. Se sys_intervalfor 0, as atualizações não serão enviadas.
      Observe que se você estiver usando um cliente de linha de comando para interagir com os tópicos $ SYS e seu shell interpretar $ como uma variável de ambiente, você precisa colocar o tópico entre aspas simples ‘$ SYS / …’ ou escapar do símbolo de cifrão : \ $ SYS / … caso contrário, $ SYS será tratado como uma variável de ambiente.

      Dois exemplos:
      $SYS/broker/bytes/received
      O número total de bytes recebidos desde que o broker foi iniciado.

      $SYS/broker/bytes/sent
      O número total de bytes enviados desde que o broker foi iniciado.

      No driver, basta inserir o endereço desejado do tópico no parâmetro Item do tag driver:
      Status Broker

      Maiores informações e exemplos em:
      https://mosquitto.org/man/mosquitto-8.html

    1. Leonardo,
      A aba Ethernet está acessível na configuração do driver MQTT.
      Clique com o botão direito no objeto driver, em seguida selecione a opção Configuração (ou o ícone “Configurar o Driver…”).
      Ethernet

  3. Ola
    Instalei a versão “mosquitto-2.0.14-install-windows-x64” pra Windows 10 64
    Mas o IP local fica 127.0.0.1:1883 e não 0.0.0.0:1883
    Como corrigir ?
    No aguardo
    Eloi

  4. Olá !
    Realizei o passo a passo na minha aplicação E3 e não comunicou, fiz o download da sua de exemplo, e mesmo assim não consegui fazer comunicar, segui todos os passos mais de uma vez. O que pode estar impedindo a comunicação ?

    E3 Server, Studio, Viewer com Demo versão 6.1.98

  5. Olá!

    Eu desenvolvendo uma programação onde tenho um esp32 enviando um mensagem se um led está aceso ou apagado, o código está assim:

    {
    digitalWrite(LED_VM, HIGH);
    client.publish(“esp32/data”, “1”);
    }

    else

    {
    digitalWrite(LED_VM, LOW);
    client.publish(“esp32/data”, “0”);
    }

    Queria saber se está correto e como eu configuro o tamplet Json no elipse e3 para receber essa informação?

Deixe seu Comentário

Seu endereço de e-mail não será publicado. Campos marcados com asterisco são obrigatórios *