Un capteur envoie ses mesures par messages
Un capteur connecté envoie ses mesures sous forme de messages. Le plus souvent, il utilise le protocole MQTT (Message Queuing Telemetry Transport), léger et pensé pour les petits objets. Un message se compose d’un sujet et d’une charge utile.
Lire ces messages, c’est lire la température d’un salon ou l’état d’une porte sans écran. C’est le premier geste de l’Internet des objets.
À la fin de cette leçon
Remarque
Je peux lire un message de capteur et en tirer le sujet et la valeur.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Capteur | un objet qui mesure quelque chose et envoie la mesure | |
| Message | une information envoyée : un sujet et une charge utile | |
| Sujet | l’étiquette du message, écrite comme un chemin (en anglais topic) | home/door/state |
| Charge utile | le contenu du message, par exemple une mesure (en anglais payload) | |
| Courtier | le serveur qui reçoit les messages et les transmet (en anglais broker) |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un sujet est un chemin vers la mesure
Un sujet s’écrit par niveaux, séparés par des barres obliques, comme un chemin de fichier. Le sujet home/kitchen/temperature se lit : maison, cuisine, température.
La charge utile est la valeur elle-même. Les sujets du labo sont en anglais. Les valeurs sont des nombres entiers, ou un mot comme open pour l’état de la porte.
Exemple : quatre sujets d’une maison
| Sujet | Ce qu’il mesure | Forme de la charge utile |
|---|---|---|
| home/livingroom/temperature | la température du salon | un nombre entier |
| home/livingroom/humidity | l’humidité du salon | un nombre entier |
| home/kitchen/temperature | la température de la cuisine | un nombre entier |
| home/door/state | l’état de la porte | le mot open ou closed |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Comment lire les messages du labo
Le labo a deux conteneurs : sensors, qui publie une mesure par seconde, et broker, qui les transmet. Aucune page web : on utilise le terminal, où docker exec broker lance une commande dans le courtier.
L’option -v affiche le sujet avant la charge utile. -C 3 arrête après 3 messages, et -W 10 après 10 secondes, donc la commande se termine toujours. Vos valeurs diffèrent de celles d’un voisin, car elles dépendent de la seconde où vous appuyez sur Exécuter.
Lire trois messages de la cuisine
docker exec broker mosquitto_sub -t home/kitchen/temperature -v -C 3 -W 10Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Lire deux messages sur l’humidité du salon
docker exec broker mosquitto_sub -t home/livingroom/humidity -v -C 2 -W 5Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
La charge utile arrive en texte
Un message transporte du texte, même quand il s’agit d’un nombre. Pour calculer une moyenne, on convertit d’abord la charge avec int(...).
Le message ne dit pas son unité. Que 19 soit des degrés Celsius ou autre chose, c’est une convention que les personnes qui installent le capteur doivent connaître.
Séparer le sujet et la charge utile
# Une ligne de mosquitto_sub -v : le sujet, une espace, puis la charge utile.
ligne = "home/kitchen/temperature 19"
morceaux = ligne.split(" ", 1)
sujet = morceaux[0]
charge = morceaux[1]
print("sujet :", sujet)
print("charge utile :", charge)
# La charge arrive toujours sous forme de texte : on la convertit pour calculer.
valeur = int(charge)
print("la valeur plus 1 :", valeur + 1)
# Changez la ligne pour une autre pièce et relancez.
Une erreur fréquente
Attention
On croit souvent que la charge utile est déjà un nombre. Un message est du texte : "19" + "1" donne "191", et non 20. Convertissez avec int avant de calculer, et rangez un mot comme open à part.
Lire un message en trois gestes
On coupe la ligne à la première espace pour séparer le sujet de la charge. On regarde le dernier niveau du sujet pour savoir ce que mesure le capteur. On convertit la charge si c’est un nombre.
Le deuxième niveau dit d’où vient la mesure : la pièce, ici. Avec ces trois gestes, on traite n’importe quel flux de messages.