Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Publication et abonnement avec MQTT

Après cette leçon: Je peux expliquer la publication et l’abonnement et choisir le filtre de sujets qui convient.

Leçon de 60 min3 commandesLab de messagerie MQTT : comment des appareils parlent à un courtier, dans le navigateur

Publier et s’abonner à un sujet

Le modèle publication et abonnement (en anglais publish and subscribe) sépare celui qui envoie de ceux qui reçoivent. Le capteur publie sur un sujet sans savoir qui écoute, et le courtier remet le message à chaque abonné de ce sujet.

Ainsi, on ajoute un tableau de bord ou une alarme sans toucher au capteur. Les filtres de sujets décident qui reçoit quoi.

À la fin de cette leçon

Remarque

Je peux expliquer la publication et l’abonnement et choisir le filtre de sujets qui convient.

Mots-clés

MotCe que ça veut direExemple
Publierenvoyer un message au courtier, avec un sujet
S’abonnerdire au courtier quels sujets on veut recevoir
Filtre de sujetsun sujet qui peut contenir des jokershome/+/humidity
Jokerun symbole qui remplace un ou plusieurs niveaux : + ou #
Message conservéle dernier message d’un sujet, gardé pour les abonnés qui arrivent plus tard

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Le courtier passe les messages aux abonnés

Un capteur ne parle jamais directement à un tableau de bord. Il publie un message. Le courtier regarde le sujet, cherche les abonnés qui l’ont demandé, et leur envoie le message.

Un abonné ne demande pas une mesure au capteur : il attend ce que le courtier lui passe.

Les filtres se testent dans le terminal

Le labo se commande avec le terminal et docker exec broker. Les sujets sont en anglais. Les valeurs dépendent de la seconde où vous appuyez sur Exécuter : seule la forme des réponses est la même pour tous.

+ remplace un niveau. # remplace tous les niveaux qui restent et se place à la fin. Les commandes ci-dessous choisissent donc des sujets différents avec un seul filtre.

Tout ce qui est sous home/kitchen

Commande
docker exec broker mosquitto_sub -t 'home/kitchen/#' -v -C 2 -W 5

Affiché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.

L’humidité de n’importe quelle pièce

Commande
docker exec broker mosquitto_sub -t 'home/+/humidity' -v -C 1 -W 5

Affiché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.

Exemple : quels sujets passent un filtre ?

Filtrehome/kitchen/temperaturehome/livingroom/humidityhome/door/state
home/#ouiouioui
home/+/humiditynonouinon
home/kitchen/#ouinonnon
home/door/statenonnonoui

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un filtre de sujets en Python

Code: python
# Un filtre de sujets : + remplace un niveau, # remplace tous les niveaux qui restent.
def correspond(filtre, sujet):
    f = filtre.split("/")
    s = sujet.split("/")
    i = 0
    while i < len(f):
        if f[i] == "#":
            return True
        if i >= len(s):
            return False
        if f[i] != "+" and f[i] != s[i]:
            return False
        i = i + 1
    return len(f) == len(s)

print(correspond("home/+/humidity", "home/livingroom/humidity"))
print(correspond("home/+/humidity", "home/livingroom/temperature"))
print(correspond("home/#", "home/door/state"))
# Essayez le filtre home/kitchen avec le sujet home/kitchen/temperature.

Un message conservé attend l’abonné en retard

Un abonné ne reçoit que les messages publiés après son abonnement. Si le capteur ne publie qu’une fois par minute, il attend.

Un message conservé (retained) est gardé par le courtier. Le capteur de la cuisine en publie un : à l’abonnement, la réponse est immédiate. Le message suivant sur le même sujet remplace le précédent.

Lire un message conservé

Commande
docker exec broker mosquitto_sub -t home/kitchen/temperature -v -C 1 -W 3

Affiché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.

Publier un message : un exemple à lire

Code: bash
mosquitto_pub -t home/notes/exemple -r -m 'bonjour'
# -t : le sujet. -r : le message est conservé. -m : la charge utile.
# C’est un exemple à lire : la tâche du labo vous demande d’écrire le vôtre.

Une erreur fréquente

Attention

On croit souvent que # remplace un seul niveau, comme +. Il remplace tous les niveaux qui restent, quel que soit leur nombre. Utilisez + pour un niveau précis et # pour tout le reste d’une branche.

À propos de ce labo et de sa source: Lab de messagerie MQTT : comment des appareils parlent à un courtier, dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.