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
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Sensor | un aparato que mide algo y envía el dato | |
| MQTT | un protocolo muy usado para enviar mensajes cortos entre aparatos | |
| Broker | el intermediario que recibe cada mensaje y lo reparte | |
| Tema | la etiqueta de un mensaje, escrita como una ruta | home/door/state |
| Carga útil | el 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
docker exec broker mosquitto_sub -t 'home/#' -v -C 8 -W 10Se 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 ejemplo | Lugar | Magnitud | Carga útil |
|---|---|---|---|
| home/livingroom/temperature 21 | livingroom | temperature | 21, un número |
| home/livingroom/humidity 44 | livingroom | humidity | 44, un número |
| home/kitchen/temperature 19 | kitchen | temperature | 19, un número |
| home/door/state closed | door | state | closed, un texto |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Lee solo la carga útil de una temperatura
docker exec broker mosquitto_sub -t home/livingroom/temperature -C 3 -W 10Se 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
docker exec broker mosquitto_sub -t 'home/#' -F '%t=%p' -C 1 -W 10Se 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
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)