Installation
Le courtier est un exécutable. Sous Linux, le paquet Debian ajoute une unité systemd, crée le répertoire de travail et démarre le service ; sous Windows, le fichier s'exécute là où vous le posez.
wget https://elxsoftware.com/download/elxmqttbroker-linux-amd64
sudo install -m 755 elxmqttbroker-linux-amd64 /usr/local/bin/elxmqttbroker
sudo elxmqttbroker --install-service
sudo systemctl enable --now elxmqttbroker
Pour les cartes ARM 32 et 64 bits, la marche à suivre est la même — prenez arm64 ou armhf. uname -m vous dit laquelle vous avez : aarch64 signifie arm64, armv7l signifie armhf.
Lancez l'installateur, ou dépliez la version portable et démarrez elxmqttbroker.exe.
L'interface s'ouvre sur http://127.0.0.1:8567
Accès par défaut : admin / admin
admin / admin, pour que le premier démarrage réussisse sans configuration. Changez-le dans l'interface avant que la machine ne soit atteignable depuis autre chose que votre bureau.Le premier démarrage
- Ouvrez
http://<adresse>:8567et connectez-vous. - Changez le mot de passe de l'administrateur dans le menu du profil.
- Créez un compte pour vos appareils dans Comptes et donnez-lui les sujets nécessaires — la liste des droits est vide au départ, et une liste vide signifie aucun accès.
- Connectez un client et regardez-le apparaître dans Clients : cela confirme d'un coup l'adresse, le port et les identifiants.
- Publiez un message d'essai depuis Publier et vérifiez que l'abonné le reçoit.
Comptes et droits
Chaque compte porte une liste de règles. Une règle est un filtre de sujets, un type d'accès — s'abonner, publier ou les deux — et un verdict : autoriser ou refuser. Rien n'est permis qui ne soit écrit : un compte sans règles se connecte et ne peut rien faire.
| Règle | Signification |
|---|---|
sensors/# · s'abonner · autoriser | Peut lire toute la branche des capteurs |
sensors/kitchen/+ · publier · autoriser | Peut écrire dans n'importe quel sujet un niveau sous kitchen |
devices/$u/# · les deux · autoriser | Peut tout faire dans sa propre branche, et rien en dehors |
# · les deux · refuser | Refuse explicitement tout ce qui n'est pas autorisé au-dessus |
Le substitut $u devient le nom du compte au moment de la connexion. Une règle sert donc mille appareils sans mille règles : chacun ne voit que son propre sous-arbre.
D'où viennent les identifiants
Le courtier peut tenir sa propre liste de comptes ou interroger autre chose. La source se change à chaud, sans redémarrage, ce qui permet d'éprouver une nouvelle pendant que l'ancienne sert encore.
- Interne. Des comptes dans la base du courtier. Ce qu'il faut pour quelques dizaines d'appareils.
- MariaDB / MySQL. Une table que vous avez déjà, avec la requête écrite dans les réglages. Ce qu'il faut quand un inventaire d'appareils existe ailleurs.
- SQLite. Un fichier de même forme, pour un système qui garde ses données en local.
- CSV. Un fichier simple, relu à chaque modification. Pratique pour une liste figée produite par un autre outil.
- JWT. L'appareil présente un jeton signé au lieu d'un mot de passe ; le courtier vérifie la signature et lit les droits dans les champs.
- HTTP. Le courtier demande à votre service si ce client peut se connecter, et votre service répond. Tout ce que vous appliquez déjà — blocage d'appareils, forfaits, quotas — vaut alors sans être dupliqué.
TLS
Indiquez au courtier un certificat et une clé : l'écoute chiffrée démarre sur le port 8883, et l'interface peut employer la même paire. Pour un réseau fermé, le courtier sait produire lui-même une paire auto-signée, ce qui suffit à garder les mots de passe hors du câble.
openssl s_client -connect broker.example.com:8883 -servername broker.example.com </dev/null | head -20
Ponts
Un pont est une connexion permanente vers un autre courtier, avec la liste des sujets à transporter. La direction se règle sujet par sujet : sortant pousse les messages locaux vers l'extérieur, entrant rapatrie les messages distants, les deux fait l'un et l'autre.
- Un préfixe peut être ajouté de chaque côté, pour que les messages d'un site distant arrivent sous
site-b/…et n'entrent jamais en collision avec les locaux. - La protection contre les boucles empêche qu'un message arrivé par le pont ne reparte aussitôt.
- Une connexion coupée est retentée avec une pause croissante ; la file d'attente continue entre-temps.
- TLS et identifiants se règlent pont par pont, de sorte que deux sites peuvent employer des certificats différents.
Publication différée
Publier vers $delayed/<secondes>/<sujet> confie au courtier un message à remettre plus tard. Il est enregistré, survit à un redémarrage et apparaît dans l'interface, où on peut l'annuler avant l'échéance.
mosquitto_pub -h broker -t '$delayed/300/home/light/kitchen' -m 'off'
La syntaxe correspond à celle d'EMQX ; les scripts écrits pour ce courtier fonctionnent donc sans retouche.
Limites de débit
Deux mécanismes pour deux problèmes différents. Un seau à jetons par connexion empêche un client d'inonder le courtier. Les règles par sujet traitent l'autre cas — un appareil simplement trop zélé : au lieu de le déconnecter, on éclaircit le flux à un débit donné en gardant la valeur la plus récente.
| Règle | Effet |
|---|---|
sensors/+/raw · 1 par seconde | Au plus un message par seconde et par sujet ; le plus récent l'emporte |
debug/# · rejeter | Rejeté au courtier, les abonnés ne le voient jamais |
| Connexion · 200 par seconde | Un client au-delà est freiné, puis déconnecté |
API REST
L'interface est un client de la même API que vous pouvez utiliser. Créez un jeton dans les réglages, choisissez s'il a le droit d'écrire, et appelez-la depuis votre propre système.
curl -X POST https://broker.example.com/api/users \
-H 'Authorization: Bearer <jeton>' \
-H 'Content-Type: application/json' \
-d '{"name":"sensor-42","password":"...","acl":[{"filter":"devices/sensor-42/#","access":"both","allow":true}]}'
Ce qui survit à un redémarrage
- Les messages conservés — la dernière valeur de chaque sujet qui l'a demandé.
- Les sessions persistantes — les abonnements des clients connectés avec
clean_sessiondésactivé. - Les files d'attente QoS 1 et 2 de ces sessions pendant l'absence du client.
- Les messages différés dont l'échéance n'est pas encore venue.
- Comptes, droits, ponts, règles et réglages.
Tout cela tient dans un fichier SQLite. Sauvegarder le courtier, c'est copier ce fichier ; le déménager, c'est l'emporter.
Quand quelque chose ne va pas
| Symptôme | Où regarder |
|---|---|
| Le client se connecte puis se déconnecte aussitôt | Identifiants, ou une liste de droits qui refuse tout. Le flux d'événements nomme la raison. |
| Des messages sont publiés mais personne ne les reçoit | Les droits de l'émetteur autorisent l'écriture, ceux de l'abonné n'autorisent pas la lecture de ce filtre. |
| La valeur conservée ne revient pas après un redémarrage | La persistance est désactivée, ou le répertoire de travail n'est pas accessible en écriture au compte du service. |
| Un appareil se reconnecte en boucle | Deux clients partagent le même identifiant — chaque connexion chasse l'autre. |
| Un client TLS se plaint du certificat | Un certificat auto-signé auquel il ne fait pas confiance, ou un nom qui ne correspond pas au certificat. |
| L'interface est injoignable depuis une autre machine | Elle est liée à l'adresse de bouclage ; changez l'adresse d'écoute dans les réglages. |