fh4
Objetivos
Material requerido.
Una Raspberry Pi | |
Un PC |
Leyendo el SDS011 desde un PC
En la sesión previa vimos como instalar el servidor (O broker) Mosquitto en tu Raspberry PI. Pero esto solo era el principio, ahora toca configurarlo que es un tema un poco más confuso, porque el servidor Mosquitto dispone de poco menos que infinitos parámetros de configuración por lo que en esta sesión vamos a intentar montar una configuración sencilla que nos permita arrancar nuestro broker MQTT sin demasiadas complicaciones.
No vamos a entrar en muchos detalles (Por mi lamentable ignorancia) pero sí que buscaremos una configuración que nos permita abrir el puerto en cuestión 1883, típico de MQTT, y configurar un sistema básico de usuarios y contraseñas de modo que podamos limitar las conexiones a los que tengan usuario creado
Naturalmente también tendremos que ver cómo administrar usuarios (Altas, bajas y modificaciones) y algún que otro detalle como crear los ficheros de usuarios / passwords y… seguro que me dejo algo. Así que, sin más preámbulos, vamos al lio
Creando el fichero mosquitto.conf
Todo el comportamiento del Broker Mosquitto, se controla desde un fichero único llamado mosquitto.conf, que debe estar situado en el mismo directorio de instalación de Mosquitto, que si estás usando Raspberry y has seguido nuestro proveimiento para instalarlo, debería estar en
/etc/mosquitto que es donde el broker lo busca al arrancar:
Como ya os decía, hay un numero enorme de posibilidades para controlar nuestro broker MQTT, pero una guía extensa sobre el asunto excede con mucho nuestras posibilidades y desde luego mi capacidad, por lo que me limitaré a incluir aquí un listado de las líneas mínimas que os voy a recomendar incluir.
No pretendo más que limitar el acceso mediante usuario/contraseña y definir algunos ficheros instrumentales. Borra todo el contenido de tu fichero de configuración, mosquitto.conf, y copia estas líneas
listener 1883 allow_anonymous false log_dest file /etc/mosquitto/mosquitto.log password_file /etc/mosquitto/passwd
La primera línea (Listener 1883,) fija el puerto en el que el servidor MQTT va a escuchar las peticiones y la segunda línea deniega las conexiones anónimas. Las dos últimas líneas indican que el broker deber guardar registro de incidencias en el fichero indicado, mosquitto.log, y, por último, la más importante, un fichero de registro de los nombres de usuarios y contraseñas asignadas, para los usuarios registrados que desene usar el servidor
Nota: Si modificas el fichero de configuración, tienes que detener el servidor y volverlo a arrancar para que los cambios tengan efecto. Para ello hay 3 comandos de consola que te interesan:
Sudo systemctl status mosquitto Sudo systemctl stop mosquitto Sudo systemctl start mosquitto
El primero, status, nos informa de la situación del servidor, mientras que los otros dos comandos nos permiten detener y arrancar nuestro Mosquitto:
Detén el broker MQTT, edita tu fichero mosquitto.conf con tu editor favorito y pon las líneas que vimos más arriba.
cd /etc/mosquitto
mousepad mosquitto.conf.
Por último vuelve a arrancar tu broker con:
Sudo systemctl start mosquitto
Y ya está. Tu sistema permitirá que los usuarios registrados puedan conectar, y para eso tenemos que pasarnos a la parte de como definir usuarios.
Creando usuarios en mosquitto
Es bastante fácil. En principio la manera más sencilla de crear usuarios al principio es escribir un fichero de texto como este (Yo voy a usar una versión de Mosquitto en Windows , pero todo es lo mismo):
Es decir, simplemente escribes los nombres de usuario seguidos por “:” y luego la contraseña deseada. Antes de que me digas que menuda seguridad de mierda, ejecuta esto:
sudo mosquitto_passwd -U passw2.txt
Si ahora vuelves a editar el fichero passwd2.txt te llevarás una sorpresa porque Mosquitto ha encriptado las contraseñas almacenadas de modo que solo él pueda leerlas:
Recuerda que nuestro fichero mosquitto.conf tenía una línea que apuntaba al fichero de usuarios:
password_file /etc/mosquitto/passwd
Y que más te vale que coincida con el nombre de fichero que has puesto aquí arriba.
Si más adelante queremos añadir un usuario llamado Martin, podemos escribir:
sudo mosquito_passwd -c passwd martin
Donde después de la -c ponemos el nombre del fichero de contraseñas y luego el nombre del nuevo usuario. El comando nos reclamará una contraseña y confirmación de la misma:
También podemos añadir usuarios con su contraseña con el comando:
sudo mosquitto_passwd -b passwordfile user password
O eliminar usuarios con:
mosquitto_passwd -D passwordfile user
Como hemos cambiado los usuarios, tendremos que parar el broker y volverlo a arrancar para que coja los cambios del fichero de usuarios.
sudo systemctl stop mosquitto sudo systemctl start mosquitto sudo systemctl status mosquitto
Probando los cambios con MQTT explorer
Una vez que hemos configurado usuarios y un fichero de configuración funcional, solo nos queda probar los cambios y ver qué pasa. Ya vimos en la sesión previa, que podíamos suscribir un topic desde la línea de comandos con mosquitto_sub en una consola y con mosquitto_pub en otra.
Pero ahora tendremos una diferencia a la hora de publicar y suscribir y es que hemos implementado seguridad por usuario / contraseña y eso también podemos hacerlo en la lineal de comandos mediante:
mosquitto_sub -h 192.168.1.36 -u charly -P contrase -t “Prosensor/CO2” -v
La línea indica que buscamos el broker en la dirección IP especificada con el usuario (-u) “Charly” y contraseña (-P) “contrase” para suscribirnos al tópico (-t) “Prosensor/CO2”. Para suscribirnos en otra consola con user / pass podríamos hacer:
mosquitto_pub -d -h 192.168.1.36 -u charly -P contrase -t “Prosensor/CO2” -m "132"
Fíjate que para el password hemos usado “-P” en mayúsculas, porque el “-p” en minúsculas es para indicar el puerto: “-p 1883”; En la línea superior lo hemos omitido porque asumimos el puerto por defecto, pero si te equivocas en esto vas a tener muchos problemas difíciles de identificar.
Esto sería suficiente para ver que el servidor funciona, pero como me sobra sitio (Y está lloviendo sin parar) y para el futuro me interesa un sistema un poco más cómodo de conectar con los servidores MQTT, sin tener que escribir líneas de comandos, que nunca salen bien a la primera, vamos a presentar una utilidad encantadora llamada MQTT Explorer, que nos va a hacer la vida mucho más agradable.
Puedes descargarla de aquí: MQTT Explorer, hay clientes para Windows, Linux y Mac, pero yo voy a usar la versión Windows que es donde estoy cómodo. Una vez instalada puedes arrancarla y veras algo así:
Para conectarte a un servidor nuevo, debes pulsar en el símbolo “+” en rojo y entrarás en el menú de nueva conexión que puedes rellenar con los datos de tu Broker MQTT. En mi caso, la dirección IP del broker con el port 1883, más el usuario y la contraseña definida, que deberás rellenar con tus propios datos, claro. Pulsa el botón Connect y llegarás a:
Esta es la pantalla principal del MQTT Explorer donde puedes suscribir tópicos o publicar lo que necesites en el servidor en cuestión. Pero para suscribir tópicos necesitas alguien que esté publicando valores en ese tópico y lo más probable es que por ahora no tengas ningún publicador en marcha, por eso voy a hacer una pequeña trampa, que consiste en poner en marcha mi ESP32 publicando valores aleatorios entre 0 y 100 cada medio segundo, para tener una publicación en marcha y ver como conectarnos con el Explorer. En la próxima sesión veremos el programa Arduino que publica, pero de momento es lo que hay.
Al conectar a un broker veras algo parecido a esto:
Tienes la típica lista desplegable debajo del servidor donde al menos aparecerá el tópico SYS de sistema y en mi caso como mi ESP32 está publicando el topic “Prosensor/CO2” vemos la primera categoría Prosensor, con una flecha para desplegarla y al pulsar, veremos:
Es decir, se despliegan las categorías de segundo nivel, que en este caso solo hay una, pero podríamos tener “Prosensor/Temp” + “Prosensor/Humedad” por ejemplo, y un número a su derecha, que es cambiante en función del valor de los mensajes que van entrando (Ese número es el valor que publica el ESP32 y se actualiza instantáneamente. Es la forma de suscribir un valor concreto y verlo en pantalla)
Pero el MQTT Explorer tiene más trucos en la recamara. Pincha en el desplegable Value, donde indica la flecha amarilla:
Verás un desplegable en el que, en la línea verde, tienes el valor actual de la última publicación, y en la línea roja el número de mensajes publicados hasta la fecha.
Pulsa ahora en el simbolito de una línea, justo al principio de la línea verde y obtendrás un gráfico de los últimos valores publicados, que se va actualizando sobre la marcha:
El MQTT Explorer nos permite suscribir cualquier topic autorizado de nuestro Broker de una forma sencilla y elegante, evitándonos las temidas líneas de comandos imposibles de recordar. Os dejo aquí un pequeño mini video del autor con las posibilidades del MQTTExplorer
http://mqtt-explorer.com/video.mp4
En la próxima sesión veremos cómo usar nuestros Arduinos / ESP32 para conectar a la WIFI y publicar los valores que leamos de un sensor en nuestro Broker MQTT.