MQTT | Parte 2
Broker VS cliente
Segunda entrada sobre MQTT, donde veremos como instalar el Broker y un cliente básico en consola.
Como siempre, asumo que las maquinas cliente y servidor tienen una distro Linux Debian o derivada. En la primera entrada sobre MQTT hice una introducción básica al protocolo, ahora me centraré en explicar un caso de uso básico.
Mi servidor es una Raspberry Pi (que raro), pero puede ser otro pc, o el mismo donde posteriormente instales también el cliente y así poder probar el funcionamiento.
1. Instalar el broker
Instalaremos en la máquina servidor el Broker Mosquitto
. Es uno de los más utilizados, está escrito en C y consume muy pocos recursos con un rendimiento muy bueno.
-
Para instalar Mosquitto
$ sudo apt update $ sudo apt install mosquitto
-
Crear usuario y contraseña
$ sudo mosquitto_passwd -c /etc/mosquitto/tuArchivoPass nombreUsuario
Cambia nombreUsuario
por el nombre que quieras darle, y tuArchivoPass
por el nombre que quieras para el archivo donde se guardaran los usuarios y sus contraseñas. Una vez ejecutado el comando se nos preguntara el password que queremos asignarle al nuevo usuario.
-
Si quieres añadir mas usuarios
$ sudo mosquitto_passwd -b /etc/mosquitto/tuArchivoPass nombreUsuario password
-
Para eliminar un usuario
$ sudo mosquitto_passwd -D /etc/mosquitto/tuArchivoPass nombreUsuario
2.1 Configuración
La configuración principal de Mosquito se encuentra en /etc/mosquitto/mosquitto.conf
. Tal como se recomienda, vamos a crear un fichero aparte para nuestra configuración.
-
Para crear el nuevo archivo
$ sudo nano /etc/mosquitto/conf.d/miConfiguracion.conf
Aquí añadiremos dos lineas, una indicando que no se permita la conexión a usuarios anónimos, y otra indicando donde tenemos el archivo que con tiene los usuarios y sus contraseñas.
allow_anonymous false password_file etc/mosquitto/tuArchivoPass
-
Reiniciar el servicio
$ sudo systemctl restart mosquitto
2.2 Configurar SSL
Adicionalmente, cosa que recomiendo, podemos cifrar
las comunicaciones entre Broker y clientes con un certificado SSL, en este caso usaré un certificado de firma propia generado con openssl
.
-
Creamos los directorios y el certificado
$ sudo mkdir /etc/ssl/mqtt $ cd /etc/ssl/mqtt $ sudo openssl req -new -x509 -days 365 -nodes -out ejemploMQTT.local.pem -keyout ejemploMQTT.local.key
Cambia
ejemploMQTT.local
por tu nombre de dominio, dejando las extensiones.pem
y.key
. En este ejemplo el certificado tendrá una validez de 365 días, si no quieres tener que generar uno nueva cada año, modifica-days XXX
sustituyendo XXX por el número de días que quieras.
Ahora vamos a indicar en nuestro archivo de configuración que escuche en el puerto seguro 8883
, limitando el puerto 1883
a localhost. Además indicaremos la ruta de nuestro certificado.
-
Abrir el archivo de configuración
$ sudo nano /etc/mosquitto/conf.d/miConfiguracion.conf
Añadimos lo siguiente:
listener 1883 localhost listener 8883 certfile /etc/ssl/mqtt/mqtt.example.local.pem keyfile /etc/ssl/mqtt/mqtt.example.local.key
-
Reiniciar el servicio
$ sudo systemctl restart mosquitto
3. Cliente
Podemos tener como clientes todo tipo de dispositivos, y como dije en el primer post un cliente puede tanto recibir como enviar mensajes a cualquier topic. Yo lo utilizo mucho con los ESP para proyectos Iot, pero ahora explicaré como utilizarlo de forma básica desde terminal, que al fin y al cabo es lo mismo.
-
Instalamos en la máquina cliente
$ sudo apt install mosquitto-clients
Una vez instalado, abre dos consolas en la máquina cliente. La idea para probar el sistema es publicar mensajes a un topic desde una consola, y verlos desde la otra, la cual estará suscrita al mismo topic.
-
Para suscribirse en la primera consola:
$ mosquitto_sub -v -h ipBroker -u tuUsuario -P tuContrasenha -p 8883 -t 'raspberry/topicTest'
Cambia
ipBroker
por la ip de la máquina donde tienes instalado Mosquitto Broker, así como el usuario y la contraseña por los tuyos.raspberry/topic1
es un topic de ejemplo, pon el que tu quieras. No cierras la consola, esta quedará a la escucha. -
Para publicar mensajes desde la segunda consola:
$ mosquitto_pub -h ipBroker -u tuusuario -P tuContrasenha -p 8883 -t 'raspberry/topicTest' -m 'Mensaje de prueba super cool'
Una vez se ejecute el comando, verás que la primera terminal recibe el mensaje, ¡magia!.
4. Topics
De forma resumida, podemos decir que los topics pueden ser como te de la real gana, lo importante es estructurarlos bien para tener un orden lógico en el entorno de uso.
Recordando el ejemplo del primer post:
Ya explique en el la lógica, puedes recordarlo AQUI, pero en la imagen podemos ver el servidor que tiene instalado el Broker, y tres clientes. En mi caso tengo el Broker instalado en la Raspberry Pi, pero en al práctica es lo mismo si está en una máquina independiente, o en una que haga tanto de cliente como de Broker.
Para suscribirnos a un topic determinado pondríamos el nombre del topic, en el ejemplo vemos que la Raspberry Pi está suscrita a dos.
Otras formas de suscribirnos:
- Indicando
'#'
como topic: nos suscribimos a todos los topics del broker. - Indicando
'luces/#'
como topic: nos suscribimos tanto aluces
como a todos los que sigan.
¡Prueba y prueba!, en otro post explicaré como conectarnos desde un Arduino en un caso de uso simple, o quizá desde un ESP8266 :D
Espero que sea útil, ¡gracias por leerme!
Comparte esta publicación
Twitter
Facebook
Reddit
LinkedIn
Pinterest
Email