Configuración de Broker MQTT (Mosquitto) en servidor. Parte II
Comunicación de un PLC con el bróker MQTT
Para enviar datos desde un PLC a un gestor de datos como por ejemplo Node-RED, estos deben ser publicados por el PLC y suscritos por Node-RED, pero en todos los casos deben pasar por el broker MQTT (Mosquitto), que debe estar escuchando las conexiones entrantes desde la red local.
Para ello realizaremos las siguientes comprobaciones:
Comprobaremos el punto 4 de la primera parte de MQTT donde se explicaba
como realizar la prueba básica de funcionamiento
Esta configuración hace que Mosquitto escuche conexiones desde cualquier equipo de la red local, pero solo permitirá el acceso a aquellos que se autentiquen correctamente. Además, el uso de ACL limita qué temas puede publicar o leer cada usuario. Para evitar accesos desde fuera de la red, el firewall (ufw) bloqueará el puerto 1883 para direcciones externas.
En la terminal del servidor teclearemos lo siguiente:
sudo ss -tulnp | grep 1883
y esperaremos algo como esto: LISTEN 0 128 0.0.0.0:1883...
Si no aparece lo anterior, significará que Mosquitto solo acepta conexiones locales desde el propio servidor, y por tanto no acepta conexiones desde otra IP (como por ejemplo un PLC). La solución a esto es preparar un archivo de configuración para que Mosquitto escuche en todos los equipos que se encuentren en la misma red que el servidor, sin exponer el puerto 1883 (el de MQTT) de manera insegura.
sudo nano /etc/mosquitto/conf.d/seguridad.conf
en el archivo generado hay que copiar lo siguiente:
- listener 1883 0.0.0.0
- allow_anonymous false
- password_file /etc/mosquitto/passwd
- acl_file /etc/mosquitto/acl
Esto hará que nos pida un usuario y contraseña que añadiremos en el código de programación del PLC.
Como el archivo etc/mosquitto/passwd seguramente no existirá, lo que tendremos que hacer es crearlo de la siguiente manera:
sudo mosquitto_passwd -c /etc/mosquitto/passwd usuario1
(En usuario1 poner el usuario del PLC, por ejemplo plc21)
Por supuesto también habrá que crear el archivo /etc/mosquitto/acl con:
sudo nano /etc/mosquitto/acl
y añadir en el contenido del archivo:
- user plc21
- topic readwrite #
En la terminal del servidor teclearemos las siguientes instrucciones para comprobar que los archivos de contraseñas y ACL ya existen:
ls -l /etc/mosquitto/passwd
ls -l /etc/mosquitto/acl
Asignaremos los permisos correctos
sudo chown mosquitto: /etc/mosquitto/passwd /etc/mosquitto/acl
sudo chmod 600 /etc/mosquitto/passwd /etc/mosquitto/acl
Y reiniciaremos Mosquitto, verificando su estatus
sudo systemctl restart mosquitto
sudo systemctl status mosquitto
Una vez configurado, el usuario y contraseña que hemos introducido (en
nuestro caso tanto usuario como contraseña se llaman “plc21”), se introducirán
en el programa del PLC y en Node-RED.
Primera consulta sin compromiso.
Cuéntame qué equipo tienes y qué quieres controlar o medir.