La technologie du jumeau numérique relie un actif physique à un modèle virtuel qui reste synchronisé avec lui, afin que vous puissiez voir, analyser et, à terme, prédire ce que fait l'objet réel. Ce guide explique les concepts et les types de jumeaux numériques, une architecture de référence qui fonctionne, et comment alimenter un modèle 3D vivant avec des données en temps réel via MQTT, avec du code que vous pouvez exécuter dès aujourd'hui.
Qu'est-ce qu'un jumeau numérique, vraiment ?
Un jumeau numérique est une représentation virtuelle d'un objet, d'un procédé ou d'un système physique précis, mise à jour en continu avec les données de son homologue réel. Les trois mots qui comptent dans cette définition sont précis, en continu et mise à jour.
- Précis : un jumeau représente la pompe numéro 3 de la ligne 2, pas « une pompe » en général. Un modèle CAO générique est une conception, pas un jumeau.
- En continu : le lien avec l'actif physique est permanent, ce n'est pas un import ponctuel.
- Mise à jour : les données circulent automatiquement de l'actif vers le modèle, généralement en quasi temps réel.
Cette distinction compte, car le terme est souvent étiré pour désigner n'importe quelle visualisation 3D ou n'importe quelle simulation. Une simulation détaillée d'un convoyeur fonctionnant sur des entrées supposées a de la valeur, mais elle ne devient un jumeau que lorsqu'elle est pilotée par la vitesse, la charge et les états de défaut du convoyeur réel. L'article jumeau numérique vs simulation explore cette frontière en profondeur.
Le concept n'est pas nouveau. Les ingénieurs conservent depuis longtemps des répliques physiques ou des modèles détaillés des systèmes critiques pour raisonner à leur sujet. Ce qui a changé, c'est le coût : capteurs bon marché, connectivité omniprésente, protocoles de messagerie légers et rendu 3D dans le navigateur permettent désormais de doter des équipements ordinaires d'un homologue virtuel vivant.
Les niveaux de la technologie du jumeau numérique : modèle, ombre, jumeau
Une manière utile de classer la technologie du jumeau numérique consiste à regarder le sens du flux de données entre le côté physique et le côté numérique.
| Niveau | Flux de données | Ce qu'il fait | Exemple typique |
|---|---|---|---|
| Modèle numérique | Aucun flux automatique | Représentation statique, mise à jour manuellement | Modèle CAO, plan d'implantation de l'usine |
| Ombre numérique | Du physique vers le numérique | Reflète l'état en direct pour la supervision et l'analyse | Vue 3D d'une ligne montrant états machines et températures |
| Jumeau numérique | Du physique vers le numérique et retour | Reflète l'état et peut envoyer des commandes ou des consignes | Jumeau qui ajuste la consigne d'une pompe après validation par un opérateur |
La plupart des projets réussis commencent sous forme d'ombre numérique, car des données unidirectionnelles sont plus faciles à sécuriser et à valider. L'étape bidirectionnelle vient ensuite et nécessite des contrôles rigoureux. Jumeau numérique vs ombre numérique explique pourquoi cette progression est l'option sûre par défaut.
Les types de jumeaux numériques
Les jumeaux se classent aussi par périmètre. Chaque périmètre répond à des questions différentes et requiert des données différentes.
- Jumeau de composant : une seule pièce comme un roulement, un moteur ou une vanne. Utile pour la surveillance de l'état des composants critiques.
- Jumeau d'actif : une machine complète composée de composants, comme une machine CNC ou un bras robotisé, combinant leurs données en une seule vue.
- Jumeau de système ou d'unité : plusieurs actifs travaillant ensemble, comme une ligne de production, un système CVC ou une cellule d'emballage. C'est à ce niveau que goulots d'étranglement et interactions deviennent visibles.
- Jumeau de procédé : un procédé ou un site entier, combinant les données des équipements avec les ordres de fabrication, la qualité et l'énergie. Ce niveau soutient les décisions de planification et d'optimisation.
Ces périmètres s'emboîtent naturellement, ce qui est une raison de plus de commencer petit : un jumeau d'actif bien construit deviendra plus tard une brique d'un jumeau de ligne. Pour plus de détails et des exemples de chaque périmètre, lisez les types de jumeaux numériques.
Là où les jumeaux numériques créent de la valeur
La valeur d'un jumeau vient de la réduction de la distance entre « il se passe quelque chose » et « la bonne personne le comprend ». Les applications courantes incluent :
- La supervision à distance : un ingénieur peut voir l'état d'une ligne dans un autre bâtiment ou un autre pays sans s'y rendre ni lire des tags bruts.
- La maintenance prédictive : combiner vibrations, température et heures de fonctionnement dans le contexte de l'actif rend les schémas de dégradation plus faciles à repérer. Voir le jumeau numérique pour la maintenance prédictive.
- La formation et l'intégration : les nouveaux opérateurs apprennent l'équipement sur un jumeau qui se comporte comme l'original, sans risque.
- La mise en service et l'analyse de scénarios : tester virtuellement une modification de commande ou d'implantation avant de l'appliquer.
- L'optimisation énergétique : visualiser où va l'énergie, en lien avec la production réelle.
- Les bâtiments et les infrastructures : occupation, CVC et énergie dans un même modèle spatial, comme dans un jumeau numérique de bâtiment.
Pour l'industrie manufacturière en particulier, le cas d'usage du jumeau numérique d'usine montre comment ces applications se combinent dans un véritable atelier.
Une architecture de référence pour le jumeau numérique
Quels que soient les outils choisis, un jumeau fonctionnel repose sur cinq briques. Bien placer les frontières entre elles est ce qui rend un jumeau maintenable.
1. Actifs physiques et capteurs
Machines, automates, capteurs et compteurs produisent les signaux bruts : états, températures, vitesses, comptages, alarmes. Les équipements plus anciens peuvent nécessiter des capteurs ajoutés en rétrofit.
2. Connectivité edge
Les passerelles lisent les protocoles natifs comme Modbus, OPC UA ou les interfaces propres aux fabricants, convertissent les valeurs en unités physiques et les publient sous forme de messages. Des microcontrôleurs comme l'ESP32 peuvent publier directement pour les capteurs simples.
3. Colonne vertébrale de messagerie en temps réel
C'est là que MQTT excelle. Chaque actif publie sur un topic, et chaque consommateur, y compris le jumeau, s'abonne. Un broker découple le jumeau des équipements : le modèle 3D n'a pas besoin de savoir dialoguer avec un automate, et l'automate n'a pas besoin de savoir que le jumeau existe. Deux fonctionnalités de MQTT conviennent particulièrement bien aux jumeaux :
- Les retained messages stockent la dernière valeur de chaque topic d'état, si bien qu'à son ouverture le jumeau affiche immédiatement l'état courant au lieu d'attendre la prochaine mise à jour. L'état du jumeau numérique avec les retained messages MQTT est un tutoriel complet sur ce pattern.
- Les messages Last Will permettent au broker d'annoncer qu'un équipement s'est déconnecté, afin que le jumeau signale clairement les actifs dont les données sont périmées au lieu d'afficher des chiffres figés comme s'ils étaient en direct.
Le broker est une infrastructure critique pour le jumeau ; c'est pourquoi de nombreuses équipes choisissent un broker MQTT managé plutôt que d'en exploiter un elles-mêmes.
4. Modèle et état du jumeau
Le jumeau lui-même contient la hiérarchie des actifs, l'état courant de chacun et les relations entre eux. Il peut être aussi simple qu'un objet JSON indexé par topic ou aussi formel qu'un modèle décrit en DTDL ou avec l'Asset Administration Shell. Le guide de l'architecture du jumeau numérique compare ces approches.
5. Applications et visualisation
Tableaux de bord, scènes 3D, analytique et alertes consomment l'état du jumeau. Une vue 3D dans le navigateur, construite avec Three.js ou Babylon.js, est aujourd'hui une option réaliste pour la plupart des équipes, comme le montre construire un jumeau numérique avec Three.js.
Données en temps réel : concevoir les topics d'un jumeau
La structure des topics détermine la facilité avec laquelle le jumeau trouve ses données. Suivre la hiérarchie ISA-95 la rend prévisible :
acme/plant1/machining/line1/cnc1/state (retained) {"state":"RUNNING"}
acme/plant1/machining/line1/cnc1/telemetry {"spindleTempC":41.2,"rpm":8000}
acme/plant1/utilities/tanks/tank1/level (retained) {"levelPct":63.5}
acme/plant1/utilities/pumps/pump1/command {"setpointRpm":1450}
Chaque objet 3D de la scène correspond à un chemin de cet arbre ; la liaison se résume donc à une recherche plutôt qu'à du code spécifique par équipement. ConnectMQ reconnaît les topics ISA-95 et Unified Namespace et regroupe les équipements par niveaux dans son portail, ce qui permet de vérifier facilement que chaque actif attendu par le jumeau publie bien. Si une partie de votre usine utilise Sparkplug B, ConnectMQ peut le décoder et le republier dans des topics ISA-95, de sorte que le jumeau s'abonne à un namespace unique et cohérent.
La latence est rarement le goulot d'étranglement. Pour la visualisation, une ou deux mises à jour par seconde et par actif paraissent instantanées à un humain. Ce qui compte davantage, c'est la cohérence : le jumeau doit afficher l'horodatage de chaque valeur et signaler les données comme périmées lorsque les mises à jour s'arrêtent. La latence d'un jumeau numérique en temps réel explique d'où vient réellement le délai.
En pratique : construire un jumeau 3D vivant alimenté par MQTT
L'exemple suivant construit un jumeau minimal d'une cuve de stockage. Un script Python joue le rôle de la cuve physique et publie son niveau, et une page web affiche une cuve 3D dont la hauteur de remplissage suit les données en temps réel. Les deux se connectent à l'espace public du serveur MQTT public gratuit broker.connectmq.com.
Étape 1 : simuler l'actif physique
pip install "paho-mqtt>=2.0"
import json
import math
import sys
import time
import uuid
import paho.mqtt.client as mqtt
TWIN_ID = sys.argv[1] if len(sys.argv) > 1 else uuid.uuid4().hex[:8]
BASE = f"connectmq/demo/{TWIN_ID}/plant1/tank1"
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=f"tank-sim-{TWIN_ID}")
client.will_set(f"{BASE}/status", "offline", qos=1, retain=True)
client.connect("broker.connectmq.com", 1883, keepalive=30)
client.loop_start()
client.publish(f"{BASE}/status", "online", qos=1, retain=True)
print(f"Twin ID: {TWIN_ID} topic: {BASE}/level")
t = 0.0
while True:
level = 50 + 40 * math.sin(t / 20) # se remplit et se vide lentement entre 10 et 90 %
payload = {"levelPct": round(level, 1), "ts": int(time.time() * 1000)}
client.publish(f"{BASE}/level", json.dumps(payload), qos=1, retain=True)
t += 1
time.sleep(1)
Lancez-le avec python tank_sim.py et notez l'identifiant de jumeau qu'il affiche. Le topic de niveau est retenu ; le jumeau affichera donc la dernière valeur dès sa connexion.
Étape 2 : afficher le jumeau dans le navigateur
Créez un projet avec un bundler comme Vite (npm create vite@latest twin -- --template vanilla), installez les bibliothèques avec npm install three mqtt et remplacez main.js par le code ci-dessous. Renseignez TWIN_ID avec la valeur affichée par le simulateur.
import * as THREE from "three";
import mqtt from "mqtt";
const TWIN_ID = "replace-with-your-twin-id";
const BASE = `connectmq/demo/${TWIN_ID}/plant1/tank1`;
// Mise en place de la scène
const scene = new THREE.Scene();
scene.background = new THREE.Color(0x1e2329);
const camera = new THREE.PerspectiveCamera(50, innerWidth / innerHeight, 0.1, 100);
camera.position.set(4, 3, 6);
camera.lookAt(0, 1, 0);
const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(innerWidth, innerHeight);
document.body.appendChild(renderer.domElement);
scene.add(new THREE.AmbientLight(0xffffff, 0.6));
const sun = new THREE.DirectionalLight(0xffffff, 1.2);
sun.position.set(5, 8, 5);
scene.add(sun);
// Enveloppe de la cuve (transparente) et liquide (mis à l'échelle selon le niveau)
const HEIGHT = 2;
const shell = new THREE.Mesh(
new THREE.CylinderGeometry(1, 1, HEIGHT, 48, 1, true),
new THREE.MeshStandardMaterial({ color: 0x9aa4ae, transparent: true, opacity: 0.25, side: THREE.DoubleSide })
);
shell.position.y = HEIGHT / 2;
scene.add(shell);
const liquidGeometry = new THREE.CylinderGeometry(0.95, 0.95, HEIGHT, 48);
liquidGeometry.translate(0, HEIGHT / 2, 0); // pivot en bas pour que la mise à l'échelle remplisse vers le haut
const liquid = new THREE.Mesh(liquidGeometry, new THREE.MeshStandardMaterial({ color: 0x2f80ed }));
scene.add(liquid);
let targetLevel = 0;
let online = false;
// Connexion MQTT via WebSocket sécurisé
const client = mqtt.connect("wss://broker.connectmq.com:8084/mqtt", {
clientId: `twin-viewer-${Math.random().toString(16).slice(2, 10)}`,
protocolVersion: 5,
});
client.on("connect", () => {
client.subscribe(`${BASE}/#`, { qos: 1 });
});
client.on("message", (topic, payload) => {
if (topic.endsWith("/level")) {
const data = JSON.parse(payload.toString());
targetLevel = Math.min(Math.max(data.levelPct / 100, 0.001), 1);
} else if (topic.endsWith("/status")) {
online = payload.toString() === "online";
liquid.material.color.set(online ? 0x2f80ed : 0x6b7280); // gris quand l'actif est hors ligne
}
});
// Animation progressive vers le dernier niveau reçu
function animate() {
liquid.scale.y += (targetLevel - liquid.scale.y) * 0.1;
renderer.render(scene, camera);
requestAnimationFrame(animate);
}
animate();
addEventListener("resize", () => {
camera.aspect = innerWidth / innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(innerWidth, innerHeight);
});
Démarrez le serveur de développement avec npm run dev et ouvrez la page. Le liquide monte et descend avec la cuve simulée. Arrêtez brutalement le script Python et, une fois le keepalive expiré, le broker publie le Last Will et le liquide devient gris : c'est exactement le signal de données périmées dont un vrai jumeau a besoin.
Le même pattern s'étend à une ligne entière : un abonnement par chemin d'actif, une table de correspondance du topic vers l'objet 3D. Lier des données IoT à un modèle 3D traite de cette correspondance pour des modèles GLTF importés comportant de nombreuses pièces. La propre démo web de jumeau numérique 3D de ConnectMQ utilise cette approche pour animer une usine avec une machine CNC, un bras robotisé, un four, une cuve, un convoyeur et une pompe via WebSocket sécurisé.
Rappelez-vous que l'espace public de ce serveur MQTT public gratuit est lisible par tous et limite les topics à huit niveaux : utilisez-le uniquement pour des données simulées comme celles-ci. Les vraies données d'usine ont leur place sur un broker privé avec identifiants.
Une feuille de route pratique pour votre premier jumeau numérique
Utilisez cette checklist pour passer de l'idée à un jumeau réellement utilisé :
- Choisissez un actif associé à une vraie question. « Pourquoi cette pompe disjoncte-t-elle toutes les quelques semaines ? » vaut mieux que « faire le jumeau de toute l'usine ».
- Décidez du niveau. Commencez par une ombre numérique ; n'ajoutez les commandes qu'une fois la vue de supervision jugée fiable.
- Listez les signaux dont le jumeau a besoin et vérifiez que chacun peut être lu de manière fiable.
- Définissez les topics et les payloads selon ISA-95, avec un état retenu et un topic de statut par actif.
- Prototypez avec des données simulées sur le serveur MQTT public gratuit pour construire la visualisation en parallèle du travail sur les équipements.
- Connectez les vrais équipements à un broker privé via TLS avec des identifiants par équipement.
- Ajoutez du contexte : seuils, unités, historique de maintenance et indication des données périmées.
- Mesurez l'utilisation. Si les opérateurs et les ingénieurs n'ouvrent pas le jumeau, cherchez à quelle question il ne répond pas.
Le guide comment construire un jumeau numérique développe chaque étape, et le modèle de maturité du jumeau numérique vous aide à planifier la suite après un premier succès.
Les pièges courants à éviter
- Commencer par le modèle 3D. Une belle scène avec des données peu fiables perd vite la confiance. Mettez d'abord au point le pipeline de données.
- Les connexions point à point aux équipements. Un jumeau qui interroge directement chaque équipement ne passe pas à l'échelle et crée une seconde intégration pour chaque consommateur.
- Masquer l'obsolescence des données. Affichez toujours la date de dernière mise à jour d'une valeur et signalez les actifs hors ligne.
- Le contrôle bidirectionnel trop tôt. Les commandes envoyées depuis un jumeau nécessitent autorisation, confirmation et limites. Gardez les fonctions de sécurité dans l'automate, jamais dans le jumeau.
- S'enfermer dans le format de modèle d'un fournisseur avant de connaître vos besoins. Comparez les options dans les outils open source de jumeau numérique.
Faites tourner votre jumeau numérique sur ConnectMQ
Un jumeau numérique ne vaut que par son flux de données en direct. Créez un compte gratuit sur app.connectmq.com avec le plan Serverless, sans carte bancaire, créez un broker et utilisez le nom d'utilisateur, le mot de passe et le client ID générés pour vos équipements et votre visualiseur de jumeau. Les navigateurs se connectent via WebSocket sécurisé sur le port 8084 au chemin /mqtt, et les équipements utilisent TLS sur le port 8883. Lorsque vous avez besoin de plus de connexions ou d'un environnement isolé, passez à un plan de broker MQTT cloud sans changer vos topics ni votre code.
Questions fréquentes
Quelle est la différence entre un jumeau numérique et un modèle 3D ?
Un modèle 3D est une représentation statique. Il ne devient partie d'un jumeau numérique que lorsqu'il est lié à un actif physique précis et mis à jour en continu avec les données en direct de cet actif.
Pourquoi MQTT convient-il bien à la technologie du jumeau numérique ?
MQTT découple les équipements du jumeau grâce au publish/subscribe, les retained messages donnent instantanément au jumeau l'état courant à son ouverture, et les messages Last Will révèlent les actifs hors ligne. Il est assez léger pour les microcontrôleurs et fonctionne dans les navigateurs via WebSocket.
Faut-il une plateforme commerciale pour construire un jumeau numérique ?
Non. De nombreux jumeaux efficaces sont construits à partir de composants ouverts : un broker MQTT, un petit modèle d'état et une bibliothèque 3D pour navigateur comme Three.js. Les plateformes commerciales ajoutent des fonctionnalités de modélisation et d'intégration surtout utiles à grande échelle.
Un jumeau numérique peut-il commander l'actif physique ?
Oui, s'il renvoie des commandes via la couche de messagerie, mais cela doit venir après que la vue de supervision a fait ses preuves. Les commandes exigent autorisation et confirmation, et la logique critique pour la sécurité doit rester dans l'automate ou le contrôleur.
Peut-on tester l'exemple 3D sans compte ?
Oui. L'exemple utilise l'espace public de broker.connectmq.com, qui accepte les connexions anonymes avec n'importe quel client ID unique et non vide. N'y utilisez que des données simulées ou non sensibles, car l'espace public est lisible par tous.



