publish: Les sujets
This commit is contained in:
@@ -1,16 +0,0 @@
|
||||
{
|
||||
"title": "Les sujets",
|
||||
"_updated_at": "2026-05-16 20:02:57",
|
||||
"slug": "les-sujets",
|
||||
"published": true,
|
||||
"published_at": "2023-02-19 07:48",
|
||||
"category": "domotique",
|
||||
"tags": {
|
||||
"tags": [
|
||||
"MQTT"
|
||||
]
|
||||
},
|
||||
"seo_title": "",
|
||||
"seo_description": "",
|
||||
"og_image": "https://www.abonnel.fr/file?uuid=0a16a893-c6d1-49a9-b7bf-473a9b0bcbd3&name=cover.svg"
|
||||
}
|
||||
@@ -1,100 +0,0 @@
|
||||
# Les sujets
|
||||
|
||||
En MQTT, un **sujet** (ou *topic* en anglais) est une chaîne de caractères qui identifie une catégorie ou un canal de communication. Les clients MQTT peuvent s'abonner à un ou plusieurs sujets pour recevoir les messages publiés sur ces sujets.
|
||||
|
||||
Lorsqu'un client publie un message sur un sujet particulier, tous les clients qui se sont abonnés à ce sujet recevront ce message. Les sujets sont organisés sous forme de hiérarchie à l'aide de barres obliques (`/`) pour séparer les différents niveaux.
|
||||
|
||||
Prenons un exemple concret. Un capteur de température dans la chambre 1 publie sa mesure sur le sujet `maison/chambre1/temperature` avec pour charge utile `19.8`. Au même moment, un autre capteur publie l'humidité de la cuisine sur `maison/cuisine/humidite` avec la valeur `62`. Home Assistant, abonné à `maison/chambre1/temperature`, recevra uniquement la première information ; un dashboard Grafana abonné aux deux sujets recevra les deux.
|
||||
|
||||
Quelques bonnes pratiques pour nommer les sujets :
|
||||
|
||||
- **Toujours en minuscules**, sans accents ni espaces — `maison/chambre1/temperature` plutôt que `Maison/Chambre 1/Température`.
|
||||
- **Du plus général au plus spécifique**, de gauche à droite — `maison/etage1/chambre1/capteur3` se lit naturellement.
|
||||
- **Pas de `/` en début de sujet** : `/maison/chambre1` crée un premier niveau vide, source d'erreurs subtiles.
|
||||
- **Préférer des noms parlants à des identifiants opaques** — `chambre1` plutôt que `dev_8a3f`.
|
||||
|
||||
Les sujets sont un élément clé de la flexibilité et de l'extensibilité de MQTT, permettant une communication efficace et ciblée entre les différents clients de l'écosystème.
|
||||
|
||||
## Sujets réservés
|
||||
|
||||
MQTT définit plusieurs sujets réservés (ou *reserved topics*) qui ont une signification particulière et qui ne doivent pas être utilisés pour la publication de messages personnalisés. Tous les sujets réservés commencent par le caractère `$`, ce qui permet de les distinguer immédiatement des sujets applicatifs. Voici quelques exemples :
|
||||
|
||||
- `$SYS/#` : utilisé par le broker pour publier des informations système le concernant — statistiques de performance, informations de connexion des clients, etc.
|
||||
- `$SYS/broker/version` : version du broker MQTT.
|
||||
- `$SYS/broker/uptime` : temps d'activité du broker depuis son dernier démarrage.
|
||||
- `$SYS/broker/clients/connected` : nombre de clients actuellement connectés.
|
||||
- `$SYS/broker/messages/received` : nombre total de messages reçus depuis le démarrage.
|
||||
|
||||
Concrètement, on peut s'abonner à `$SYS/#` depuis un client MQTT pour superviser la santé du broker en temps réel. Avec `mosquitto_sub` :
|
||||
|
||||
```bash
|
||||
mosquitto_sub -h localhost -t '$SYS/#' -v
|
||||
```
|
||||
|
||||
renverra en continu des lignes comme :
|
||||
|
||||
```
|
||||
$SYS/broker/uptime 12453 seconds
|
||||
$SYS/broker/clients/connected 7
|
||||
$SYS/broker/load/messages/received/1min 142
|
||||
```
|
||||
|
||||
Il ne faut pas utiliser ces sujets réservés pour publier des messages personnalisés, car cela peut perturber le fonctionnement normal du broker ou des clients MQTT qui s'attendent à y recevoir des informations système spécifiques.
|
||||
|
||||
## Caractère générique #
|
||||
|
||||
En MQTT, le symbole `#` est un caractère générique utilisé comme joker pour s'abonner à tous les sous-sujets d'un certain niveau **et de tous les niveaux inférieurs**. Il ne peut apparaître qu'en **dernière position** d'un filtre d'abonnement.
|
||||
|
||||
Par exemple, si un client s'abonne au sujet `maison/chambre1/#`, il recevra les messages publiés sur :
|
||||
|
||||
- `maison/chambre1/temperature`
|
||||
- `maison/chambre1/humidite`
|
||||
- `maison/chambre1/lumiere/plafond`
|
||||
- `maison/chambre1/lumiere/chevet/etat`
|
||||
|
||||
…et tous les autres sous-sujets, quelle que soit leur profondeur. À noter : `maison/chambre1/#` inclut aussi le sujet `maison/chambre1` lui-même s'il existe.
|
||||
|
||||
Un cas d'usage typique : un logger qui veut archiver toute l'activité de la maison s'abonne simplement à `maison/#` et capte l'intégralité des messages échangés sur cette branche.
|
||||
|
||||
L'utilisation du joker `#` peut avoir des conséquences importantes sur le trafic réseau et la charge de travail du broker, en particulier pour les hiérarchies importantes avec de nombreux sous-sujets. S'abonner à `#` tout court (autorisé par la plupart des brokers, à confirmer dans la doc) reviendrait à recevoir absolument tous les messages — utile pour du débogage ponctuel, à proscrire en production.
|
||||
|
||||
Quelques règles à respecter pour que le filtre soit valide :
|
||||
|
||||
- `#` doit être **seul dans son niveau** : `maison/chambre1#` est invalide, il faut écrire `maison/chambre1/#`.
|
||||
- `#` doit être **le dernier caractère** : `maison/#/temperature` est invalide.
|
||||
- On ne peut **pas publier** sur un sujet contenant `#` — les jokers sont réservés aux abonnements.
|
||||
|
||||
## Caractère générique +
|
||||
|
||||
MQTT définit un autre caractère générique, le symbole `+`, qui correspond à **exactement un seul niveau** de la hiérarchie. Contrairement à `#`, il peut être placé à n'importe quel niveau du filtre, et même apparaître plusieurs fois.
|
||||
|
||||
Par exemple, si un client s'abonne au sujet `maison/+/temperature`, il recevra les messages publiés sur :
|
||||
|
||||
- `maison/chambre1/temperature` ✓
|
||||
- `maison/cuisine/temperature` ✓
|
||||
- `maison/salon/temperature` ✓
|
||||
- `maison/chambre1/capteur1/temperature` ✗ *(deux niveaux entre `maison` et `temperature`)*
|
||||
- `maison/temperature` ✗ *(aucun niveau entre les deux)*
|
||||
|
||||
C'est exactement ce qu'on attend pour récupérer toutes les températures de la maison, sans capter au passage l'humidité ou la luminosité.
|
||||
|
||||
On peut combiner plusieurs `+` dans un même filtre. Par exemple, `maison/+/+/etat` capte l'état de tous les équipements de toutes les pièces : `maison/salon/lampe1/etat`, `maison/cuisine/four/etat`, etc.
|
||||
|
||||
Et on peut associer `+` et `#` dans un même abonnement. Par exemple, `maison/+/capteurs/#` capte tout ce qui concerne les capteurs de n'importe quelle pièce, à n'importe quelle profondeur :
|
||||
|
||||
- `maison/salon/capteurs/temperature` ✓
|
||||
- `maison/cuisine/capteurs/humidite/valeur` ✓
|
||||
- `maison/chambre1/lampe/etat` ✗
|
||||
|
||||
Comme pour `#`, le symbole `+` ne peut être utilisé que dans un abonnement, jamais dans une publication.
|
||||
|
||||
## Récapitulatif
|
||||
|
||||
| Filtre | Correspond à |
|
||||
|---|---|
|
||||
| `maison/chambre1/temperature` | exactement ce sujet |
|
||||
| `maison/+/temperature` | les températures de chaque pièce (un seul niveau) |
|
||||
| `maison/chambre1/#` | tout ce qui est publié sous `chambre1` (profondeur quelconque) |
|
||||
| `maison/+/+/etat` | l'état des équipements de chaque pièce |
|
||||
| `#` | tous les sujets applicatifs (à utiliser avec parcimonie) |
|
||||
| `$SYS/#` | toutes les infos système du broker |
|
||||
@@ -1,46 +1,100 @@
|
||||
# 150 · Les sujets
|
||||
# Les sujets
|
||||
|
||||

|
||||
En MQTT, un **sujet** (ou *topic* en anglais) est une chaîne de caractères qui identifie une catégorie ou un canal de communication. Les clients MQTT peuvent s'abonner à un ou plusieurs sujets pour recevoir les messages publiés sur ces sujets.
|
||||
|
||||
En MQTT, un sujet (ou *topic* en anglais) est une chaîne de caractères qui identifie une catégorie ou un canal de communication. Les clients MQTT peuvent s'abonner à un ou plusieurs sujets pour recevoir les messages publiés sur ces sujets.
|
||||
Lorsqu'un client publie un message sur un sujet particulier, tous les clients qui se sont abonnés à ce sujet recevront ce message. Les sujets sont organisés sous forme de hiérarchie à l'aide de barres obliques (`/`) pour séparer les différents niveaux.
|
||||
|
||||
Lorsqu'un client publie un message sur un sujet particulier, tous les clients qui se sont abonnés à ce sujet recevront ce message. Les sujets sont organisés sous forme de hiérarchie à l'aide de barres obliques (/) pour séparer les différents niveaux de la hiérarchie.
|
||||
Prenons un exemple concret. Un capteur de température dans la chambre 1 publie sa mesure sur le sujet `maison/chambre1/temperature` avec pour charge utile `19.8`. Au même moment, un autre capteur publie l'humidité de la cuisine sur `maison/cuisine/humidite` avec la valeur `62`. Home Assistant, abonné à `maison/chambre1/temperature`, recevra uniquement la première information ; un dashboard Grafana abonné aux deux sujets recevra les deux.
|
||||
|
||||
Par exemple, le sujet `maison/chambre1/temperature` pourrait être utilisé pour publier la température de la chambre 1 d'une maison. Les clients peuvent alors s'abonner à `maison/chambre1/temperature` pour recevoir des mises à jour sur la température de cette pièce spécifique.
|
||||
Quelques bonnes pratiques pour nommer les sujets :
|
||||
|
||||
Les sujets sont un élément clé de la flexibilité et de l'extensibilité de MQTT, permettant une communication efficace et ciblée entre les différents clients de l'écosystème MQTT.
|
||||
- **Toujours en minuscules**, sans accents ni espaces — `maison/chambre1/temperature` plutôt que `Maison/Chambre 1/Température`.
|
||||
- **Du plus général au plus spécifique**, de gauche à droite — `maison/etage1/chambre1/capteur3` se lit naturellement.
|
||||
- **Pas de `/` en début de sujet** : `/maison/chambre1` crée un premier niveau vide, source d'erreurs subtiles.
|
||||
- **Préférer des noms parlants à des identifiants opaques** — `chambre1` plutôt que `dev_8a3f`.
|
||||
|
||||
Les sujets sont un élément clé de la flexibilité et de l'extensibilité de MQTT, permettant une communication efficace et ciblée entre les différents clients de l'écosystème.
|
||||
|
||||
## Sujets réservés
|
||||
MQTT définit plusieurs sujets réservés (ou *reserved topics* en anglais) qui ont une signification particulière et qui ne doivent pas être utilisés pour la publication de messages personnalisés. Voici quelques exemples de sujets réservés dans MQTT :
|
||||
|
||||
- `$SYS/#` : ce sujet réservé est utilisé pour publier des informations système sur le broker MQTT lui-même, telles que des statistiques de performance ou des informations de connexion des clients.
|
||||
MQTT définit plusieurs sujets réservés (ou *reserved topics*) qui ont une signification particulière et qui ne doivent pas être utilisés pour la publication de messages personnalisés. Tous les sujets réservés commencent par le caractère `$`, ce qui permet de les distinguer immédiatement des sujets applicatifs. Voici quelques exemples :
|
||||
|
||||
- `$SYS/broker/version` : ce sujet réservé est utilisé pour publier la version du broker MQTT.
|
||||
- `$SYS/#` : utilisé par le broker pour publier des informations système le concernant — statistiques de performance, informations de connexion des clients, etc.
|
||||
- `$SYS/broker/version` : version du broker MQTT.
|
||||
- `$SYS/broker/uptime` : temps d'activité du broker depuis son dernier démarrage.
|
||||
- `$SYS/broker/clients/connected` : nombre de clients actuellement connectés.
|
||||
- `$SYS/broker/messages/received` : nombre total de messages reçus depuis le démarrage.
|
||||
|
||||
- `$SYS/broker/uptime` : ce sujet réservé est utilisé pour publier le temps d'activité du broker MQTT.
|
||||
Concrètement, on peut s'abonner à `$SYS/#` depuis un client MQTT pour superviser la santé du broker en temps réel. Avec `mosquitto_sub` :
|
||||
|
||||
- `$SYS/+` : ce sujet réservé permet d'accéder aux différents sous-sujets sous le répertoire `$SYS`, qui contiennent des informations système spécifiques.
|
||||
```bash
|
||||
mosquitto_sub -h localhost -t '$SYS/#' -v
|
||||
```
|
||||
|
||||
Il ne faut pas utiliser ces sujets réservés pour publier des messages personnalisés, car cela peut perturber le fonctionnement normal du broker ou des clients MQTT qui s'attendent à recevoir des informations système spécifiques sur ces sujets.
|
||||
renverra en continu des lignes comme :
|
||||
|
||||
```
|
||||
$SYS/broker/uptime 12453 seconds
|
||||
$SYS/broker/clients/connected 7
|
||||
$SYS/broker/load/messages/received/1min 142
|
||||
```
|
||||
|
||||
Il ne faut pas utiliser ces sujets réservés pour publier des messages personnalisés, car cela peut perturber le fonctionnement normal du broker ou des clients MQTT qui s'attendent à y recevoir des informations système spécifiques.
|
||||
|
||||
## Caractère générique #
|
||||
En MQTT, le symbole `#` est un caractère générique utilisé comme joker dans les noms de sujets pour s'abonner à tous les sous-sujets d'un certain niveau. Lorsqu'un client s'abonne à un sujet qui contient le joker `#`, il reçoit des messages publiés sur tous les sous-sujets de ce niveau et de niveaux inférieurs.
|
||||
|
||||
Par exemple, si un client s'abonne au sujet `maison/chambre1/#`, il recevra des messages publiés sur tous les sous-sujets de `maison/chambre1`, tels que `maison/chambre1/temperature`, `maison/chambre1/humidite`, `maison/chambre1/lumiere`, etc.
|
||||
En MQTT, le symbole `#` est un caractère générique utilisé comme joker pour s'abonner à tous les sous-sujets d'un certain niveau **et de tous les niveaux inférieurs**. Il ne peut apparaître qu'en **dernière position** d'un filtre d'abonnement.
|
||||
|
||||
L'utilisation du joker `#` peut avoir des conséquences importantes sur le trafic réseau et la charge de travail du broker MQTT, en particulier pour les hiérarchies de sujets importantes avec de nombreux sous-sujets. Par conséquent, il est recommandé d'utiliser le joker `#` avec parcimonie et de manière judicieuse, en fonction des besoins spécifiques de votre application MQTT.
|
||||
Par exemple, si un client s'abonne au sujet `maison/chambre1/#`, il recevra les messages publiés sur :
|
||||
|
||||
Lorsque le symbole `#` est utilisé seul comme sujet, il est considéré comme un sujet non valide dans MQTT. En effet, MQTT spécifie que tous les sujets valides doivent commencer par un caractère non-joker.
|
||||
- `maison/chambre1/temperature`
|
||||
- `maison/chambre1/humidite`
|
||||
- `maison/chambre1/lumiere/plafond`
|
||||
- `maison/chambre1/lumiere/chevet/etat`
|
||||
|
||||
Ainsi, si un client s'abonne à `#` comme sujet, cela n'aura aucun effet, car `#` n'est pas un sujet valide en soi. De même, si un client publie un message avec `#` comme sujet, le broker MQTT refusera le message car `#` n'est pas un sujet valide.
|
||||
…et tous les autres sous-sujets, quelle que soit leur profondeur. À noter : `maison/chambre1/#` inclut aussi le sujet `maison/chambre1` lui-même s'il existe.
|
||||
|
||||
Il est important de se rappeler que le broker MQTT peut appliquer des règles spécifiques pour valider les sujets des messages, qui peuvent varier en fonction de l'implémentation spécifique du broker. Il est donc recommandé de vérifier la documentation du broker MQTT pour connaître les règles de validation des sujets.
|
||||
Un cas d'usage typique : un logger qui veut archiver toute l'activité de la maison s'abonne simplement à `maison/#` et capte l'intégralité des messages échangés sur cette branche.
|
||||
|
||||
L'utilisation du joker `#` peut avoir des conséquences importantes sur le trafic réseau et la charge de travail du broker, en particulier pour les hiérarchies importantes avec de nombreux sous-sujets. S'abonner à `#` tout court (autorisé par la plupart des brokers, à confirmer dans la doc) reviendrait à recevoir absolument tous les messages — utile pour du débogage ponctuel, à proscrire en production.
|
||||
|
||||
Quelques règles à respecter pour que le filtre soit valide :
|
||||
|
||||
- `#` doit être **seul dans son niveau** : `maison/chambre1#` est invalide, il faut écrire `maison/chambre1/#`.
|
||||
- `#` doit être **le dernier caractère** : `maison/#/temperature` est invalide.
|
||||
- On ne peut **pas publier** sur un sujet contenant `#` — les jokers sont réservés aux abonnements.
|
||||
|
||||
## Caractère générique +
|
||||
MQTT définit un autre caractère générique, le symbole `+`, qui est utilisé pour s'abonner à un sous-sujet spécifique dans une hiérarchie de sujets. Contrairement au symbole `#`, le symbole `+` ne correspond qu'à un seul niveau de sous-sujet.
|
||||
|
||||
Par exemple, si un client s'abonne au sujet `maison/+/temperature`, il recevra des messages publiés sur tous les sous-sujets qui correspondent au modèle `maison/*/temperature`. Les sous-sujets qui correspondent incluent `maison/cuisine/temperature`, `maison/chambre1/temperature`, etc.
|
||||
MQTT définit un autre caractère générique, le symbole `+`, qui correspond à **exactement un seul niveau** de la hiérarchie. Contrairement à `#`, il peut être placé à n'importe quel niveau du filtre, et même apparaître plusieurs fois.
|
||||
|
||||
Le symbole `+` est donc utile pour filtrer les messages à un niveau spécifique de la hiérarchie de sujets, en s'abonnant à un seul sous-sujet plutôt qu'à l'ensemble du niveau comme avec le symbole `#`.
|
||||
Par exemple, si un client s'abonne au sujet `maison/+/temperature`, il recevra les messages publiés sur :
|
||||
|
||||
Il est important de noter que le symbole `+` ne peut être utilisé que pour remplacer un seul niveau de sous-sujet, tandis que le symbole `#` peut remplacer plusieurs niveaux de sous-sujets.
|
||||
- `maison/chambre1/temperature` ✓
|
||||
- `maison/cuisine/temperature` ✓
|
||||
- `maison/salon/temperature` ✓
|
||||
- `maison/chambre1/capteur1/temperature` ✗ *(deux niveaux entre `maison` et `temperature`)*
|
||||
- `maison/temperature` ✗ *(aucun niveau entre les deux)*
|
||||
|
||||
C'est exactement ce qu'on attend pour récupérer toutes les températures de la maison, sans capter au passage l'humidité ou la luminosité.
|
||||
|
||||
On peut combiner plusieurs `+` dans un même filtre. Par exemple, `maison/+/+/etat` capte l'état de tous les équipements de toutes les pièces : `maison/salon/lampe1/etat`, `maison/cuisine/four/etat`, etc.
|
||||
|
||||
Et on peut associer `+` et `#` dans un même abonnement. Par exemple, `maison/+/capteurs/#` capte tout ce qui concerne les capteurs de n'importe quelle pièce, à n'importe quelle profondeur :
|
||||
|
||||
- `maison/salon/capteurs/temperature` ✓
|
||||
- `maison/cuisine/capteurs/humidite/valeur` ✓
|
||||
- `maison/chambre1/lampe/etat` ✗
|
||||
|
||||
Comme pour `#`, le symbole `+` ne peut être utilisé que dans un abonnement, jamais dans une publication.
|
||||
|
||||
## Récapitulatif
|
||||
|
||||
| Filtre | Correspond à |
|
||||
|---|---|
|
||||
| `maison/chambre1/temperature` | exactement ce sujet |
|
||||
| `maison/+/temperature` | les températures de chaque pièce (un seul niveau) |
|
||||
| `maison/chambre1/#` | tout ce qui est publié sous `chambre1` (profondeur quelconque) |
|
||||
| `maison/+/+/etat` | l'état des équipements de chaque pièce |
|
||||
| `#` | tous les sujets applicatifs (à utiliser avec parcimonie) |
|
||||
| `$SYS/#` | toutes les infos système du broker |
|
||||
|
||||
@@ -1,18 +1,31 @@
|
||||
{
|
||||
"uuid": "0a16a893-c6d1-49a9-b7bf-473a9b0bcbd3",
|
||||
"slug": "les-sujets",
|
||||
"title": "150 · Les sujets",
|
||||
"title": "Les sujets",
|
||||
"author": "cedric@abonnel.fr",
|
||||
"published": true,
|
||||
"published_at": "2023-02-19 07:48:27",
|
||||
"featured": false,
|
||||
"published_at": "2023-02-19 07:48",
|
||||
"created_at": "2023-02-19 07:48:27",
|
||||
"updated_at": "2023-02-19 07:48:27",
|
||||
"revisions": [],
|
||||
"updated_at": "2026-05-16 20:02:59",
|
||||
"revisions": [
|
||||
{
|
||||
"n": 1,
|
||||
"date": "2026-05-16 20:02:59",
|
||||
"comment": "Titre modifié, catégorie modifiée, tags modifiés, contenu modifié, image de couverture modifiée",
|
||||
"title": "150 · Les sujets"
|
||||
}
|
||||
],
|
||||
"cover": "cover.svg",
|
||||
"files_meta": [],
|
||||
"external_links": [],
|
||||
"seo_title": "",
|
||||
"seo_description": "",
|
||||
"og_image": "",
|
||||
"category": "Électronique"
|
||||
"og_image": "https://www.abonnel.fr/file?uuid=0a16a893-c6d1-49a9-b7bf-473a9b0bcbd3&name=cover.svg",
|
||||
"category": "domotique",
|
||||
"tags": {
|
||||
"tags": [
|
||||
"MQTT"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
# 150 · Les sujets
|
||||
|
||||

|
||||
|
||||
En MQTT, un sujet (ou *topic* en anglais) est une chaîne de caractères qui identifie une catégorie ou un canal de communication. Les clients MQTT peuvent s'abonner à un ou plusieurs sujets pour recevoir les messages publiés sur ces sujets.
|
||||
|
||||
Lorsqu'un client publie un message sur un sujet particulier, tous les clients qui se sont abonnés à ce sujet recevront ce message. Les sujets sont organisés sous forme de hiérarchie à l'aide de barres obliques (/) pour séparer les différents niveaux de la hiérarchie.
|
||||
|
||||
Par exemple, le sujet `maison/chambre1/temperature` pourrait être utilisé pour publier la température de la chambre 1 d'une maison. Les clients peuvent alors s'abonner à `maison/chambre1/temperature` pour recevoir des mises à jour sur la température de cette pièce spécifique.
|
||||
|
||||
Les sujets sont un élément clé de la flexibilité et de l'extensibilité de MQTT, permettant une communication efficace et ciblée entre les différents clients de l'écosystème MQTT.
|
||||
|
||||
## Sujets réservés
|
||||
MQTT définit plusieurs sujets réservés (ou *reserved topics* en anglais) qui ont une signification particulière et qui ne doivent pas être utilisés pour la publication de messages personnalisés. Voici quelques exemples de sujets réservés dans MQTT :
|
||||
|
||||
- `$SYS/#` : ce sujet réservé est utilisé pour publier des informations système sur le broker MQTT lui-même, telles que des statistiques de performance ou des informations de connexion des clients.
|
||||
|
||||
- `$SYS/broker/version` : ce sujet réservé est utilisé pour publier la version du broker MQTT.
|
||||
|
||||
- `$SYS/broker/uptime` : ce sujet réservé est utilisé pour publier le temps d'activité du broker MQTT.
|
||||
|
||||
- `$SYS/+` : ce sujet réservé permet d'accéder aux différents sous-sujets sous le répertoire `$SYS`, qui contiennent des informations système spécifiques.
|
||||
|
||||
Il ne faut pas utiliser ces sujets réservés pour publier des messages personnalisés, car cela peut perturber le fonctionnement normal du broker ou des clients MQTT qui s'attendent à recevoir des informations système spécifiques sur ces sujets.
|
||||
|
||||
## Caractère générique #
|
||||
En MQTT, le symbole `#` est un caractère générique utilisé comme joker dans les noms de sujets pour s'abonner à tous les sous-sujets d'un certain niveau. Lorsqu'un client s'abonne à un sujet qui contient le joker `#`, il reçoit des messages publiés sur tous les sous-sujets de ce niveau et de niveaux inférieurs.
|
||||
|
||||
Par exemple, si un client s'abonne au sujet `maison/chambre1/#`, il recevra des messages publiés sur tous les sous-sujets de `maison/chambre1`, tels que `maison/chambre1/temperature`, `maison/chambre1/humidite`, `maison/chambre1/lumiere`, etc.
|
||||
|
||||
L'utilisation du joker `#` peut avoir des conséquences importantes sur le trafic réseau et la charge de travail du broker MQTT, en particulier pour les hiérarchies de sujets importantes avec de nombreux sous-sujets. Par conséquent, il est recommandé d'utiliser le joker `#` avec parcimonie et de manière judicieuse, en fonction des besoins spécifiques de votre application MQTT.
|
||||
|
||||
Lorsque le symbole `#` est utilisé seul comme sujet, il est considéré comme un sujet non valide dans MQTT. En effet, MQTT spécifie que tous les sujets valides doivent commencer par un caractère non-joker.
|
||||
|
||||
Ainsi, si un client s'abonne à `#` comme sujet, cela n'aura aucun effet, car `#` n'est pas un sujet valide en soi. De même, si un client publie un message avec `#` comme sujet, le broker MQTT refusera le message car `#` n'est pas un sujet valide.
|
||||
|
||||
Il est important de se rappeler que le broker MQTT peut appliquer des règles spécifiques pour valider les sujets des messages, qui peuvent varier en fonction de l'implémentation spécifique du broker. Il est donc recommandé de vérifier la documentation du broker MQTT pour connaître les règles de validation des sujets.
|
||||
|
||||
## Caractère générique +
|
||||
MQTT définit un autre caractère générique, le symbole `+`, qui est utilisé pour s'abonner à un sous-sujet spécifique dans une hiérarchie de sujets. Contrairement au symbole `#`, le symbole `+` ne correspond qu'à un seul niveau de sous-sujet.
|
||||
|
||||
Par exemple, si un client s'abonne au sujet `maison/+/temperature`, il recevra des messages publiés sur tous les sous-sujets qui correspondent au modèle `maison/*/temperature`. Les sous-sujets qui correspondent incluent `maison/cuisine/temperature`, `maison/chambre1/temperature`, etc.
|
||||
|
||||
Le symbole `+` est donc utile pour filtrer les messages à un niveau spécifique de la hiérarchie de sujets, en s'abonnant à un seul sous-sujet plutôt qu'à l'ensemble du niveau comme avec le symbole `#`.
|
||||
|
||||
Il est important de noter que le symbole `+` ne peut être utilisé que pour remplacer un seul niveau de sous-sujet, tandis que le symbole `#` peut remplacer plusieurs niveaux de sous-sujets.
|
||||
Reference in New Issue
Block a user