Quando e por que usar o protocolo MQTT?

34

Estou desenvolvendo um dispositivo que mede temperatura, umidade e massa. Atualmente, ele usa HTTPS para carregar dados em um servidor remoto. Agora eu sei que existe um protocolo chamado MQTT que é reivindicado ser o "protocolo da Internet das Coisas".

Em que caso e por que devo mudar de HTTPS para MQTT?

Bence Kaulics
fonte

Respostas:

32

O MQTT é um "mensageiro" entre dispositivos:

  • seu dispositivo mede no tempo T uma temperatura de X graus
  • ele se conecta (ele próprio ou por meio do hub zwave) ao broker do MQTT
  • ele cria uma mensagem com o tópico /domotics/myplace/mydevice/temperature
  • dentro da mensagem que ele coloca X(como a "carga útil")

Em outros lugares da sua casa:

  • seu Raspberry Pi está conectado ao broker MQTT (pode ser a própria instância do MQTT)
  • ele assina o tópico /domotics/+/+/temperaturepara receber TODAS as informações de temperatura de todos os dispositivos que usam este formato de tópico. Consulte a especificação do MQTT para obter mais informações sobre curingas de tópicos do MQTT ( +e #).
  • receberá uma mensagem com a carga útil Xe fará o que quiser!

Em outros lugares da sua casa:

  • seu computador está conectado ao broker MQTT e assina o tópico /domotics/myplace/mydevice/#para obter TODAS as informações do seu dispositivo e registrá-las
  • receberá uma mensagem com a carga útil Xe fará o que quiser!

O MQTT é muito útil para evitar colocar serviços da Web e soquetes nos servidores. O Node-RED usa MQTT e o Domoticz pode ser configurado para obter ine definir outsinais.

Eu pessoalmente uso o MQTT em minha casa para desligar os computadores: /house/computers/mycomputercarga útil:0

Goufalite
fonte
É bom ressaltar que não preciso me preocupar com soquetes e outros serviços da web.
Bence Kaulics
Você pode comentar sobre os aspectos de segurança? O tráfego é texto sem formatação?
MAWG
11
Outra resposta diz que o MQTT suporta TLS; iot.stackexchange.com/a/69/39
Goufalite
20

O MQ Telemetry Transport Protocol, conhecido como MQTT, foi projetado para dispositivos que executam com baixa energia e baixa largura de banda. É um protocolo de mensagens de publicação / assinatura leve, o que significa que qualquer outro dispositivo pode se inscrever em um tópico específico.

O HTTP / HTTPS foi projetado como um protocolo de solicitação-resposta para computação cliente-servidor, que nunca se preocupa com o uso de energia e possui muitos dados em sobrecarga.

Use MQTT se:

  • O dispositivo que você está usando está sendo executado na célula da bateria e você não deseja substituí-lo a cada x número de dias (o MQTT é otimizado para o uso da bateria enquanto o HTTP / S não é)
  • Precisa de resposta mais rápida
  • Precisa ter um mecanismo pub / sub (se você deseja enviar mensagens para muitos clientes)
  • Precisa enviar dados de maneira confiável com diferentes níveis de QoS

O MQTT oferece tanta segurança quanto o HTTPS?

O MQTT depende do TCP como protocolo de transporte, o que significa que, por padrão, a conexão não usa uma comunicação criptografada. Para criptografar toda a comunicação MQTT, a maioria dos intermediários MQTT - como o HiveMQ - permite usar TLS em vez de TCP simples.

Ref: HiveMQ

bravokeyl
fonte
11
O MQTT oferece tanta segurança quanto o HTTPS?
Bence Kaulics
2
Ele pode usar SSL / TLS, portanto deve ser tão seguro quanto HTTPS.
Ghanima
11
Exatamente como o @Ghanima disse, atualizei a resposta com o artigo de referência para verificar quais conversas sobre a proteção do MQTT.
bravokeyl
11

O MQTT (Transporte de Telemetria da Fila de Mensagens) parece ser bem adequado para o aplicativo proposto.

É leve tanto em relação à largura de banda (tamanho de pacote menor com um cabeçalho de apenas 2 bytes) quanto ao espaço ocupado pelo código do cliente (permitindo que ele seja executado em thin clients como o ESP8266, cliente de IoT típico). Os dados transmitidos reduzidos são benéficos para uma vida útil mais longa da bateria para clientes alimentados por bateria fora da rede, como sensores.

O MQTT também oferece métodos simples ( verbos ) adequados às tarefas de IoT, como assinaturas duráveis ​​que recuperam conexões após desconexões inesperadas do cliente. Comparado ao HTTP / HTTPS, também é mais simples extrair dados do pacote (nenhum analisador é necessário).

Ghanima
fonte
5

Aqui escrevi um artigo que mostra e evolui o sistema de comunicações que tínhamos em nosso projeto. Trata-se de microsserviços, mas você pode considerar qualquer sensor como microsserviço com seu trabalho de reunir e publicar qualquer tipo de dados de telemetria.

Portanto, a conclusão mais importante é que é melhor usar o MQTT quando você só precisa enviar um evento para algum lugar e você não sabe nada sobre o destinatário. E é muito melhor usar HTTP (geralmente REST) ​​quando você conhece algo sobre destinatário e precisa de alguma resposta - por exemplo, no caso de comandos de qualquer natureza.

Do ponto de vista do tráfego, CPU, memória e consumo de energia, as perspectivas MQTT e HTTP são basicamente as mesmas.

shal
fonte
2

Em relação à sua cotação, o MQTT é o "protocolo da Internet das Coisas":

Sim, há uma grande quantidade de desenvolvedores usando esse protocolo (consulte IoT Developer Survey 2018), mas o CoAP (é HTTP ajustado para IoT, com base no UDP) fornece uma alternativa para HTTP, caso você queira usar uma funcionalidade leve de Solicitação / Resposta dentro sua aplicação.

O MQTT, por outro lado, fornece uma lógica interna de publicação / assinatura, o que o torna ótimo para dimensionamento (você pode usar mais gateways para uma quantidade maior de dispositivos). Há também uma alternativa UDP (como CoAP para HTTP) que é chamada MQTT-SN (MQTT para redes de sensores). Isso fornece uma sobrecarga ainda menor que o CoAP, mas não utiliza R / R.

Pepe Bellin
fonte