Introducción
Message Queuing Telemetry Transport o MQTT es un protocolo de red ligero de publicación-suscripción que transporta mensajes entre dispositivos.
MQTT se utiliza para el intercambio de datos entre dispositivos limitados y aplicaciones de servidor. Mantiene los requisitos de ancho de banda al mínimo absoluto, maneja redes poco fiables, requiere poco esfuerzo de implementación para los desarrolladores y es, por tanto, ideal para la comunicación máquina a máquina (M2M).
En este post, aprenderemos a crear un servidor Mosquitto y haremos una red MQTT para publicar y suscribirse a mensajes con múltiples PLC basados en Raspberry Pi.
Enlaces relacionados
¿Qué es MQTT y cómo funciona?
MQTT es un protocolo de publicación/suscripción que permite a los dispositivos del borde de la red publicar en un intermediario. Los clientes se conectan a este intermediario, que media la comunicación entre los dispositivos. Cuando otro cliente publica un mensaje en un tema suscrito, el broker reenvía el mensaje a cualquier cliente que se haya suscrito.

¿Y cómo pueden los dispositivos suscribirse a un mensaje? Pueden hacerlo con los temas.
En MQTT, la palabra topic (temas)se refiere a una cadena UTF-8 que el broker utiliza para filtrar los mensajes de cada cliente conectado. El tema se compone de uno o más niveles de tema. Cada nivel de tema está separado por una barra diagonal (separador de nivel de tema). En comparación con una cola de mensajes, los temas MQTT son muy ligeros.
Con el ejemplo de la imagen anterior, sólo el dispositivo que se suscribe a un tema específico, recibirá el mensaje de ese tema.

- En este ejemplo, el sensor de temperatura publicaría el tema "dormitorio/temp" y sólo el dispositivo 2 suscrito a ese tema recibiría el mensaje.
- El sensor de humedad publicaría el tema "dormitorio/humedad" y sólo el dispositivo 1 suscrito a ese tema recibiría el mensaje.
- Y el dispositivo número 3 suscrito al tema cocina/temp, no recibiría ningún mensaje.
MQTT-Broker
Para configurar un MQTT-Broker, sigamos los siguientes pasos:
1. Comprueba tu modelo Raspbian:
lsb_release -a
2. Descárgate el repositorio:
sudo apt-key add mosquitto-repo.gpg.keycd /etc/apt/sources.list.d/
3. Selecciona el repositorio para la versión de tu Raspbian. En nuestro caso sería la versión Buster. Copia y pega solo la línea que corresponda con tu Raspbian:
sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.listsudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.listsudo wget http://repo.mosquitto.org/debian/mosquitto-stretch.listsudo wget http://repo.mosquitto.org/debian/mosquitto-buster.list
Instala Mosquitto
Instalar Mosquitto en las principales distribuciones de Linux es igual de fácil, ya que la mayoría lo tienen incorporado en sus repositorios. Es el caso de Ubuntu, Debian o Raspbian (Raspberry Pi). Así que sólo tenemos que ejecutar los comandos.
sudo apt updatesudo apt upgradesudo apt-get install mosquitto mosquitto-clients
Si queremos ejecutar Mosquitto cuando se inicie el sistema, ejecuta el siguiente comando:
sudo systemctl enable mosquitto.service
Provando MQTT
Ahora vamos a publicar y suscribir un tema para comprobar que la instalación se ha realizado correctamente.
Para ello, Mosquitto proporciona dos utilidades 'mosquitto_sub' y 'mosquitto_pub', una para suscribir y otra para publicar.
Conectado a nuestro controlador industrial Raspberry Pi PLC, vamos a comprobar las direcciones IP:
ifconfig

Vamos a configurar el MQTT-Broker a uno de los PLC de código abierto Raspberry Pi con la dirección IP 192.168.1.4. Los otros serán los clientes Mosquitto.
Desde el PLC industrial Raspberry Pi número 2, por ejemplo, suscríbase al tema hello/world.
mosquitto_sub -d -h 192.168.1.4 -p 1883 -t "hello/world"
Desde el PLC industrial Raspberry número 1, por lo que el MQTT-broker, publicar un mensaje:
mosquitto_pub -d -h localhost -p 1883 -t "hello/world" -m "Alarm"
Finalmente, podrás obtener el mensaje del PLC que se ha suscrito al tema:
Solución de problemas
Si no puedes suscribirte al editor con un mensaje "Error: Connection refused", puedes añadir las siguientes líneas al archivo /etc/mosquitto/mosquitto.conf :
allow_anonymous true
listener 1883 0.0.0.0
Cómo instalar Mosquitto: el MQTT-Broker en Raspberry PLC