MQTT Message Queue Telemetry Transport

Protocolo de transferência de mensagens projetado especialmente para a comunicação de dispositivos IoT, sendo eficiente em sistemas com recursos limitados.

Categoria de Tecnologia

Postado em 25 janeiro 2023

Atualizado em 25 janeiro 2023

Palavras-chave: mqtt,websockets,tcp,udp,http,ssl,protocolo,comunicacao,dispositivo,iot,mensaem

Visualizações: 989



O que é MQTT?

A sigla MQTT significa “Message Queue Telemetry Transport”, em português, “Transporte de telemetria de enfileiramento de mensagens”.

O MQTT é um protocolo de comunicação de mensagens baseado em uma arquitetura de publicação e inscrição, permitindo a comunicação bidirecional de dispositivos. A publicação e inscrição de cada dispositivo podem ser realizadas em tópicos específicos, podendo enviar e receber atualizações nos tópicos escolhidos.

Foi projetado para atender os requisitos de dispositivos IoT e redes de dispositivos com recursos limitados. O protocolo MQTT não exige recursos com alta eficiência, podendo ser adotado em sistemas com recursos limitados, pois foi otimizado para ser leve e eficiente em questões de banda e consumo de energia. Portanto, o MQTT pode garantir que esses dispositivos possam comunicar-se de forma eficaz mesmo quando esses dispositivos apresentam problemas de baixa capacidade de comunicação, como problemas de capacidade de transmissão e baixo alcance.

exemplo de conexão mqtt

Uma rede MQTT precisa de um broker. Um broker é um servidor centralizado que gerencia as conexões dos dispositivos e garante que as mensagens cheguem aos seus destinatários mesmo em casos que não há conexão com a internet. A garantia de entrega das mensagens para outros dispositivos mesmo com a ausência de conexão com a internet é possível graças a capacidade de retenção de mensagens. A retenção de mensagens permite que o servidor guarde a mensagem até que o dispositivo receptor tenha se conectado com a internet novamente e recebido a mensagem.

O protocolo MQTT em si, funciona de forma autônoma, gerenciando a comunicação entre dispositivos. Entretanto, ele usa o protocolo TCP para estabelecer conexões e transmitir as mensagens. O MQTT foi originalmente projetado para usar o TCP como protocolo de transporte. Porém, o suporte para websockets também foi adicionado com o tempo.

O que é QoS no protocolo MQTT?

QoS é a sigla para “Quality of service”, em português, “qualidade de serviço”. Esse parâmetro é responsável pela confiabilidade da transmissão e determina como as mensagens devem ser transmitidas entre o cliente e o servidor (broker). O QoS possui três níveis:

  1. QoS 0: Entrega mensagens uma única vez e não há confirmação de recebimento. É usado para mensagens que não possuem grande valor e podem ser ignoradas na maioria dos casos.
  2. QoS 1: Entrega as mensagens apenas uma vez e confirma o recebimento. É usado para mensagens que precisam ser entregues com precisão, mas que não possuem uma importância crítica.
  3. QoS 2: É o nível mais alto de QoS oferecido pelo MQTT. Garante que as mensagens sejam entregues pelo menos uma vez e exige que as mensagens foram entregues. A confirmação possui um processo de dupla confirmação. O dispositivo publica a mensagem, o broker envia uma confirmação de recebimento e em seguida, o dispositivo confirma o recebimento da confirmação.

O protocolo MQTT é seguro?

O protocolo MQTT não possui mecanismos de segurança já predefinidos. Isso traz alguns riscos para a segurança da comunicação entre os dispositivos, como ataques de interceptação, ataques DoS e ataques de falsificação (spoofing). Para evitar problemas de segurança, tecnologias de segurança devem ser integradas ao sistema de comunicação que o MQTT atua. Em casos de ataques de interceptação, medidas como criptografia de dados pode ser uma boa opção. Mesmo quando essas mensagens são obtidas de forma ilegal por terceiros, elas não podem ser desvendadas por estarem criptografadas. Em casos de ataques de falsificação, implementar um sistema de autenticação de dispositivos no broker, configurar um firewall ou usar assinatura digital podem ser boas medidas, permitindo apenas dispositivos autorizados se conectarem com o broker. Em caso de ataques DoS, definir um limite máximo de conexões simultâneas pode ser o suficiente.

Como usar o protocolo MQTT?

Primeiro o dispositivo deve se conectar ao broker MQTT usando protocolos de transporte TCP ou Websockets. Em seguida, o dispositivo envia informações de autenticação e especificação de parâmetros, como por exemplo o nível QoS desejado. Caso não haja problemas, o broker retorna uma resposta de confirmação de conexão. Um vez conectado, o dispositivo pode enviar e receber mensagens em determinados tópicos. Ao encerrar a conexão, o dispositivo envia uma mensagem para o broker e finaliza a sessão.

Abaixo mostra um exemplo de algoritmo em python para a conexão MQTT usando a biblioteca paho:

import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print("Conectado ao MQTT broker")
    client.subscribe("example_topic_1")

def on_message(client, userdata, msg):
    print(msg.topic + " " + str(msg.payload))

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect("broker.example.com", 1883, 60)

client.loop_forever()

No exemplo acima, o cliente se inscreve no tópico “example_topic_1” e recebe as mensagens pela função “on_message”. O cliente se conecta no broker identificado como “broker.example.com”, na porta 1883 com uma tempo limite de 60 segundos.

Conclusão

O protocolo MQTT foi projetado especialmente para dispositivos de internet das coisas. Esse protocolo é eficiente em sistemas de comunicação onde os recursos são limitados e é ideal para dispositivos que não devem consumir muita energia. Usa outros protocolos como TCP ou Websockets para a conexão, mas é independente em outras tarefas.

Projetos práticos

Criando um sistema de integração contínua (CI/CD)

Fazendo a integração contínua de Jenkins, Sonatype Nexus, Sonatype, JUnit e Gradle para automatizar processos repetitivos. Prática bastante usada em tecnologias de DevOps.

Integrando o PHP com Elasticsearch no desenvolvimento de um sistema de busca

Projeto de criação de um sistema de busca usando o framework Symfony e Elasticsearch. A integração com Kibana também é feito de modo remoto com um raspberrypi.

Tutorial de programação do jogo da serpente em javascript

Programando o clássico jogo da serpente usando o framework p5.js. Tutorial indicado para iniciantes da programação que querem aprender os conceitos básico da área criando jogos.

Integrando Laravel com o protocolo MQTT para comunicação entre dispositivos

Projeto de comunicação entre dois dispositivos ESP8266 e Raspberrypi4. Laravel irá funcionar como servidor e receptor de dados de temperatura e umidade coletados com o DHT11.

Usando dados fornecidos pelo TSE para simular o gráfico das eleições presidenciais de 2022

Simulação dos gráficos do segundo turno das eleições presidenciais, utilizando python e ferramentas de análise de dados, pandas e jupyter.

Veja também

A digitalização é o jeito moderno de gerenciamento de documentos

Digitalizar documentos facilita o gerenciamento, aumenta a disponibilidade e economiza tempo, consequentemente trazendo muitos outros benefícios.

O usuário malicioso joga a isca e espera a vítima pacientemente

Phishing tem esse nome pois a vítima se torna só mais um peixe na rede. Ter conhecimento de phishing é o melhor jeito de evitar ser um desses peixes

Edge Computing

Edge Computing em português significa, computação de borda. É um modelo de computação usado para melhorar a eficácia no processamento e envio de dados.

Endereço IP (IP address)

O endereço de protocolo de internet (endereço IP) é o endereço lógico de um dispositivo conectado à uma rede privada pública.

HTTP, HTTPS e SSL

HTTPS é a versão evoluída do protocolo HTTP. O HTTPS utiliza o protocolo SSL, que torna a transferência de dados segura.

Os 5 principais componentes do computador

Os 5 principais componentes do computador são a unidade de controle, unidade aritmética e lógica, memória, dispositivo de entrada e dispositivo de saída.