Jumeaux numériques¶
Un jumeau numérique est la représentation virtuelle vivante d'un équipement physique — il reçoit les données du terrain, les expose à des services tiers et permet de simuler des scénarios sans toucher au matériel réel.
Concept et valeur industrielle¶
La définition de l'IIRA (Industrial Internet Référence Architecture) est précise : un jumeau numérique est une représentation numérique d'actifs, de processus ou de systèmes dans le domaine IoT, qui peut être utilisée à des fins d'analyse, de simulation, de contrôle ou d'optimisation.
Ce n'est pas simplement une base de données de capteurs. Le jumeau numérique combine :
- L'état courant : les dernières valeurs de tous les capteurs de l'équipement.
- L'historique : les séries temporelles associées.
- Le modèle : les métadonnées (type d'équipement, position, spécifications constructeur).
- Le comportement : des règles ou modèles qui décrivent comment l'équipement réagit.
Cas d'usage concrets¶
| Cas d'usage | Description | Gain |
|---|---|---|
| Maintenance prédictive | Détecter la dégradation d'un roulement avant la panne | Réduction des arrêts non planifiés de 30-50 % |
| Simulation what-if | Tester une modification de process sans risque | Réduction des tests terrain de 60 % |
| Optimisation énergétique | Trouver le point de fonctionnement optimal | 5-15 % d'économies énergie |
| Formation opérateurs | Simuler des pannes sans risque | Réduction du temps de formation |
| Détection d'écart | Comparer le comportement réel vs le modèle théorique | Identification précoce des déviations |
Modélisation device et process¶
Ontologies et langages de modélisation¶
Plusieurs standards coexistent selon le domaine industriel :
| Standard | Domaine | Organisme |
|---|---|---|
| DTDL (Digital Twins Définition Language) | Généraliste | Microsoft / Azure |
| WoT Thing Description | Web of Things | W3C |
| AAS (Asset Administration Shell) | Industrie 4.0 | Platform I4.0 |
| OPC-UA Information Model | Automation | OPC Foundation |
| Eclipse Ditto model | IoT généraliste | Eclipse Foundation |
Exemple de modèle DTDL — pompe centrifuge¶
{
"@context": "dtmi:dtdl:context;3",
"@id": "dtmi:industrial:pump:centrifugal;1",
"@type": "Interface",
"displayName": "Pompe centrifuge",
"contents": [
{
"@type": ["Telemetry", "Temperature"],
"name": "bearingTemperature",
"schema": "double",
"unit": "degreeCelsius",
"displayName": "Température palier"
},
{
"@type": "Telemetry",
"name": "flowRate",
"schema": "double",
"unit": "litrePerSecond"
},
{
"@type": "Property",
"name": "operationalState",
"schema": {
"@type": "Enum",
"valueSchema": "string",
"enumValues": [
{"name": "running", "enumValue": "RUNNING"},
{"name": "stopped", "enumValue": "STOPPED"},
{"name": "fault", "enumValue": "FAULT"},
{"name": "maintenance","enumValue": "MAINTENANCE"}
]
},
"writable": true
},
{
"@type": "Command",
"name": "emergencyStop",
"displayName": "Arrêt d'urgence"
}
]
}
Eclipse Ditto¶
Eclipse Ditto est le moteur open source de jumeaux numériques le plus complet de l'écosystème Java/Eclipse. Il expose une API REST et WebSocket pour interagir avec les jumeaux, et gère la persistance, la synchronisation et la politique d'accès.
Architecture interne Ditto¶
graph TB
subgraph "Devices / Edge"
D1[Capteur physique]
GW[Gateway]
end
subgraph "Eclipse Ditto"
CONN[Connectivity Service\nMQTT / AMQP / Kafka / HTTP]
THINGS[Things Service\nÉtat courant des jumeaux]
POLICIES[Policies Service\nContrôle d'accès]
SEARCH[Search Service\nIndex de recherche]
GATEWAY[Gateway Service\nAPI REST / WebSocket]
MONGO[(MongoDB\nPersistance)]
end
subgraph "Consommateurs"
APP[Application métier]
DASH[Grafana / Dashboard]
RULES[Moteur de règles]
SIM[Simulateur what-if]
end
D1 -->|MQTT| GW
GW -->|MQTT / HTTP| CONN
CONN --> THINGS
THINGS --> MONGO
THINGS --> SEARCH
POLICIES --> THINGS
GATEWAY --> THINGS
GATEWAY --> POLICIES
GATEWAY --> SEARCH
APP -->|REST / WebSocket| GATEWAY
DASH -->|REST| GATEWAY
RULES -->|WebSocket events| GATEWAY
SIM -->|REST PATCH| GATEWAY Création d'un jumeau via l'API REST¶
# Créer un jumeau pour la pompe P-042
curl -X PUT \
"https://ditto.example.com/api/2/things/industrial:pump-P042" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"definition": "dtmi:industrial:pump:centrifugal;1",
"attributes": {
"manufacturer": "Grundfos",
"model": "CM5-4",
"serialNumber": "GF-2024-00423",
"installDate": "2024-03-15",
"location": { "site": "factory-A", "zone": "Z3", "line": "L2" }
},
"features": {
"telemetry": {
"properties": {
"bearingTemperature": null,
"flowRate": null,
"motorCurrent": null
}
},
"operationalState": {
"properties": {
"state": "STOPPED",
"lastStateChange": null
}
}
}
}'
Mise à jour de l'état via un message entrant¶
# Mettre à jour la température du palier
curl -X PATCH \
"https://ditto.example.com/api/2/things/industrial:pump-P042/features/telemetry/properties" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"bearingTemperature": 72.3,
"flowRate": 4.85,
"motorCurrent": 8.2
}'
Boucle de synchronisation réel/virtuel¶
sequenceDiagram
participant HW as Capteur physique
participant GW as Gateway
participant MQTT as EMQX Broker
participant DITTO as Eclipse Ditto
participant APP as Application
participant SIM as Simulateur
HW->>GW: Mesure (Modbus/OPC-UA)
GW->>MQTT: MQTT PUBLISH\niot/pump-P042/telemetry
MQTT->>DITTO: Connectivity bridge\n(MQTT → Ditto protocol)
DITTO->>DITTO: Mise à jour features\nnotification WebSocket
DITTO->>APP: Event SSE/WebSocket\n"thing modified"
APP->>DITTO: GET /things/pump-P042\nétat courant complet
APP->>SIM: Injecter état courant\npour simulation what-if
SIM->>SIM: Simuler scénario\n(panne roulement dans 48h ?)
SIM->>APP: Résultat prédiction
APP->>DITTO: PATCH predicted_failure_date\n(propriété calculée) Simulation what-if¶
La simulation what-if est l'un des cas d'usage les plus puissants du jumeau numérique. Elle permet de répondre à des questions telles que :
- "Si j'augmente la consigne de température de 5°C, quel est l'impact sur la durée de vie du roulement ?"
- "Si la pompe P-042 tombe en panne, quel est l'impact sur la production de la ligne L2 ?"
Architecture de simulation¶
graph TD
TWIN["Jumeau numérique (état courant via Ditto)<br/>bearingTemp=72°C, flow=4.85 L/s, current=8.2A"]
TWIN -->|snapshot de l'état| MODEL["Modèle de dégradation<br/>(ML LSTM ou équation physique)<br/>Input : historique 30j + paramètres constructeur<br/>Output : MTTF estimé, next maintenance date"]
MODEL -->|résultats| RESULT["Résultats écrits dans le jumeau<br/>predictedFailureDate<br/>maintenanceRecommendation"] Ce qu'il faut retenir¶
- Un jumeau numérique n'est pas un tableau de bord : c'est un objet logiciel qui encapsule état, métadonnées et comportement d'un équipement.
- Eclipse Ditto offre une API REST/WebSocket standardisée et un modèle de politique d'accès granulaire.
- La simulation what-if est le cas d'usage différenciateur qui justifie la complexité d'un jumeau par rapport à une simple base time-series.
Chapitre suivant : Tableaux de bord — Grafana, datasources et optimisation des requêtes time-series pour les opérateurs et les managers.