¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Fundamentos de mensajería IoT

Aquí está la lección completa para leer. Crea una cuenta gratuita para practicarla en un laboratorio en vivo.

Laboratorio de contenedores11 min de lectura6 comandos

¿Cómo avisa un sensor a un móvil?

Un sensor de puerta, un termómetro y tu móvil son tres aparatos distintos. El sensor no debería necesitar saber que tu móvil existe, y el móvil no debería tener que preguntar sin parar. Un pequeño sistema de mensajería llamado MQTT lo resuelve: los aparatos dejan sus mensajes en un intermediario y quien esté interesado los recoge.

Al final de esta lección

Nota

Puedo leer los mensajes que unos dispositivos publican en un intermediario MQTT, usando temas.

Palabras clave

  • Intermediario (broker): el que recibe cada mensaje y lo reenvía.
  • Publicar: enviar un mensaje al intermediario, con un tema como etiqueta.
  • Suscribirse: decirle al intermediario qué temas quieres oír.
  • Tema (topic): la etiqueta de un mensaje, escrita como una ruta, por ejemplo home/door/state.
  • Mensaje retenido (retained): el último mensaje de un tema, que el intermediario guarda y entrega a quien se suscriba después.
  • Comodín (wildcard): un símbolo de una suscripción que coincide con más de un tema.

Para empezar: lo que ya sabes

Nota

Responde mentalmente. 1. ¿De qué se compone la ruta /home/kim/notes.txt? 2. Si echas una carta al buzón, ¿necesitas saber quién la va a leer? 3. ¿Qué representa el * de *.txt cuando listas archivos? Volverás a encontrarte las tres ideas en esta lección. Respuestas: nombres de carpetas y un archivo, separados por barras; no, solo necesitas la dirección; cualquier carácter.

Antes de empezar

Nota

Pulsa Iniciar el laboratorio en la barra de arriba de la lección y espera a que diga que está en marcha. Hay dos contenedores: sensors, que publica sin parar, y broker, que reenvía los mensajes. No se abre nada en un navegador, así que usa el terminal, donde docker exec broker ejecuta una orden dentro del intermediario. Cada botón Ejecutar de abajo escribe su orden en el terminal de tu laboratorio, una detrás de otra en la misma sesión. Para verlas o escribir las tuyas, pulsa Abrir terminal (pestaña nueva) en la barra.

Un suscriptor oye lo que se publica

Esta orden se suscribe a home/#, que significa todos los temas bajo home. -v imprime el tema antes de cada mensaje, -C 8 se detiene tras 8 mensajes y -W 10 tras 10 segundos, así que siempre termina. Cada línea es un tema, un espacio y un valor. Verás los cuatro temas de los sensores: las dos temperaturas y la humedad son números enteros, y el estado de la puerta es open o closed. Las primeras líneas que llegan son mensajes retenidos, algo que verás más abajo. Los números exactos dependen del segundo en que pulsaste Ejecutar, así que los tuyos serán distintos.

Comando
docker exec broker mosquitto_sub -t 'home/#' -v -C 8 -W 10

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un tema es una ruta y un comodín coincide con parte de ella

Los temas se escriben nivel a nivel, como carpetas. # coincide con todos los niveles de debajo, como acabas de usar. + coincide con exactamente un nivel. Así, home/+/temperature coincide con la temperatura de cualquier habitación: tres líneas, cada una empieza por home/kitchen/temperature o home/livingroom/temperature y termina en un número entero. La humedad y la puerta no aparecen, porque no encajan con el patrón.

Comando
docker exec broker mosquitto_sub -t 'home/+/temperature' -v -C 3 -W 10

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un mensaje retenido espera al suscriptor que llega tarde

Esta escucha la puerta y solo quiere un mensaje. Responde al instante, una línea, home/door/state seguido de open o closed, porque el sensor de la puerta marca sus mensajes como retenidos: el intermediario guarda el último y se lo entrega a cualquiera que se suscriba. Compáralo ahora con la humedad, que no está retenida. Un suscriptor nuevo no oye nada hasta que el sensor vuelva a publicar, así que la respuesta puede tardar hasta un segundo más, y entonces es una línea con un número entero.

Comando
docker exec broker mosquitto_sub -t home/door/state -v -C 1 -W 5

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
docker exec broker mosquitto_sub -t home/livingroom/humidity -v -C 1 -W 5

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comprueba

Consejo

¿Por qué respondió la puerta enseguida y la humedad tuvo que esperar? Respuesta: los mensajes de la puerta están retenidos, así que el intermediario ya tenía el último, mientras que la humedad solo se entrega cuando se publica.

Tú también puedes publicar

Cualquiera que llegue al intermediario puede publicar. Esta orden publica hello from me en un tema tuyo, home/notes/first, y -r lo hace retenido. No imprime nada. Después léelo: la respuesta es exactamente home/notes/first hello from me, siempre, porque el tuyo es el último mensaje de ese tema.

Comando
docker exec broker mosquitto_pub -t home/notes/first -r -m 'hello from me'

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
docker exec broker mosquitto_sub -t home/notes/first -v -C 1 -W 3

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error frecuente

Advertencia

Mucha gente cree que un suscriptor le pide una lectura al sensor. No es así. El sensor publica cuando quiere, y el intermediario solo reenvía el mensaje a quien esté suscrito en ese momento, que es la razón de ser del mensaje retenido. Y «retenido» no significa «guardado para siempre»: el siguiente mensaje de ese tema lo sustituye, y el intermediario de este laboratorio lo olvida todo cuando se detiene.

Lo que este laboratorio deja fuera

Un dispositivo real se conecta a un intermediario a través de una red. Se identifica con un nombre y una contraseña o un certificado, y la conexión va cifrada, para que nadie por el camino pueda leer ni cambiar los mensajes. Este laboratorio deja todo eso fuera: el intermediario deja que cualquiera dentro de tu copia lea y escriba lo que quiera. Aquí es seguro solo porque nada fuera de tu copia puede llegar hasta él. No montes un intermediario real así.

Comprobación final

Consejo

Responde sin mirar atrás. 1. ¿A quién envía su mensaje un sensor? 2. ¿Qué es un tema? 3. ¿Con qué coincide home/+/temperature y con qué coincide home/#? 4. ¿Qué hace un mensaje retenido? Respuestas: al intermediario, nunca directamente a un suscriptor; la etiqueta de un mensaje, escrita como una ruta; la temperatura de una sola habitación cualquiera, y todos los temas bajo home; el intermediario guarda el último y se lo da a quien se suscriba después.

Para docentes

Consejo

Esta lección es un pequeño ejemplo de lección trabajada en un laboratorio: los pasos y los botones Ejecutar son la lección, y el laboratorio es la copia de cada estudiante. El laboratorio son dos contenedores en una misma red, un intermediario MQTT estándar y un guion de sensores inventados, y nada aquí se corrige solo: el estudiante entrega las órdenes que ejecutó con lo que imprimieron, y una frase sobre para qué sirve un mensaje retenido. Puntos clave: 1. Un intermediario se sitúa entre quienes publican y quienes se suscriben. 2. Un tema es una ruta, y + y # son comodines. 3. Un mensaje retenido es el último, guardado para los suscriptores tardíos. Error frecuente: creer que un suscriptor le pide un valor al sensor. Material: el laboratorio y su terminal. Consejo: pida a los estudiantes que adivinen cuántas líneas imprimirá un comodín antes de ejecutarlo. Las lecturas siguen un ciclo fijo, pero en qué punto está depende del momento en que el estudiante pulsa Ejecutar, así que dos estudiantes ven números distintos. El laboratorio deja fuera la identificación y el cifrado que necesita una red real, una buena pregunta para la clase.

Sobre este laboratorio y su código: Laboratorio de mensajería MQTT: cómo hablan los dispositivos con un intermediario, en el navegador

¿Enseñas a una clase? Asigna estas lecciones a tus estudiantes con calificación y un laboratorio para cada uno.