INTRODUÇÃO
O módulo MQTT implementa suporte para o protocolo MQTT, permitindo integração simples dos controladores com a nuvem.
O protocolo MQTT é baseado em um conceito de PUBLISH/SUBSCRIBE. Neste modelo, equipamentos publicam dados para um servidor centralizado. Equipamentos que estejam interessados nestes dados se subescrevem à eles. Quando um dado é publicado no servidor, todos os que estiverem subscritos receberão o novo dado publicado. A este servidor centralizado se dá o nome de broker.
O protocolo MQTT define que os dados são publicados em tópicos. Um tópico é uma string hierárquica que unicamente identifica uma determinada variável. Por exemplo: Predio_X/pavimento_1/sala_101/temperatura_ambiente
Os tópicos MQTT podem ser livremente selecionados pela aplicação. Ao se subcrever para receber atualizações, um cliente pode usar caracteres especiais para definir que está interessado em todas as publicações de uma determinada hierarquia.
A implementação do protocolo MQTT nos controladores suporta tanto a publicação (publish) de dados quanto o recebimento (subscribe) de dados.
Atualmente o módulo suporta as versões 3.1.1 e 5.0 do protocolo
BLOCO MQTT_CLIENT
O bloco CLIENT é responsável por gerenciar a conexão do controlador com o servidor MQTT (broker). Só pode existir uma única instância deste bloco no programa.
CONTROLE DA CONEXÃO
A entrada EN controla a conexão do controlador com o broker. Com a entrada ativada, o controlador tenta se conectar com o servidor. Mesmo que desconectado pelo broker, o bloco repete a tentativa de conexão enquanto a entrada EN permanecer ativa.
A saída CONN indica o estado da conexão com o broker. Os blocos PUB e SUB só operam caso o controlador esteja conectado com o servidor.
A saída STATE indica o estado atual do processo de conexão. Caso ocorra algum erro durante o processo, um código de erro será mostrado na saída ERROR. Os códigos destas saídas estão definidos na ajuda do bloco.
CONFIGURAÇÕES
Nas configurações do bloco MQTT_CLIENT são definidos os parâmetros do servidor (broker).
VERSÃO DO PROTOCOLO
É possível selecionar entre as versões 3.1.1 e 5.0 do protocolo. Recomendamos o uso da versão 5, mas alguns brokers ainda não possuem suporte para esta versão. As diferenças de funcionalidade entre as duas versões na implementação do controlador são mínimas. Caso existam, serão destacadas nos tópicos seguintes
SERVIDOR / TRANSPORTE
Nestas configurações se definem o endereço do broker (IP ou host) e a porta TCP com o serviço MQTT. Equipamentos com interface apenas ethernet não suportam resolução de nomes, sendo obrigatório o uso de IP. A configuração de transporte define a camada de transporte a ser utilizada para o protocolo MQTT.
Atualmente são suportados os protocolos TCP (conexão simples, sem criptografia) e TLS (seguros, com criptografia). A versão do protocolo TLS depende do broker e recomenda-se o uso de TLS 1.2 ou superior.
AUTENTICAÇÃO
De forma a garantir evolução dos algoritmos de autenticação e segurança cibernética, o protocolo MQTT não define uma forma fixa de autenticação, mas sim apenas um protocolo para que ela seja feita durante a conexão ao servidor. A configuração “method” define o algoritmo a ser utilizado.
Atualmente os controladores implementam apenas o método básico de autenticação do protocolo MQTT, através de usuário e senha. Caso o parâmetro usuário ou senha sejam deixados em branco, eles não serão enviados. O significado destes dois parâmetros dependem do broker e em alguns casos são usados para outras finalidades. Consultar a documentação do broker.
O parâmetro Client ID define unicamente o controlador no broker. Caso uma nova conexão for recebida com o mesmo Client ID, a conexão anterior é descartada. Alguns brokers suportam que este parâmetro seja uma string vazia, sendo que, neste caso, o próprio broker vai definir um ID único para o cliente.
MENSAGEM WILL
A mensagem de will (testamento) pode ser habilitada caso desejado. Esta mensagem é publicada no tópico selecionado diretamente pelo broker caso o controlador se desconecte. Caso a desconexão seja feita formalmente (mensagem DISCONNECT – desativando a entrada EN do bloco CLIENT), a mensagem will não é enviada.
O parâmetro Delay define o atraso para envio da mensagem de will. Caso o cliente se conecte novamente antes que este delay expire, a mensagem de will não é enviada.
Os demais parâmetros têm o mesmo significado das mensagens publicadas pelo bloco PUB.
BLOCOS MQTT_PUB
Os blocos PUB são responsáveis pelo envio de dados ao broker.
Para cada formato de dado suportado pela linguagem gráfica, existe um bloco PUB correspondente (BOOL, INT e FLOAT). Estes blocos enviam para o broker o valor da entrada em formato texto. Para um melhor controle do formato da mensagem, usar o bloco MQTT_PUB. Este bloco permite selecionar livremente o formato da mensagem (payload). Consultar o manual do módulo TAGS para detalhes.
A entrada EN habilita o envio de dados do bloco. A entrada VALUE define o valor a ser enviado.
DISPARO
Existem 3 formas para publicação dos dados: manual, tempo e variação de valor. É possível usar qualquer combinação destes disparos.
O disparo MANUAL é feito através da entrada PUB. Sempre que uma borda de subida for detectada nesta entrada uma publicação é enviada para o servidor.
O disparo por TEMPO é feito configurando-se o parâmetro TIME nas propriedades do bloco. Este parâmetro indica em HORAS:MINUTOS o intervalo de publicação. Este tempo é sincronizado com o relógio do controlador. O parâmetro START OFFSET permite definir o offset inicial em minutos. Por exemplo, se TIME for 01:00 e OFFSET for 30, o envio será feito às 00:30, 01:30, ... Caso o parâmetro TIME seja zero, o disparo por tempo é desabilitado.
O disparo por VARIAÇÃO DE VALOR é habilitado quando se configura o parâmetro VALUE CHANGE diferente de zero. Se a variação de valor for maior ou igual do que este parâmetro (em relação ao último envio) um novo valor é publicado.
PARÂMETROS DO MQTT
Nas propriedades do bloco é necessária a configuração dos parâmetros para publicação no broker MQTT.
O parâmetro TOPIC define o tópico a ser publicado. Este valor é enviado pelo protocolo da forma como configurado, sem tratamento.
O parâmetro QOS indica a qualidade do serviço. Publicações com QOS 0 são enviadas apenas uma vez, sem confirmação do servidor. É indicado para dados que são enviados em intervalos regulares, onde a perda de um dado no processo não é relevante. Publicações com QOS 1 são confirmadas pelo servidor, garantindo a entrega. Neste QOS o broker pode receber o mesmo dado mais do que uma vez, devido ao reenvio caso o servidor não confirme o dado em tempo hábil. Publicações com QOS 2 possuem garantia de entrega além do recebimento único pelo broker. Recomenda-se que os QOS nível 1 e 2 sejam usados apenas quando necessários pela aplicação, devido à maior complexidade de envio e uso de um número maior de recursos do controlador.
O parâmetro EXPIRY INTERVAL define o tempo de validade da mensagem no broker em segundos. Quando a mensagem é publicada, seu valor é enviado para todos os clientes que estão subscritos no tópico. Alguns brokers suportam o armazenamento destas mensagens para envio quando ocorrerem novas subscrições no tópico ou quando clientes se reconectarem. Nestes casos, o parâmetro expiry interval define o tempo que esta mensagem fica armazenada no broker.
O parâmetro RETAIN define se a mensagem deve ficar armazenada no servidor. Caso retain seja false, as mensagens publicadas são enviadas apenas para os clientes subscritos e conectados no momento da publicação. Existem vários brokers que não suportam as mensagens armazenadas e a publicação com o parâmetro retain pode gerar a desconexão do broker.
BLOCOS_MQTT_SUB
Os blocos SUB são usados para o controlador se subscrever em determinado tópico e receber dados do broker.
Da mesma forma que os blocos PUB, existem um bloco para cada formato de dado suportado na linguagem gráfica.
Quando conectado ao broker, a entrada EN controla o estado da subscrição. Quando ativada, o bloco se subscreve no tópico. Quando desativada, o bloco cancela a subscrição. A saída VALUE contém o último valor recebido. A validade deste valor depende da saída STATE, que indica o estado da subscrição. Caso state seja 3, o bloco está subscrito no tópico, mas nenhuma publicação (valor) ainda foi recebido. Quando state for 4, a saída value é válida.
Caso ocorra algum erro durante o processo de subscrição, a saída ERROR indica o código do erro ocorrido. Consultar a ajuda do bloco para detalhes.
A saída PUB_TIME indica o tempo decorrido (em segundos) desde a última publicação recebida
PARÂMETROS DO MQTT
O parâmetro TOPIC define o tópico a se subscrever. Este parâmetro é enviado no protocolo como configurado, sem tratamento.
O parâmetro MAX QOS define o QOS máximo que pode ser recebido por esta subscrição. Pelas regras do protocolo, publicações com QOS maior que este parâmetro não são enviados pelo broker. Na prática, a maioria dos brokers suporta alteração do QOS original da publicação para reduzir para o limite da subscrição.
O parâmetro RETAIN HANDLING define como devem ser tratadas as mensagens retidas no broker para o tópico da subscrição. É possível receber estas mensagens após a subscrição ou não.
FORMATO DE DADOS
O protocolo MQTT não define o formato do dado enviado (payload), sendo definido pela aplicação.
Atualmente o controlador envia o payload em formato texto. Consulte o suporte para diferentes formatos, se necessário.
Este artigo foi útil?
Que bom!
Obrigado pelo seu feedback
Desculpe! Não conseguimos ajudar você
Obrigado pelo seu feedback
Feedback enviado
Agradecemos seu esforço e tentaremos corrigir o artigo