Como fazer o corretor Raspberry Pi MQTT

Cómo hacer un broker Raspberry Pi MQTT

MQTT (Message Queuing Telemetry Transport) es un protocolo de mensajería simple que se utiliza a menudo en aplicaciones de IoT. El protocolo se basa en un sistema de publicación-suscripción donde ambos tipos de dispositivos que publican y se suscriben a mensajes MQTT se denominan clientes MQTT. El intercambio de mensajes entre editores y suscriptores se realiza con la ayuda de un broker, que debe estar ejecutándose en un dispositivo informático que debe permanecer activo por un período de tiempo indefinido.

En grandes proyectos de IoT, a menudo se asigna un sistema o servicio en la nube como intermediario MQTT. Los servicios en la nube tienen casi un 100% de disponibilidad y se puede acceder a ellos desde cualquier lugar. Por lo tanto, los corredores MQTT basados ​​en la nube pueden conectar a los editores y suscriptores de MQTT en todo el mundo. Para proyectos de IoT locales o de pequeña escala, como la automatización del hogar o la automatización industrial, los servicios en la nube para los corredores MQTT son más que suficientes, pero no son rentables. Para este tipo de aplicaciones, resulta mucho más económico utilizar microordenadores o ordenadores de placa única. Microcomputadoras como la Raspberry Pi se pueden conectar todo el tiempo con bajo consumo de energía y costos operativos. Estas microcomputadoras pueden conectarse fácilmente a redes WiFi, facilitando una red IoT que abarca una red de área amplia (WAN). Incluso las redes WiFi utilizadas por los intermediarios de microcomputadoras se pueden ampliar fácilmente utilizando repetidores WiFi o puntos de acceso cuando sea necesario. Con muchos corredores MQTT, aún es posible conectarse con clientes MQTT en todo el mundo, incluso si el corredor está instalado en una computadora personal.

En este artículo, discutiremos el papel de un corredor en el sistema de publicación-suscripción MQTT y discutiremos cómo se puede configurar una Raspberry Pi como un corredor MQTT.

¿Qué es el protocolo MQTT?
MQTT) es un protocolo de mensajería diseñado para conexiones a Internet de bajo ancho de banda, adecuado para intercambiar datos entre dispositivos restringidos, como los que suelen implementarse en redes de IoT. El protocolo permite la comunicación de datos a múltiples dispositivos simultáneamente. Además, varios dispositivos pueden transmitir datos al mismo tiempo.

MQTT es completamente diferente de los protocolos típicos de Internet, en los que los datos a menudo se comunican de igual a igual en un modelo cliente-servidor. En cambio, MQTT sigue un sistema de publicación-suscripción. En MQTT, tanto los tipos de dispositivos que transmiten datos como los que reciben datos son clientes MQTT. Los clientes pueden publicar datos sobre un tema específico y recibir datos sobre un tema específico. En caso contrario, es posible que solo estén publicando datos sobre temas específicos o recibiendo datos sobre temas suscritos. Incluso un dispositivo puede publicar y suscribirse a mensajes sobre el mismo tema. Los datos MQTT publicados o recibidos por un cliente MQTT siempre están en el contexto de un tema específico. El corredor MQTT define los temas y gestiona toda la comunicación de datos entre los clientes MQTT.

Como funciona
El sistema de publicación y suscripción de MQTT a través del cual el corredor MQTT define temas específicos. Los temas están representados por cadenas separadas por una barra que sirve para separar los niveles de los temas. El siguiente es un tema de ejemplo válido para un sistema de automatización del hogar.
casa/habitación1/ventilador

La cadena 'casa/dormitorio1/ventilador' es específica del tema. Las cadenas 'hogar', 'dormitorio1' y 'fan' son niveles de tema diferentes. La barra diagonal es el separador de nivel de tema. Los dispositivos/clientes MQTT que necesitan publicar mensajes/datos relacionados con un tema se registran como editores para el tema específico en el broker MQTT. Los dispositivos/clientes MQTT deben recibir mensajes/datos relacionados con un tema y registrarse como suscriptores del tema específico con el broker MQTT. Por ejemplo, un control remoto o dispositivo móvil utilizado para controlar el ventilador se registrará como editor en el tema "casa/habitación1/ventilador". Mientras que un dispositivo que controla el regulador del ventilador quedará registrado como suscriptor del tema 'casa/dormitorio1/ventilador'. Siempre que el editor (control remoto) transmita un mensaje relacionado con el tema, el corredor MQTT lo reenviará al suscriptor (circuito regulador del ventilador). El editor puede firmar mensajes como "activado", "apagado" o niveles de velocidad como "1", "2", "3", etc. para controlar el ventilador.

Es importante tener en cuenta que los temas distinguen entre mayúsculas y minúsculas. Un tema ' casa/dormitorio1/ventilador ' es diferente de ' Hogar/dormitorio1/ventilador ' o ' hogar/dormitorio1/Ventilador ' y así sucesivamente. A menudo, en pequeñas redes IoT como la domótica, se configuran como editores placas de desarrollo WiFi como ESP8266, ESP32 o plataformas de control de automatización específicas.

Los mensajes son datos textuales comunicados sobre temas específicos y pueden contener datos de nodos sensores o comandos de un dispositivo de control. Los dispositivos que necesitan transmitir datos de sensores a través de la red IoT o aquellos que necesitan comunicar comandos de control siempre se registran como editores. Los clientes MQTT que necesitan actuar sobre datos de sensores remotos o comandos remotos se registran como suscriptores.

Como ya se mencionó, un dispositivo o cliente MQTT puede publicar y suscribirse. Sin embargo, un dispositivo también puede publicar y suscribirse al mismo tema. El caso puede ser que un dispositivo esté publicando mensajes sobre ciertos temas y se haya suscrito para recibir datos sobre otros temas. Todo esto depende de la naturaleza de la aplicación.

Se pueden definir algunos temas para que muchos clientes MQTT puedan suscribirse a ellos. En este caso, cuando se publica el mensaje relacionado con ese tema, es recibido por todos los suscriptores. Por ejemplo, en una casa inteligente, puede haber relojes inteligentes en cada habitación. Un cliente MQTT específico puede publicar mensajes sobre temas como "fecha-hora", "temperatura" y "humedad". Todos los relojes inteligentes pueden suscribirse a estos temas y recibir mensajes sobre ellos simultáneamente.

Todos los mensajes entre clientes MQTT son administrados por un corredor MQTT, que puede ejecutarse en una computadora personal o en una plataforma en la nube. Los brokers MQTT que se ejecutan en microcomputadoras son incluso capaces de comunicar mensajes a dispositivos IoT que no forman parte de la red local a través de Internet. Una de las cosas importantes para un corredor MQTT es que debe tener un tiempo de actividad del 100% porque los clientes MQTT pueden publicar datos en cualquier momento y pueden necesitar datos sobre temas suscritos en cualquier momento.

Aplicaciones del protocolo MQTT
Curiosamente, MQTT comenzó como un protocolo propietario de IBM para comunicarse con sistemas SCADA en la industria del petróleo y el gas. Posteriormente se convirtió en un protocolo de código abierto mantenido por la Organización para el Avance de los Estándares de Información Estructurada (OASIS). Actualmente, algunas de las aplicaciones notables del protocolo MQTT incluyen la automatización del hogar, la medición inteligente, la teledetección, la agricultura inteligente y la IoT portátil. Incluso Meta utiliza el protocolo MQTT para sus chats de Facebook Messenger e Instagram.

Corredores MQTT
En un sistema de publicación-suscripción MQTT, el corredor actúa como servidor para los clientes MQTT. El corredor es responsable de recibir mensajes publicados por clientes MQTT, filtrar los mensajes, descubrir suscriptores y comunicar mensajes a los clientes MQTT suscritos. Los corredores MQTT son básicamente programas de servidor diseñados para gestionar la comunicación MQTT. Algunos de los mejores corredores MQTT incluyen Mosquitto, Cassandana, Hive MQ, EMQ Fly Pulse.

Preparando Raspberry Pi para el corredor MQTT
Raspberry Pi es una excelente opción para instalar un corredor MQTT. Esta computadora de placa única puede permanecer encendida todo el tiempo sin ningún problema, al igual que un módem o enrutador permanece encendido todo el tiempo. La tarjeta consume muy poca energía y puede continuar ejecutando de manera confiable una aplicación de alta gama sin fallas. La placa también se puede conectar fácilmente a una pantalla para solucionar problemas o como interfaz gráfica de usuario para una aplicación de IoT.

En primer lugar, debe configurar su Raspberry Pi e instalar Raspbian en la placa, configurándolo como un sistema de escritorio. Consulta este tutorial para instalar Raspbian y preparar tu Raspberry Pi. El broker MQTT que instalaremos en la Raspberry Pi es Mosquitto.

Instalación de Mosquitto Broker en Raspberry Pi
Después de preparar la Raspberry Pi con Raspbian instalado, puede instalar el broker MQTT en ella. Abra la ventana de la terminal navegando a Accesorios->Terminal o haciendo clic en el icono de Terminal. Ejecute el siguiente comando para actualizar el sistema.
actualización sudo apta

Actualización de frambuesa Pi

Después de actualizar Raspberry Pi, actualice el sistema ejecutando el siguiente comando.
actualización sudo apta

Actualización de frambuesa Pi

Presione Y y Enter cuando se le solicite descargar paquetes. Actualizar su Raspberry Pi tardará entre 10 y 20 minutos. Ahora instale Mosquitto Broker ejecutando el siguiente comando.
sudo apt install -y mosquito mosquito-clientes

Instalación de Mosquitto Broker y Mosquitto Client en Raspberry Pi

Verifique su instalación de Mosquitto ejecutando el siguiente comando. El comando devolverá la versión de la instalación de Mosquitto.
mosquito -v

Probando la versión Mosquitto en Raspberry Pi

Puede hacer que Mosquitto Broker se ejecute al inicio ejecutando el siguiente comando.
sudo systemctl habilitar mosquito.service

Habilitar el acceso remoto en Raspberry Pi
Los clientes MQTT no pueden comunicarse con Mosquitto Broker en Raspberry Pi hasta que se habilite el acceso remoto en la computadora personal. En Mosquitto 2.0 y versiones posteriores, debe elegir explícitamente las opciones de autenticación antes de conectar clientes MQTT. En versiones anteriores, los clientes se conectan al intermediario de forma predeterminada sin autenticación.

Para habilitar el acceso remoto, necesita crear o editar un archivo de configuración. Para abrir el archivo de configuración de Mosquitto mosquitto.conf en nano editor, ejecute el siguiente comando en la Terminal.
sudo nanoetc/mosquitto/mosquitto.conf

Editando mosquitto.conf en Raspberry Pi para permitir el acceso remoto

Esto abrirá mosquitto.conf en nano editor como se muestra en la imagen a continuación.

Editando mosquitto.conf en Raspberry Pi para permitir el acceso remoto

Vaya al final del archivo usando las teclas de flecha y escriba las siguientes líneas.
oyente 1883
permitir_anonymous verdadero

Cierre el archivo presionando Ctrl + X y guarde los cambios presionando Y y Enter.

Editando mosquitto.conf en Raspberry Pi para permitir el acceso remoto

Después de guardar el archivo, reinicie Mosquitto Broker ejecutando el siguiente comando en la Terminal para que los cambios en el archivo mosquitto.conf surtan efecto.
sudo systemctl reiniciar mosquito

Reiniciar Mosquitto Broker

Habilitar la autenticación en el corredor MQTT
Para agregar autenticación de usuario/contraseña a Mosquitto Broker, ejecute el siguiente comando en la Terminal.
sudo mosquitto_passwd -c /etc/mosquitto/passwd NOMBRE DE USUARIO

Tenga en cuenta que deberá reemplazar 'NOMBRE DE USUARIO' con el nombre de usuario que desee. Cuando presione Enter, se le pedirá que cree un nombre de usuario e ingrese una contraseña. Al ingresar la contraseña, no se mostrarán caracteres. Se le pedirá que vuelva a ingresar su contraseña. Ingrese la misma contraseña nuevamente y presione Enter. Nuevamente, no se mostrará ningún carácter al ingresar la contraseña. Se creará un archivo de contraseña passwd en el directorio /etc/mosquitto.

Ahora, para permitir la autenticación con este nombre de usuario y contraseña, debe modificar el archivo mosquitto.conf. Abra el archivo mosquitto.conf en nano editor ejecutando el siguiente comando en la Terminal.
sudo nano /etc/mosquitto/mosquitto.conf

Agregue las siguientes líneas al principio del archivo.
per_listener_settings verdadero

Las líneas anteriores deben agregarse en la parte superior del archivo. En caso contrario, estas líneas no tendrán ningún efecto. Luego agregue las siguientes líneas al final del archivo.
permitir_anonimo falso
oyente 1883
archivo_contraseña /etc/mosquitto/passwd

Si el archivo mosquitto.conf se editó previamente para acceso remoto sin autenticación, elimine las siguientes líneas antes de agregar las líneas mencionadas anteriormente.
oyente 1883
permitir_anonymous verdadero

El archivo mosquitto.conf se verá como el que se muestra en la imagen a continuación después de editarlo.

Editando mosquitto.conf en Raspberry Pi para habilitar la autenticación Cierre el archivo presionando Ctrl + X y guarde los cambios presionando Y y Enter. Después de guardar el archivo, reinicie Mosquitto Broker ejecutando el siguiente comando en la Terminal para que los cambios en el archivo mosquitto.conf surtan efecto.
sudo systemctl reiniciar mosquito

Una vez habilitada la autenticación de nombre de usuario y contraseña, cualquier cliente MQTT que desee comunicarse con el Broker MQTT deberá proporcionarlos para la autenticación.

Puede cambiar la contraseña de su nombre de usuario existente ejecutando el siguiente comando en la Terminal.
mosquito_contraseña

Por ejemplo, ejecute el siguiente comando para cambiar la contraseña del nombre de usuario creado con el archivo passwd. Reemplace USERNAME con su propio nombre de usuario.
sudo mosquitto_passwd /etc/mosquitto/passwd NOMBRE DE USUARIO

Se le pedirá que ingrese una nueva contraseña. No se mostrarán caracteres mientras ingresa la contraseña. Después de ingresar la contraseña deseada, presione Enter. Ahora se le pedirá que vuelva a ingresar la contraseña. Ingrese la misma contraseña y presione Enter. Nuevamente, no se mostrará ningún carácter al ingresar la contraseña.

Después de crear un nombre de usuario, para agregar más nombre de usuario y contraseña, ejecute el siguiente comando en la Terminal con un archivo de contraseña diferente.
mosquito_contraseña

Por ejemplo, puede crear otro archivo de contraseña passwd2 de la siguiente manera.
sudo mosquitto_passwd /etc/mosquitto/passwd2 NOMBRE DE USUARIO

Tenga en cuenta que debe reemplazar USERNAME con su propio nombre de usuario en el comando anterior. Puede configurar Mosquitto Broker para usar el nuevo nombre de usuario y contraseña modificando mosquitto.conf y agregando la siguiente línea al final del archivo.
archivo_contraseña /etc/mosquitto/passwd2

Editando mosquitto.conf en Raspberry Pi para agregar más contraseñas de usuario

Accediendo a Raspberry Pi a través de WLAN
Además del nombre de usuario y la contraseña (si la autenticación está habilitada), los clientes MQTT necesitan conocer la dirección IP de Raspberry Pi para conectarse al corredor. La dirección IP de Raspberry Pi se puede encontrar ejecutando el siguiente comando en la Terminal.
nombre de host -I

Esto devolverá direcciones IPv4 e IPv6. La primera dirección devuelta es la dirección IPv4. Solo se puede encontrar la dirección IPv4 ejecutando el siguiente comando en la Terminal.
nombre de host -i

Probando el broker Mosquitto en Raspberry Pi
El propio corredor también puede publicar mensajes. Por lo tanto, si el cliente Mosquitto también está instalado en Raspberry Pi, resulta útil probar Mosquitto Broker en Raspberry Pi. Ya habíamos instalado el cliente Mosquitto ejecutando el siguiente comando en Terminal.
sudo apt install -y mosquito mosquito-clientes

En primer lugar, debe ejecutar Mosquitto Broker en segundo plano ejecutando el siguiente comando en la Terminal.
mosquito -d

Ahora podemos suscribir un tema de prueba al cliente Mosquitto ejecutando el siguiente comando en la Terminal.
mosquito_sub -d -t pruebaTema

Suscríbete al tema MQTT sobre Raspberry Pi

Suscríbete al tema MQTT sobre Raspberry Pi A continuación, abra una nueva ventana de Terminal y ejecute el siguiente comando en la nueva ventana para publicar un mensaje sobre el tema de prueba.
mosquitto_pub -d -t testTopic -m “¡Bienvenido al protocolo MQTT!”

Si Mosquitto Broker se instala correctamente, puede notar que está recibiendo el mensaje publicado, como se muestra en la imagen a continuación.

Publicar mensajes para clientes MQTT en Raspberry Pi

Como también instalamos el cliente Mosquitto en Raspberry Pi, podemos recibir un mensaje publicado tanto en el broker como en el cliente MQTT. Abra otra ventana de Terminal y ejecute un cliente Mosquitto ejecutando el siguiente comando en esa ventana.
mosquito_sub -d -t pruebaTema

Ahora vuelva a publicar un mensaje nuevo ejecutando el siguiente comando en la segunda ventana de Terminal.
mosquitto_pub -d -t testTopic -m “otro mensaje”

Puede ver que tanto el corredor como el cliente a través del corredor reciben el mensaje, como se muestra en la imagen a continuación.

Cliente MQTT recibiendo mensajes en Raspberry Pi

Conclusión
El corredor MQTT actúa como servidor en el sistema de publicación-suscripción MQTT y es responsable de comunicar mensajes entre clientes MQTT. Es bastante conveniente utilizar Raspberry Pi como intermediario MQTT en sistemas IoT de pequeña escala, como domótica, ofimática o automatización industrial. Los corredores MQTT como Mosquitto se pueden instalar y configurar fácilmente en Raspberry Pi. La Raspberry Pi puede permanecer encendida indefinidamente, por lo que los clientes MQTT conectados a través de ella pueden comunicarse en cualquier momento. Dado que también podemos instalar el cliente Mosquitto en Raspberry Pi junto con Mosquitto Broker, probar el broker es muy sencillo y no requiere que otros dispositivos como ESP8266, ESP32 o Arduino se conecten como cliente MQTT.

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.