¿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

Leer los mensajes de un sensor IoT

Después de esta lección: Puedo leer el tema y la carga útil de un mensaje de un sensor.

Lección de 50 min3 comandosLaboratorio de mensajería MQTT: cómo hablan los dispositivos con un intermediario, en el navegador

Cómo habla un termómetro con el móvil

El Internet de las cosas, en inglés IoT (Internet of Things), conecta objetos corrientes para que envíen datos. Un termómetro o el sensor de una puerta son ejemplos. Cada dato viaja como un mensaje corto.

Si sabes leer el tema y el contenido de un mensaje, sabes qué sensor lo mandó y qué midió.

Al final de esta lección

Nota

Puedo leer el tema y la carga útil de un mensaje de un sensor.

Palabras clave

PalabraQué significaEjemplo
Sensorun aparato que mide algo y envía el dato
MQTTun protocolo muy usado para enviar mensajes cortos entre aparatos
Brokerel intermediario que recibe cada mensaje y lo reparte
Temala etiqueta de un mensaje, escrita como una rutahome/door/state
Carga útilel contenido del mensaje, el dato en sí21

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Qué hay en el laboratorio

Importante

El laboratorio tiene sensores de mentira que publican una lectura cada segundo, y un broker. Cada Run termina solo. Los números dependen del segundo en que pulses Run, así que los tuyos serán distintos de los de otra persona. Lee la forma de la respuesta.

Un sensor publica y el broker reparte

Un sensor no sabe quién escuchará. Manda su mensaje al broker, y el broker lo pasa a quien haya pedido ese tema. Con MQTT funciona así.

Quien pide un tema se suscribe. Cada mensaje lleva un tema, que dice de qué trata, y una carga útil, que es el dato.

Escucha los cuatro sensores de la casa

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.

Una línea es tema y carga útil

Este Run se suscribe a todo lo que cuelga de home. La opción -v escribe el tema delante, -C 8 para tras 8 mensajes y -W 10 para tras 10 segundos, así que siempre termina.

Salen ocho líneas. Cada una es un tema, un espacio y un valor. Los temas son los cuatro de los sensores. La temperatura y la humedad son números enteros, y la puerta dice open o closed.

Ejemplo resuelto: cómo se lee un mensaje

Línea de ejemploLugarMagnitudCarga útil
home/livingroom/temperature 21livingroomtemperature21, un número
home/livingroom/humidity 44livingroomhumidity44, un número
home/kitchen/temperature 19kitchentemperature19, un número
home/door/state closeddoorstateclosed, un texto

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Lee solo la carga útil de una temperatura

Comando
docker exec broker mosquitto_sub -t home/livingroom/temperature -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.

Sin -v solo ves la carga útil

Este Run espera tres mensajes de un solo tema. Como no lleva -v, escribe solo la carga útil: tres líneas, cada una con un número entero.

Con la opción -F eliges el formato. Con %t sale el tema y con %p, la carga útil. El Run siguiente los separa con un igual y se detiene tras un mensaje.

Escribe tema, igual y carga útil

Comando
docker exec broker mosquitto_sub -t 'home/#' -F '%t=%p' -C 1 -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 error frecuente

Advertencia

Mucha gente cree que la carga útil de un mensaje es siempre un número. No es así: es texto, y solo parece un número si el sensor manda cifras. La puerta manda open o closed. Un programa que lee mensajes debe comprobar qué ha recibido antes de hacer cuentas.

Separa un mensaje en sus partes

Código: python
linea = "home/kitchen/temperature 19"   # cambia la línea

tema, carga = linea.split(" ", 1)
niveles = tema.split("/")
print(niveles)
print("lugar:", niveles[1])
if carga.isdigit():
    print("número:", int(carga))
else:
    print("texto:", carga)

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 este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.