Mosquitto es un MQTT broker fácil de configurar, además incluye un módulo de Python para interactuar con él. Instalado en una Raspberry Pi o en nuestro servidor puede convertirse en centro de nuestro sistema de control.
Puede instalarse de muchas formas, en algunos casos desde el repositorio de nuestro sistema operativo con:
~$ apt-get install mosquitto mosquitto-clients
Que además de instalar el broker instalará los clientes mosquitto_pub y mosquitto_sub.
En el caso de no estar disponible en el repositorio siempre puede compilar e instalar. El código fuente puede descargarse de la página de Mosquitto o del su repositorio. Para compilarlo son necesarias las dependencias build-essential, libwrap0-dev, libssl-dev, libc-ares-dev, uuid-dev y xsltproc.
~$ apt-get install build-essential libwrap0-dev libssl-dev libc-ares-dev uuid-dev xsltproc
El proceso para instalar desde el código fuente es:
~$ wget http://mosquitto.org/files/source/
~$ mosquitto-1.4.10.tar.gz
~$ tar xvzf mosquitto-1.4.10.tar.gz
~$ cd mosquitto-1.4.10
~$ make
~$ make install
Una vez instalado Mosquitto lo configuraremos. Lo primero será crear un nuevo usuario para el servicio (en el caso de haberlo instalado desde los repositorios este paso no es necesario):
~$ adduser mosquitto
Creamos un directorio en /var/lib/mosquitto para los archivos permanentes del servicio (en el caso de haberlo instalado desde los repositorios este paso no es necesario):
~$ mkdir /var/lib/mosquitto
Copiamos la plantilla del archivo de configuración de Mosquitto para nuestro servicio:
~$ cp /etc/mosquitto/mosquitto.con.example /etc/mosquitto/mosquitto.conf
Y substituimos el contenido con la siquiente configuración (que es la mía y la más mejor):
pid_file /var/run/mosquitto.pid
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d
listener 1883
persistence true
persistence_location /var/lib/mosquitto/
persistence_file mosquitto.db
log_dest syslog
log_dest stdout
log_dest topic
log_type error
log_type warning
log_type notice
log_type information
connection_messages true
log_timestamp true
allow_anonymous false
password_file /etc/mosquitto/pwfile
Guardamos el archivo y comprobamos que la configuración es correcta con:
~$ mosquitto -c /etc/mosquitto/mosquitto.conf
Reinciamos el servicio con:
~$ service mosquitto restart
Ya que en el archivo de configuración hemos determinado que rechace las conexiones anónimas con allow_anonymous false tenemos que añadir un usuario y contraseña para cada cliente o grupo de clientes, se hace con:
~$ mosquitto_passwd -c /etc/mosquitto/pwfile [nombre]
Y con esto estaría listo nuestro broker. Para probarlo puede usarse cualquier cliente MQTT, por ejemplo los propios de Mosquitto. Para subscribirse a un canal se utiliza el comando mosquitto_sub:
~$ mosquitto_sub -h [servidor] -p 1883 -t [canal] -u [usuario] -P [contraseña]
Para publicar el comando mosuqitto_pub:
~$ mosquitto_pub -h [servidor] -p 1883 -t [canal] -u [usuario] -P [contraseña] -m [mensaje]
En el próximo artículo explico como asegurar el broker MQTT con TLS y como conectarse utilizando el certificado.