¿Cuándo y por qué usar el protocolo MQTT?

34

Estoy desarrollando un dispositivo que mide la temperatura, la humedad y la masa. Actualmente usa HTTPS para cargar datos a un servidor remoto. Ahora sé que hay un protocolo llamado MQTT que se afirma que es el "protocolo de Internet de las cosas".

¿En qué caso y por qué debería cambiar de HTTPS a MQTT?

Bence Kaulics
fuente

Respuestas:

32

MQTT es un "mensajero" entre dispositivos:

  • su dispositivo mide en el momento T una temperatura de X grados
  • se conecta (a sí mismo o a través del concentrador zwave) al agente MQTT
  • crea un mensaje con el tema /domotics/myplace/mydevice/temperature
  • dentro del mensaje que solo pone X(como la "carga útil")

En otra parte de tu casa:

  • su Raspberry Pi está conectada al agente MQTT (puede ser la instancia MQTT en sí misma)
  • se suscribe al tema /domotics/+/+/temperaturepara recibir TODA la información de temperatura de todos los dispositivos que usan este formato de tema. Consulte la especificación MQTT para obtener más información sobre los comodines del tema MQTT ( +y #).
  • ¡recibirá un mensaje con la carga útil Xy hará lo que quiera!

En otra parte de tu casa:

  • su computadora está conectada al agente MQTT y se suscribe al tema /domotics/myplace/mydevice/#para obtener TODA la información de su dispositivo y registrarla
  • ¡recibirá un mensaje con la carga útil Xy hará lo que quiera!

MQTT es muy útil para evitar poner servicios web y sockets alrededor de sus servidores. Node-RED utiliza MQTT y Domoticz se puede configurar para obtener iny establecer outseñales.

Yo personalmente uso MQTT en mi casa para apagar las computadoras: /house/computers/mycomputercarga útil:0

Goufalite
fuente
Buen punto que no tengo que molestarme con sockets y otros servicios web.
Bence Kaulics
¿Puedes comentar sobre los aspectos de seguridad? ¿El tráfico es texto sin formato?
Mawg
1
Otra respuesta dice que MQTT es compatible con TLS; iot.stackexchange.com/a/69/39
Goufalite
20

El protocolo de transporte de telemetría MQ conocido como MQTT está diseñado para dispositivos que funcionan con baja potencia y bajo ancho de banda. Es un protocolo ligero de mensajes de publicación / suscripción que significa que cualquier otro dispositivo puede suscribirse a un tema en particular.

HTTP / HTTPS está diseñado como un protocolo de solicitud-respuesta para la computación cliente-servidor que nunca se preocupa por el uso de energía y tiene una gran sobrecarga de datos.

Use MQTT si:

  • El dispositivo que está utilizando funciona con una celda de batería y no desea reemplazarlo cada x días (MQTT está optimizado para el uso de la batería mientras que HTTP / S no)
  • Necesita una respuesta más rápida
  • Necesita tener un mecanismo pub / sub (si desea enviar mensajes a muchos clientes)
  • Necesita enviar datos de manera confiable con diferentes niveles de QoS

¿MQTT ofrece tanta seguridad como HTTPS?

MQTT se basa en TCP como protocolo de transporte, lo que significa que, por defecto, la conexión no utiliza una comunicación cifrada. Para cifrar toda la comunicación MQTT, la mayoría de los corredores MQTT, como HiveMQ, permiten usar TLS en lugar de TCP simple.

Ref: HiveMQ

bravokeyl
fuente
1
¿MQTT ofrece tanta seguridad como HTTPS?
Bence Kaulics
2
Podría usar SSL / TLS, por lo que debería ser tan seguro como HTTPS.
Ghanima
1
Exactamente como dijo @Ghanima, actualicé la respuesta con el artículo de referencia para verificar qué habla de asegurar MQTT.
bravokeyl
11

MQTT (Message Queue Telemetry Transport) parece ser adecuado para la aplicación propuesta.

Es liviano con respecto al ancho de banda (el tamaño de paquete más pequeño con un encabezado de solo 2 bytes) y la huella del código del cliente (lo que le permite ejecutarse en clientes delgados como el ESP8266, cliente típico de IoT). Los datos transmitidos reducidos son beneficiosos para una mayor duración de la batería para clientes alimentados por baterías fuera de la red, como sensores.

MQTT también ofrece métodos simples ( verbos ) que se adaptan bien a las tareas de IoT, como suscripciones duraderas que recuperan conexiones después de desconexiones inesperadas de clientes. En comparación con HTTP / HTTPS, también es más sencillo extraer datos del paquete (no se necesita un analizador).

Ghanima
fuente
5

Aquí escribí un artículo que muestra y la evolución del sistema de comunicaciones que teníamos en nuestro proyecto. Se trata de microservicios, pero puede considerar cualquier sensor como microservicio con su trabajo de recopilar y publicar cualquier tipo de datos de telemetría.

La conclusión más importante es que es mejor usar MQTT cuando solo necesita enviar un evento a algún lugar y no sabe nada sobre el destinatario. Y es mucho mejor usar HTTP (generalmente REST) ​​cuando sabes algo sobre el destinatario y necesitas alguna respuesta, por ejemplo, en el caso de comandos de lo que sea.

Desde el punto de vista del tráfico, la CPU, la memoria y el consumo de energía, MQTT y HTTP son básicamente los mismos.

shal
fuente
2

Con respecto a su presupuesto, MQTT es el "protocolo de Internet de las cosas":

Sí, hay una gran cantidad de desarrolladores que usan este protocolo (ver IoT Developer Survey 2018) pero CoAP (está ajustado a HTTP para IoT, basado en UDP) proporciona una alternativa para HTTP en caso de que desee utilizar una funcionalidad ligera de Solicitud / Respuesta dentro de su aplicación.

MQTT, por otro lado, proporciona una lógica incorporada de publicación / suscripción, lo que lo hace ideal para escalar (puede usar más puertas de enlace para una mayor cantidad de dispositivos). También hay una alternativa UDP (como CoAP a HTTP) que se llama MQTT-SN (MQTT para redes de sensores). Esto proporciona incluso una sobrecarga menor que CoAP, pero no hace uso de R / R.

Pepe Bellin
fuente