MQTT managé dans le cloud

Dépendance fournisseur MQTT : garder vos appareils portables grâce au MQTT standard

MQTT est un standard ouvert, et pourtant les projets IoT finissent encore enfermés chez un fournisseur. La cause est rarement le protocole : ce sont les topics réservés, l'authentification propriétaire, les SDK des éditeurs et la logique qui vit dans une seule plateforme. Voici comment rester portable.

Illustration de la prévention de la dépendance fournisseur MQTT, avec des appareils connectés en MQTT standard capables de passer d'un broker interchangeable à un autre
Essayez-le sur votre propre broker MQTTObtenez un broker MQTT privé et managé avec l’offre Free et partez d’exemples de code prêts à l’emploi.
Essayer gratuitement Exemples de code Aucune carte bancaire requise

Parler de dépendance fournisseur MQTT ressemble à une contradiction, puisque MQTT est un standard ouvert de l'OASIS. Pourtant, de nombreuses équipes IoT découvrent que déplacer leurs appareils chez un autre fournisseur impliquerait de réécrire le firmware. Cet article explique d'où vient réellement la dépendance, quelles extensions propriétaires la créent et quelles règles de conception concrètes gardent vos appareils portables sur n'importe quel broker MQTT 3.1.1/5.0 standard.

Le protocole est ouvert, son environnement ne l'est pas

MQTT lui-même est défini par les spécifications OASIS MQTT 3.1.1 et 5.0, publiées sur mqtt.org. N'importe quel client conforme peut dialoguer avec n'importe quel broker conforme : connexion, publication, abonnement, QoS, retained messages, messages de testament et, en MQTT 5, des propriétés comme l'expiration de session, l'expiration des messages, les alias de topic et les response topics.

La dépendance s'insinue par tout ce qui entoure le protocole :

  • Des topics réservés, définis par la plateforme, que les appareils doivent utiliser.
  • Des flux d'authentification propriétaires qu'une seule plateforme comprend.
  • Des SDK d'appareils de l'éditeur qui enveloppent MQTT dans des concepts propres à la plateforme.
  • De la logique côté serveur comme des règles, des routes ou des transformations écrites dans le langage propre à une plateforme.
  • Des services d'état de la plateforme comme les shadows ou les twins sur lesquels s'appuient les appareils.
  • Des conventions de payload non standard que seuls les outils de la plateforme savent décoder.

Chacun de ces éléments peut être une bonne fonctionnalité. Le problème apparaît lorsque votre firmware en dépend sans couche d'abstraction.

Les sources courantes de dépendance fournisseur MQTT

Source Exemple de schéma Pourquoi elle vous enferme Alternative portable
Topics réservés Topics de shadow ou d'événements de la plateforme avec un préfixe éditeur Le firmware code en dur des chemins qu'un seul service comprend Votre propre hiérarchie, p. ex. site/area/line/device/telemetry
Modèles uniquement appareil-vers-cloud Topics de télémétrie et de commande fixes par appareil Les appareils ne peuvent pas s'abonner les uns aux autres ni à des topics partagés Publish/subscribe standard avec wildcards
Authentification propriétaire Jetons signés générés par un SDK d'éditeur Chaque appareil a besoin d'une nouvelle logique d'identifiants pour migrer Nom d'utilisateur/mot de passe ou X.509 sur TLS standard
SDK d'éditeurs Bibliothèques clientes de la plateforme pour shadows, jobs, provisioning Le code applicatif appelle des API de la plateforme, pas MQTT Paho, MQTT.js, PubSubClient, ESP-MQTT
Règles dans le broker Logique de routage dans le langage de règles d'une plateforme La logique métier doit être réécrite pour migrer Abonnés externes, Node-RED ou traitement de flux qui vous appartient
Services d'état de la plateforme Documents shadow ou twin Modèle d'état lié à une seule API Retained messages sur des topics d'état

Les fonctionnalités des plateformes ne sont pas mauvaises. AWS, Azure et d'autres fournisseurs les proposent parce qu'elles font gagner un vrai travail. L'enjeu est que leur adoption soit une décision consciente plutôt qu'un accident, et de les tenir à l'écart du firmware des appareils, là où les changements coûtent le plus cher.

Sept règles pour des systèmes MQTT portables

  1. Maîtrisez votre espace de noms de topics. Concevez une hiérarchie qui décrit votre activité, par exemple de style ISA-95 : enterprise/site/area/line/cell/device. Évitez les préfixes d'éditeurs dans les topics des appareils.
  2. Utilisez des bibliothèques clientes standard. Paho, MQTT.js, PubSubClient, AsyncMqttClient ou ESP-MQTT fonctionnent avec n'importe quel broker.
  3. Gardez les paramètres de connexion dans la configuration. L'hôte, le port, les paramètres TLS, les identifiants et le client ID doivent provenir d'un fichier de configuration, du stockage NVS ou du provisioning, jamais de constantes éparpillées dans le code.
  4. Utilisez une authentification standard. Nom d'utilisateur et mot de passe sur TLS, ou certificats clients : tous les brokers sérieux les comprennent.
  5. Représentez l'état avec des retained messages. Un état rapporté et souhaité sur des topics retenus se comporte de la même façon partout.
  6. Placez la logique d'intégration hors du broker. Un flow Node-RED, un agent Telegraf ou un petit service abonné se connecte au broker comme un client normal et peut vous suivre chez n'importe quel fournisseur.
  7. Documentez vos contrats de payload. Les schémas JSON comme Sparkplug B sont ouverts ; les formats binaires non documentés sont une dépendance que vous créez vous-même.

Exemple : des connexions pilotées par la configuration

La technique anti-dépendance la plus simple consiste à garder les détails du broker dans un seul fichier de configuration. Voici un fichier YAML et un chargeur Python utilisant paho-mqtt 2.x :

# broker.yaml - modifiez ce fichier, pas votre code, pour changer de fournisseur
host: broker.connectmq.com
port: 8883
tls: true
username: YOUR_USERNAME
password: YOUR_PASSWORD
client_id: YOUR_CLIENT_ID
topic_root: acme/plant1/packaging/line2
# pip install paho-mqtt pyyaml
import json
import ssl
import time
import yaml
import paho.mqtt.client as mqtt

with open("broker.yaml", encoding="utf-8") as f:
    cfg = yaml.safe_load(f)

root = cfg["topic_root"]


def on_connect(client, userdata, flags, reason_code, properties):
    print("Connected:", reason_code)
    client.subscribe(f"{root}/+/cmd", qos=1)


def on_message(client, userdata, msg):
    print("Command:", msg.topic, msg.payload.decode())


client = mqtt.Client(
    mqtt.CallbackAPIVersion.VERSION2,
    client_id=cfg["client_id"],
    protocol=mqtt.MQTTv5,
)
if cfg.get("username"):
    client.username_pw_set(cfg["username"], cfg.get("password"))
if cfg.get("tls"):
    client.tls_set(cert_reqs=ssl.CERT_REQUIRED)
client.on_connect = on_connect
client.on_message = on_message
client.connect(cfg["host"], cfg["port"], keepalive=60)
client.loop_start()

try:
    while True:
        reading = {"speed": 118.5, "ts": int(time.time())}
        client.publish(f"{root}/filler1/telemetry", json.dumps(reading), qos=1)
        client.publish(f"{root}/filler1/state/reported",
                       json.dumps({"mode": "running"}), qos=1, retain=True)
        time.sleep(10)
except KeyboardInterrupt:
    client.loop_stop()
    client.disconnect()

Rien dans la logique applicative ne sait à quel fournisseur elle s'adresse. Changer de broker revient à modifier cinq lignes de YAML.

La dépendance au-delà de l'appareil

Le firmware est l'endroit où la dépendance coûte le plus cher, car le modifier implique de toucher chaque appareil sur le terrain. Ce n'est pourtant pas le seul.

Les consommateurs back-end dépendent souvent du mécanisme de livraison d'un fournisseur, par exemple un flux d'événements propriétaire qui n'existe que sur une plateforme. Si votre historian, vos tableaux de bord et vos alertes s'abonnent plutôt au broker en MQTT, ils vous suivent.

Le savoir opérationnel est une forme de dépendance plus discrète. Procédures, seuils d'alerte et habitudes de débogage se construisent autour d'une console. Noter les signaux que vous surveillez, comme le nombre de connexions, les débits de messages et certains topics précis, permet de les recréer facilement ailleurs.

Les conditions commerciales comptent aussi. Les engagements longs, les coûts de sortie des données et la structure des plans peuvent rendre un départ coûteux même lorsque la technologie est portable. Examinez-les avec le même soin que la conception technique.

Un broker MQTT managé comme ConnectMQ prend en charge l'infrastructure pour vous, tandis que les appareils, les consommateurs et les tableaux de bord parlent tous du MQTT standard. Cette combinaison vous offre la commodité d'un service sans rendre ce service difficile à quitter.

Faites un test de portabilité avant d'en avoir besoin

La meilleure preuve de portabilité est de faire réellement tourner votre pile sur un second broker. Un broker privé gratuit ou le serveur MQTT public gratuit, réservé aux tests, suffit :

# Pointez un abonné vers le second broker et rejouez votre suite de tests
mosquitto_sub -h broker.connectmq.com -p 1883 -i porttest-5d1e \
  -t "connectmq/demo/5d1e/#" -v

Définissez topic_root sur connectmq/demo/5d1e dans une copie de broker.yaml, désactivez TLS et les identifiants pour le serveur MQTT public gratuit, puis exécutez le même programme. S'il fonctionne sans modification, votre code d'appareil est portable. S'il échoue, les erreurs désignent précisément la dépendance à supprimer.

Transparents sur chaque fournisseur, nous compris

Aucun service managé n'est parfaitement neutre. ConnectMQ est un broker MQTT 3.1.1/5.0 conforme aux standards, et vos appareils s'y connectent avec des clients ordinaires et une authentification par nom d'utilisateur et mot de passe. Certaines commodités du portail, comme la republication Sparkplug B dans des topics sous le préfixe connectmq/, les alertes sur seuil ou la vue des appareils ISA-95, sont propres à ce service. Utilisez-les librement pour l'exploitation et les tableaux de bord, mais faites publier le firmware des appareils dans votre propre arborescence de topics afin de pouvoir le déplacer ailleurs. Le même conseil vaut pour les extras de n'importe quel autre fournisseur.

Une liste de contrôle pour votre plan de sortie

Rédigez-la une fois et relisez-la chaque année :

  • Où sont stockés l'hôte, le port et les identifiants du broker pour chaque type d'appareil ?
  • Les appareils peuvent-ils recevoir de nouveaux paramètres de connexion à distance ?
  • Quelles fonctionnalités faudrait-il reconstruire ailleurs (règles, alertes, tableaux de bord) ?
  • Quels topics ou formats de payload sont propres au fournisseur ?
  • Comment feriez-vous tourner l'ancien et le nouveau broker en parallèle pendant la migration, par exemple avec un bridge ?

La comparaison broker MQTT auto-hébergé ou managé et l'article plateforme IoT ou broker MQTT vous aident à décider quelle couche vous souhaitez réellement externaliser.

Bâtissez sur un broker conforme aux standards

Si la portabilité compte pour vous, commencez sur un broker qui ne s'immisce pas dans votre firmware. Créez un broker Serverless gratuit sans carte bancaire, exécutez le client piloté par YAML ci-dessus et gardez le contrôle total de la conception de vos topics. Pour une vue d'ensemble, lisez le guide du broker MQTT cloud, découvrez le rôle d'un broker MQTT ou rendez-vous sur ConnectMQ.

Questions fréquentes

Peut-on être enfermé chez un fournisseur avec un protocole ouvert comme MQTT ?

Oui. Le protocole est portable, mais les topics réservés, l'authentification propriétaire, les SDK d'éditeurs et la logique intégrée au broker peuvent lier les appareils à un seul fournisseur.

Utiliser le moteur de règles d'une plateforme crée-t-il toujours une dépendance ?

Cela crée une dépendance, mais ce peut être un compromis acceptable. Tenez cette logique à l'écart du firmware des appareils pour qu'un déménagement ultérieur ne touche que le back-end.

Quel est le moyen le plus rapide de vérifier si mes appareils sont portables ?

Pointez un appareil de test vers un second broker conforme aux standards en ne modifiant que sa configuration. Tout ce qui casse révèle une dépendance.

Sparkplug B crée-t-il une dépendance fournisseur ?

Non. Sparkplug B est une spécification Eclipse ouverte, prise en charge par de nombreux outils et brokers : c'est un choix portable pour les payloads industriels.

Articles liés

Broker MQTT BYOC : le modèle Bring Your Own Cloud expliqué

Un broker MQTT BYOC tourne dans votre compte cloud mais est exploité par un fournisseur. Découvrez le fonctionnement du modèle, la répartition des responsabilités et comment préparer votre compte.

9 min de lecture

Messages MQTT par seconde : comment estimer et mesurer le débit

La planification du débit MQTT se résume à quelques formules et à une mesure honnête. Découvrez comment estimer les messages entrants et sortants par seconde, tenir compte des pics et faire correspondre le résultat à une offre de broker.

8 min de lecture

Tous les articles →

Votre broker MQTT privé, à quelques clics

Créez un compte, récupérez les identifiants de votre broker et connectez votre premier appareil — aucun serveur à installer, mettre à jour ou dimensionner.