Laboratorio de mensajería MQTT: cómo hablan los dispositivos con un intermediario, en el navegador

Este laboratorio da a cada estudiante un intermediario MQTT propio y unos sensores inventados que publican en él. Una casa envía una lectura por segundo: la temperatura y la humedad del salón, la temperatura de la cocina y si la puerta está abierta o cerrada. El estudiantado las escucha desde el terminal y escribe un mensaje propio.

No es un laboratorio de ataque. Cada copia no tiene ninguna ruta hacia internet ni hacia otro estudiante, así que no se puede descargar nada en ella y nada de lo que hay dentro puede llegar a otra persona. Tampoco es el aspecto de una instalación real: los dispositivos reales se conectan a través de una red, con identificación y una conexión cifrada, y este laboratorio deja ambas fuera para que lo primero que se aprenda sea la propia mensajería.

Qué aprende el alumnado

Cómo un intermediario separa a los dispositivos de quienes los usan: un sensor publica un mensaje con un tema, el intermediario lo reenvía a todos los suscritos a ese tema, y ninguna de las dos partes conoce a la otra. El estudiantado lee todos los temas bajo home con el comodín #, solo las temperaturas con el comodín +, y comprueba que un mensaje retenido, el estado de la puerta, se entrega al instante a un suscriptor nuevo, mientras que la humedad, que no está retenida, tiene que esperar a la lectura siguiente. Después publican un mensaje retenido propio y lo leen de vuelta. Encaja en introducciones a internet de las cosas, a redes y a sistemas distribuidos; comprueba la redacción exacta en la unidad de tu propio organismo, aquí no se cita ninguna.

Ejecútalo en tu navegador

El laboratorio arranca dos servicios con la misma imagen pública estándar: broker, el intermediario MQTT, y sensors, un bucle que publica cuatro lecturas por segundo en cuanto el intermediario está listo. No hay página web, así que la barra del laboratorio no tiene enlace bajo «En tu navegador», y el terminal es la forma de escuchar. Llega a las herramientas del intermediario con docker exec broker, seguido de la orden, y cada orden de escucha termina con las opciones -C, cuántos mensajes, y -W, cuántos segundos, para que siempre acabe. Las lecturas salen de un ciclo fijo de números enteros, pero en qué punto del ciclo estás depende del momento en que pulsas Ejecutar, así que dos estudiantes ven números distintos.

  1. Abre la página Contenedor. Abre «Crear» en la barra y elige «Ejecutar un contenedor». Cualquiera puede abrir la página, y el laboratorio de Git y el de SQL se inician sin cuenta. Todos los demás laboratorios necesitan una cuenta gratuita: crea una, inicia sesión y pulsa «Iniciar».
  2. Busca el laboratorio. La tarjeta «Laboratorios de ejemplo» lista todos los ejemplos. Busca MQTT: cómo hablan los dispositivos con un intermediario.
  3. Pulsa «Iniciar». «Iniciar» lo ejecuta tal cual, con una sola pulsación. «Editar el archivo primero» abre el archivo compose para que lo cambies antes de iniciarlo.
  4. Ábrelo. No hay página web que abrir. En la página del laboratorio pulsa «Abrir terminal» y escribe docker exec broker mosquitto_sub -t 'home/#' -v -C 8 -W 10 para oír ocho mensajes: cada línea es un tema, un espacio y un valor.

Qué pedir que entreguen

Las órdenes que ejecutaron y lo que imprimió cada una: una que lea todos los temas bajo home, una que lea solo las temperaturas con un comodín, una que lea el estado retenido de la puerta, y un mensaje propio publicado con -r y leído de vuelta. Después una o dos frases con sus palabras sobre para qué sirve un mensaje retenido y por qué la puerta respondió al instante y la humedad no. Nada se corrige automáticamente: la frase muestra si se entendió. Para un trabajo más sólido, pide qué necesitaría un dispositivo real que este laboratorio deja fuera.

Una lección básica en este laboratorio

IoT Messaging Basics es una lección pequeña que se trabaja en este laboratorio. En ella el estudiante escucha todos los temas con un comodín, lo reduce a las temperaturas, compara un mensaje retenido con uno que no lo es, y publica un mensaje propio y lo lee de vuelta.

Las cuentas personales gratuitas la tienen en el módulo Basics, que está en Inicio, y cada centro puede copiarla desde la carpeta Basics de la Biblioteca. Es pequeña a propósito: muestra a un docente qué es una lección trabajada en un laboratorio, y el laboratorio hace el resto. Cópiala en un módulo tuyo para cambiarla.

El código en GitHub

El archivo compose no tiene Dockerfile: ejecuta dos veces una sola imagen pública estándar, el intermediario Eclipse Mosquitto, fijada a una versión mayor, con una cuenta sin privilegios y 64 MB de memoria cada una. La imagen tiene licencia Eclipse Public License y Eclipse Distribution License y nosotros no la distribuimos. El archivo escribe la pequeña configuración del intermediario al arrancar, con una escucha en el puerto 1883 y el acceso anónimo permitido, y los sensores son un bucle de shell con valores fijos, así que no se descarga nada. Los límites son honestos: no hay identificación ni cifrado, nada se conserva cuando el laboratorio se detiene, y los sensores son inventados, así que no se muestra el comportamiento de un dispositivo real, como perder la conexión.

Asignarlo como trabajo

Indica en la tarea qué hay que entregar.

  1. Crea el laboratorio. En tu módulo añade una tarea y elige la tarjeta «Laboratorio de contenedores», y después «En un repositorio de GitHub». Indica https://github.com/mitsurutech/lab-iot-mqtt con la rama main. El archivo compose es el predeterminado, compose.yaml. Haz un fork del repositorio antes si quieres modificarlo, por ejemplo para añadir más sensores.
  2. Publica y pruébalo. «Publicar» fija el commit que te mostraron, así que un cambio posterior en el repositorio no altera un laboratorio que ya has asignado. Inicia primero tu propia copia.
  3. Asígnalo. Asígnalo como cualquier tarea, con una fecha de entrega si quieres, e indica en la tarea qué hacer y qué entregar.
  4. Califica lo entregado. Abre la copia de un alumno y el trabajo que ha entregado, califícalo y devuélvelo con un motivo si necesita más.

Prueba este laboratorio, y lo que cuesta

Con una cuenta personal gratuita puedes seguir las lecciones básicas de este laboratorio, con crédito gratuito suficiente cada mes para seguir la mayoría de las lecciones y sin tarjeta. Para una clase, un centro tiene gratis sus primeros 365 días, hasta 50 alumnos, y después paga por alumno y año, con todos los laboratorios incluidos y el profesorado gratis.

Preguntas frecuentes

¿Por qué el intermediario deja entrar a cualquiera sin contraseña?
El intermediario del laboratorio solo es accesible desde dentro de tu copia, y la copia no tiene salida a internet, así que nadie más puede conectarse. Es la única razón por la que es seguro. Un intermediario real necesita identificación y una conexión cifrada, y nunca debes montar uno como lo hace este laboratorio.
¿Por qué los números que veo son distintos de los de la lección?
Los sensores siguen un ciclo fijo que nunca se detiene, así que los mismos pocos valores vuelven una y otra vez, pero el punto del ciclo en que estás al pulsar Ejecutar depende del momento. La forma de cada respuesta es siempre la misma: los mismos temas, números enteros y una puerta abierta o cerrada. La única línea exacta es tu propio mensaje leído de vuelta.
¿Puede el estudiantado añadir sus propios sensores o dispositivos?
Sí: desde el terminal, docker exec broker mosquitto_pub publica un mensaje en el tema que quieran. Para cambiar los sensores en sí, haz un fork del repositorio, cambia el bucle de shell del archivo compose y asigna el fork como laboratorio.