Intégration · IoT et machines

Relier vos capteurs et machines MQTT à votre logiciel métier

MQTT est un protocole ouvert de publication et d'abonnement, normalisé par OASIS (version 5.0 approuvée le 7 mars 2019) : capteurs, automates et passerelles publient leurs mesures sur des topics d'un serveur appelé broker, et le logiciel métier s'y abonne pour les recevoir au fil de l'eau. Relier MQTT à votre logiciel, c'est choisir et sécuriser ce broker, nommer les topics et écrire le service qui transforme les messages en données de gestion.

L'essentiel

  • MQTT n'a ni webhook ni API d'éditeur : le logiciel métier s'abonne aux topics d'un broker, et le broker lui pousse chaque message dès sa publication.
  • Les trois niveaux de qualité de service MQTT vont de la livraison sans confirmation (QoS 0) à la livraison unique garantie par un échange en quatre étapes (QoS 2).
  • Les limites viennent du broker : 128 Ko par paquet et pas de QoS 2 chez AWS IoT Core, une file de 1 000 messages par client par défaut chez Mosquitto.
  • Le serveur public test.mosquitto.org sert aux premiers essais, mais ses données sont visibles de tous et il ne convient pas à un usage en production.
  • YMHB Web installe le broker et le service d'ingestion chez le client, avec comptes, certificats et plan de nommage des topics à son nom.

Comment un logiciel métier reçoit-il des données MQTT ?

Un logiciel métier reçoit des données MQTT en s'abonnant à un broker, et non en appelant l'API d'un éditeur. L'équipement publie (capteur, automate, passerelle), le broker redistribue, les abonnés consomment : le capteur ignore votre logiciel, et votre logiciel ignore l'adresse du capteur. Il n'y a pas de webhook au sens habituel, puisque le broker transmet chaque message dès sa publication ; et le logiciel peut à son tour publier une consigne sur un topic auquel l'automate est abonné.

NotionRôleExemple dans un atelier
TopicAdresse hiérarchique, niveaux séparés par « / »usine/ligne2/presse4/compteur
Joker +Remplace un seul niveau dans un abonnementusine/+/presse4/compteur
Joker #Remplace tous les niveaux restants, en dernière positionusine/ligne2/#
MessageContenu libre : JSON, texte ou binairepièces bonnes, rebuts, horodatage

Ces règles figurent dans la page de manuel mqtt(7) d'Eclipse Mosquitto, broker libre qui implémente les versions 5.0, 3.1.1 et 3.1 du protocole.

Ce que le protocole garantit, et ce qu'il faut construire autour

MQTT garantit l'acheminement selon le niveau de qualité de service choisi, mais ne fixe ni le format des données ni leur conservation. La spécification MQTT 5.0 d'OASIS et la documentation de Mosquitto décrivent ces mécanismes :

MécanismeEffetUsage en gestion
QoS 0Au plus une fois, sans confirmation : perte possibleMesure fréquente
QoS 1Au moins une fois, avec confirmation : doublons possiblesCompteurs, événements de production
QoS 2Exactement une fois, par un échange en quatre étapesÉvénement à ne jamais compter deux fois
Message retenuLe broker garde le dernier message du topic pour chaque nouvel abonnéDernier état connu d'une machine
Testament (Will)Publié par le broker si l'équipement se déconnecte de façon inattendueAlerte « machine hors ligne »
Session persistanteAbonnements conservés, messages QoS 1 et 2 stockés pendant la déconnexionNe rien perdre pendant un arrêt du logiciel
Abonnement partagé (5.0)Chaque message n'est remis qu'à un membre du groupeRépartir la charge entre instances

MQTT 5.0 ajoute des codes de raison (0x86 pour un mot de passe refusé, 0x87 pour un accès non autorisé) et des propriétés utilisateur. Le contenu reste libre hors topics réservés, rappelle AWS IoT Core, dont le moteur de règles analyse par des requêtes SQL les messages au format JSON. La spécification Sparkplug de la fondation Eclipse (version 3.0 du 21 octobre 2022) normalise l'espace de noms des topics, le format des messages et l'état des sessions, pour la supervision (SCADA) et les IHM : utile quand plusieurs fournisseurs de capteurs cohabitent.

Comment authentifier les équipements et le logiciel ?

Un client MQTT s'authentifie à la connexion : identifiant et mot de passe dans le paquet CONNECT, certificat client TLS, ou, en MQTT 5.0, authentification étendue par le paquet AUTH. Les droits se règlent ensuite topic par topic.

  • Chiffrement. Chez Mosquitto, le TLS s'active avec un certificat et une clé serveur ; require_certificate impose un certificat à chaque client, et use_identity_as_username reprend son nom commun comme identifiant.
  • Accès anonyme. Selon la page de manuel mosquitto.conf, allow_anonymous vaut false par défaut dès qu'un listener est déclaré.
  • Droits par topic. Une liste de contrôle d'accès, ou le plugin Dynamic Security, borne ce que chaque compte publie ou lit : une sonde de température n'a pas à publier de consigne machine.
  • Broker géré. AWS IoT Core rejette les connexions sans extension TLS SNI.

Le port 1883, sans chiffrement, est celui de Mosquitto par défaut. Il se tolère sur un réseau d'usine cloisonné ; dès que les messages traversent Internet, le TLS devient la règle.

Quelles limites publiées selon le broker choisi ?

Selon la spécification, la longueur restante d'un paquet MQTT peut atteindre 268 435 455 octets : les vraies bornes viennent donc du broker.

ParamètreMosquitto (défaut, réglable)AWS IoT Core (quota publié)
TaillePaquets de 2 000 000 octets au plus depuis la version 2.1Paquets de 128 Ko au plus
QoS 2Pris en chargeNon pris en charge
File d'attente1 000 messages par client, 20 messages QoS 1 ou 2 en transitDébit de publication plafonné par connexion (quota)
Session persistanteSauvegarde sur disque désactivée par défautExpiration après une heure par défaut, relevable (7 jours au plus en MQTT 5)
TopicsStructure libreNombre de barres obliques plafonné (quota)
ConnexionsSelon le serveur1 demande de connexion par seconde et par identifiant client

Pour un premier essai, le projet Mosquitto exploite le serveur public test.mosquitto.org (1883 en clair, 8883 en TLS). Ses données sont publiques et il ne convient pas à la production : la recette se fait sur un broker privé.

Quatre flux MQTT à brancher sur un logiciel de gestion

  1. Le compteur de la presse alimente l'ordre de fabrication. L'automate publie chaque minute, en QoS 1, les pièces bonnes et les rebuts. Le service retrouve l'ordre de fabrication en cours sur la presse et met à jour son avancement. La traçabilité de production repose sur ces enregistrements horodatés.
  2. La chambre froide prévient avant la perte. Une sonde publie la température toutes les 30 secondes en QoS 0 ; le logiciel garde une valeur par minute et alerte quand le seuil est dépassé dix minutes de suite.
  3. Le testament signale la machine muette. Si un équipement disparaît sans se déconnecter, le broker publie « hors ligne » et le tableau de bord passe la machine en arrêt non justifié, au lieu d'afficher sa dernière cadence.
  4. La recette descend vers la ligne. Le logiciel publie la recette du prochain lot ; l'automate confirme sur un topic d'acquittement, et faute de confirmation dans les deux minutes, l'opérateur est alerté.

Doublons, coupures, données personnelles : où se cachent les pannes ?

  • Les doublons du QoS 1. Chaque message porte un identifiant créé par l'équipement (numéro de séquence), et le service écarte ce qu'il a déjà enregistré.
  • L'heure de la mesure. La mesure est horodatée à la source, pas à la réception.
  • La valeur retenue périmée. Un message retenu peut décrire une machine arrêtée depuis une semaine : le service compare son horodatage à l'heure courante avant de l'afficher comme état actuel.
  • La file qui déborde. Si le logiciel s'arrête une nuit, les messages s'accumulent jusqu'au plafond du broker, qui se dimensionne et se surveille.
  • Le topic fourre-tout. Le plan de nommage (site, ligne, machine, mesure) est fixé au cadrage et versionné avec le code.
  • Les données personnelles. La position d'un véhicule ou le badge d'un opérateur relèvent du RGPD, détaillé dans notre guide RGPD et logiciel métier.

D'après la documentation de Mosquitto, les statistiques du broker (hiérarchie $SYS) ne sont pas reçues par un abonnement à « # » : il faut s'abonner à $SYS/# pour superviser le flux.

Passerelle, plateforme IoT ou service développé : que choisir ?

  • Vos machines parlent déjà un protocole industriel. Si l'automate expose ses données en OPC UA ou en Modbus, une passerelle du marché peut les republier en MQTT, ou le logiciel peut les lire directement : voir nos pages OPC UA et Modbus.
  • Une supervision existe. Relier la gestion à la supervision plutôt qu'à chaque capteur reste souvent plus simple, comme expliqué dans relier automates et supervision à l'ERP.
  • Des centaines d'objets dispersés. Un broker géré comme AWS IoT Core apporte la montée en charge et la gestion des certificats, en contrepartie de quotas.

Le développement prend l'avantage quand les messages doivent devenir des données de gestion : rapprochement avec un ordre de fabrication, un client ou un contrat, règles d'alerte propres à votre métier, historique exploitable.

Ce que YMHB Web installe et vous remet

YMHB Web relie MQTT au logiciel métier par un service d'ingestion en Node.js qui s'abonne aux topics, déduplique les messages et les range dans une base PostgreSQL. Le cadrage recense les équipements et ce qu'ils publient ; le chiffrage en forfait global suit, puis la construction flux par flux sur un broker de recette.

  • Broker, comptes, certificats et droits par topic sont créés sur votre infrastructure ou votre compte cloud, à votre nom.
  • Le plan des topics et le format des messages sont documentés pour tout automaticien ou prestataire.
  • Une alerte part quand un équipement se tait trop longtemps ou qu'une file grossit.
  • Le code source vous appartient au paiement intégral.

YMHB Web programme aussi automates et IHM en interne, utile quand il faut modifier ce que publie l'équipement : voir automates, IHM et supervision.

Questions fréquentes

MQTT est-il une API ?

Non, MQTT n'est pas une API au sens d'un service web d'éditeur : c'est un protocole de messagerie ouvert, normalisé par OASIS, où des équipements publient des messages sur les topics d'un broker et où des programmes s'y abonnent. Un logiciel métier se connecte à MQTT comme un client parmi d'autres, avec un compte et des droits sur les topics qui le concernent, puis reçoit les messages en continu.

Quelle différence entre QoS 1 et QoS 2 en MQTT ?

En MQTT, le QoS 1 garantit qu'un message arrive au moins une fois, avec confirmation, mais il peut arriver en double. Le QoS 2 garantit une livraison unique grâce à un échange en quatre étapes, plus lent. Certains brokers gérés, comme AWS IoT Core, ne prennent pas en charge le QoS 2 : l'application doit alors écarter elle-même les doublons du QoS 1.

Peut-on tester une intégration MQTT sans installer de broker ?

Oui, le projet Eclipse Mosquitto met à disposition le serveur public test.mosquitto.org, avec des ports en clair, en TLS et en WebSockets. Ce serveur suffit pour vérifier qu'un client se connecte et publie, mais ses données sont visibles de tous et le projet demande de ne pas s'y fier pour un usage important. La recette d'une intégration MQTT se fait donc sur un broker privé.

Faut-il héberger le broker MQTT sur site ou dans le cloud ?

Un broker MQTT sur site, comme Mosquitto, convient quand les machines et le logiciel partagent le réseau de l'usine et que les données ne doivent pas en sortir. Un broker dans le cloud convient mieux à des objets dispersés qui passent par le réseau mobile. Les deux peuvent coexister : Mosquitto sait relier deux brokers par un pont qui ne partage qu'une partie des informations.

Combien de messages un logiciel métier peut-il recevoir par MQTT ?

Le protocole MQTT ne fixe pas de plafond de débit : la limite vient du broker et du service qui traite les messages. Mosquitto plafonne par défaut la file d'attente à 1 000 messages par client, valeur réglable, et AWS IoT Core publie des quotas par compte et par connexion. On dimensionne d'après le nombre d'équipements multiplié par leur fréquence de publication.

À lire aussi

Sources

  1. OASIS, MQTT Version 5.0, OASIS Standard du 7 mars 2019 (longueur restante maximale, codes de raison 0x86 et 0x87, propriétés utilisateur, paquet AUTH)
  2. Eclipse Mosquitto, page d'accueil (broker libre, versions 5.0, 3.1.1 et 3.1, serveur de test)
  3. Eclipse Mosquitto, page de manuel mqtt(7) (topics, jokers, QoS, messages retenus, testament)
  4. Eclipse Mosquitto, page de manuel mosquitto.conf(5) (TLS, allow_anonymous, ACL, persistance, limites)
  5. Eclipse Mosquitto, page de manuel mosquitto(8) (abonnements partagés, hiérarchie $SYS, ponts)
  6. Eclipse Mosquitto, serveur de test public test.mosquitto.org (ports et avertissements)
  7. AWS, AWS IoT Core endpoints and quotas (quotas du message broker, dont une demande CONNECT par seconde et par identifiant client)
  8. AWS IoT Core, guide du développeur : MQTT, édition allemande (QoS 2 non pris en charge, paquets de 128 Ko, sessions persistantes, SNI, quotas)
  9. AWS IoT Core, MQTT message payload (format libre hors topics réservés, JSON pour le moteur de règles)
  10. Eclipse Foundation, Sparkplug Specification (version 3.0 du 21 octobre 2022)

Prêt à démarrer ?

Décrivez-nous votre situation, pas une liste de fonctionnalités.

Réponse sous un jour ouvré, en général par téléphone. Si un outil du marché suffit, nous vous le dirons.

Premier échange sans engagementCadrage avant chiffrage

AppelerDécrire mon problème