Un jumeau numérique d'éolienne est un modèle vivant d'une turbine qui combine les mesures SCADA avec la connaissance du comportement attendu de la machine, afin que les exploitants voient la production perdue, les charges accumulées et les défauts naissants. Cet article présente les principaux cas d'usage du jumeau, la façon d'amener les données SCADA sur MQTT et le calcul d'un écart simple à la courbe de puissance que vous pouvez exécuter vous-même.
Pourquoi les éoliennes se prêtent idéalement aux jumeaux numériques
Les éoliennes sont isolées, coûteuses d'accès et fonctionnent dans des conditions en perpétuel changement. Une visite de technicien peut nécessiter un long trajet ou un navire, ainsi qu'une météo propice à l'ascension. Chaque décision qui peut être prise à partir des données plutôt que d'une visite sur site économise de l'argent et réduit les risques.
Les éoliennes sont aussi bien instrumentées. L'automate de la turbine et le système SCADA du parc enregistrent déjà la vitesse et la direction du vent, la vitesse du rotor et de la génératrice, les angles de pas, la position de lacet, la puissance active, les températures de toute la chaîne cinématique et une longue liste de codes d'état. La matière première d'un jumeau existe ; le défi est de la rendre accessible et de la mettre en contexte. Pour le concept général, voir le guide de la technologie du jumeau numérique.
Trois cas d'usage essentiels
Production : performance par rapport à la courbe de puissance
Chaque modèle de turbine possède une courbe de puissance de référence : la production attendue à chaque vitesse de vent. Le jumeau compare la production réelle à la production attendue pour la vitesse de vent mesurée, en ne retenant que les conditions de fonctionnement valides. Une sous-performance persistante dans une certaine plage de vitesses de vent peut révéler un mauvais calage du pas, une erreur de lacet, l'encrassement ou le givrage des pales, ou un paramètre de l'automate.
Charges : suivre la consommation de fatigue
Les composants structurels comme les pales, la tour et l'arbre principal accumulent de la fatigue sous l'effet des charges cycliques. Certaines turbines disposent de capteurs de charge ; pour d'autres, les charges sont estimées à partir des données de fonctionnement à l'aide de modèles. Un jumeau qui suit l'historique de charge estimé de chaque turbine aide les exploitants à comparer les machines d'un même parc et à éclairer les décisions de prolongation de durée de vie. Les modèles d'estimation de charge relèvent de spécialistes, généralement fournis par le constructeur ou des bureaux d'études, mais le jumeau fournit le chemin de données dont ils ont besoin.
Maintenance : santé des composants
Les températures de la chaîne cinématique, les vibrations issues des systèmes de surveillance d'état et le comptage des particules dans l'huile révèlent les défauts naissants des multiplicateurs, roulements et génératrices. Un jumeau qui compare les températures de chaque turbine à celles de ses voisines à charge similaire constitue une alerte précoce simple et efficace. L'approche générale est décrite dans jumeau numérique et maintenance prédictive.
| Cas d'usage | Signaux clés | Fréquence typique | Utilisateurs principaux |
|---|---|---|---|
| Production | Vitesse du vent, puissance active, pas, lacet, état | Moyennes de 1 s à 10 min | Ingénieurs performance |
| Charges | Vitesse du rotor, pas, puissance, capteurs de charge s'il y en a | Haute fréquence à l'edge, synthétisée | Gestionnaires d'actifs, ingénierie |
| Maintenance | Températures multiplicateur, roulements et génératrice, vibrations, données d'huile | Secondes à minutes | Planificateurs de maintenance |
| Exploitation | Codes d'état, alarmes, disponibilité | Au changement | Salle de contrôle |
Amener les données SCADA sur MQTT
Les systèmes SCADA des parcs éoliens exposent généralement leurs données via OPC UA, Modbus, des interfaces fondées sur IEC 61400-25 ou des bases de données propriétaires. Le schéma habituel repose sur une passerelle edge dans le poste de livraison ou le bâtiment de contrôle :
- La passerelle lit les données des turbines depuis le serveur SCADA ou directement depuis les automates des turbines.
- Elle publie les mesures sur des topics MQTT via TLS, par la connexion Internet sortante du site.
- Des services cloud ou centraux s'abonnent aux topics, calculent les sorties du jumeau et stockent l'historique.
MQTT convient aux sites énergétiques isolés pour des raisons bien connues : il est léger sur les liaisons contraintes, la connexion est sortante depuis le site et ne nécessite donc aucun port entrant dans le pare-feu, et les sessions persistantes avec QoS 1 aident à absorber les courtes coupures de liaison. Avec un broker MQTT cloud, des parcs situés dans différentes régions publient vers un point d'accès unique, et l'équipe d'exploitation n'a pas à maintenir des serveurs de broker sur chaque site.
Important : la passerelle doit uniquement lire depuis le SCADA. Les commandes de pilotage des turbines relèvent des systèmes de contrôle certifiés et de leurs réseaux protégés.
Conception des topics et des payloads
Organisez les topics par parc et par turbine, puis par type de données :
connectmq/<farm>/<turbine>/<data-type>
connectmq/northridge/wtg07/operation
connectmq/northridge/wtg07/drivetrain
connectmq/northridge/wtg07/status
connectmq/northridge/met-mast1/weather
Un payload opérationnel toutes les dix secondes :
{
"windSpeedMs": 9.4,
"windDirDeg": 251,
"yawDeg": 248,
"rotorRpm": 13.8,
"pitchDeg": 0.5,
"activePowerKw": 1985,
"ts": "2026-10-16T09:41:20Z"
}
Publiez les changements d'état (en marche, bridée, en défaut, en maintenance) sous forme de retained messages, afin qu'une visionneuse du jumeau connaisse toujours le mode actuel de chaque turbine. Utilisez l'expiration des messages de MQTT 5 sur les valeurs opérationnelles pour qu'une turbine dont la passerelle est hors ligne ne paraisse pas produire sur la base de données périmées.
Pratique : écart à la courbe de puissance en Python
L'exemple ci-dessous fonctionne sur le serveur MQTT public gratuit broker.connectmq.com, réservé aux tests et aux prototypes, avec des données de turbine simulées. Il comprend une petite courbe de puissance de référence, un simulateur légèrement sous-performant aux vitesses de vent moyennes et un service de jumeau qui publie un ratio de performance glissant. Utilisez uniquement des valeurs simulées, car le serveur MQTT public gratuit est lisible par tous.
import json
import random
import time
import uuid
from collections import deque
import paho.mqtt.client as mqtt
RUN = "wtg-91be" # remplacez par votre propre identifiant unique
BASE = f"connectmq/demo/{RUN}/northridge/wtg07"
# Courbe de puissance de référence indicative : vitesse du vent (m/s) -> puissance (kW)
CURVE = [(3, 0), (4, 80), (5, 200), (6, 380), (7, 620), (8, 950), (9, 1350),
(10, 1750), (11, 2050), (12, 2200), (25, 2200)]
def expected_kw(ws):
if ws < CURVE[0][0] or ws > CURVE[-1][0]:
return 0.0
for (x0, y0), (x1, y1) in zip(CURVE, CURVE[1:]):
if x0 <= ws <= x1:
return y0 + (y1 - y0) * (ws - x0) / (x1 - x0)
return 0.0
window = deque(maxlen=60)
def on_connect(client, userdata, flags, reason_code, properties):
client.subscribe(f"{BASE}/operation", qos=1)
def on_message(client, userdata, msg):
d = json.loads(msg.payload)
exp = expected_kw(d["windSpeedMs"])
if exp > 100: # ignorer les vents très faibles où le ratio est bruité
window.append((d["activePowerKw"], exp))
if len(window) >= 10:
actual = sum(a for a, _ in window)
expected = sum(e for _, e in window)
ratio = round(actual / expected, 3)
client.publish(f"{BASE}/twin/performance",
json.dumps({"performanceRatio": ratio, "samples": len(window)}),
qos=1, retain=True)
print("performance ratio", ratio)
twin = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=f"wtg-twin-{uuid.uuid4().hex[:6]}")
twin.on_connect = on_connect
twin.on_message = on_message
twin.connect("broker.connectmq.com", 1883, keepalive=30)
twin.loop_start()
sim = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=f"wtg-sim-{uuid.uuid4().hex[:6]}")
sim.connect("broker.connectmq.com", 1883, keepalive=30)
sim.loop_start()
try:
while True:
ws = max(0.0, random.gauss(9, 2))
loss = 0.92 if 7 <= ws <= 10 else 1.0 # sous-performance simulée
power = expected_kw(ws) * loss * random.uniform(0.97, 1.02)
sim.publish(f"{BASE}/operation",
json.dumps({"windSpeedMs": round(ws, 2), "activePowerKw": round(power, 1), "ts": time.time()}),
qos=1)
time.sleep(2)
except KeyboardInterrupt:
pass
Le ratio se stabilise sous 1,0, ce qui révèle la perte simulée. Une analyse réelle ajoute des filtres pour le bridage, les défauts, la correction de densité de l'air et le secteur de vent, mais le flux de données reste identique : les valeurs SCADA entrent, les sorties du jumeau sont republiées sur MQTT pour les visionneuses et les alertes.
Checklist de déploiement
- Convenez d'un accès en lecture seule aux données SCADA avec le constructeur de la turbine et l'exploitant du site.
- Placez la passerelle sur un réseau segmenté, avec uniquement du TLS sortant sur le port 8883.
- Utilisez un identifiant et un client ID par passerelle de site ; ConnectMQ lie les client IDs aux identifiants émis.
- Activez les sessions persistantes et la QoS 1 pour les topics d'état et d'alarme, afin que les courtes coupures de liaison ne fassent pas perdre d'événements.
- Publiez des valeurs moyennées pour l'analyse à long terme, et des valeurs à plus haute fréquence uniquement là où un cas d'usage l'exige.
- Stockez l'historique avec un abonné distinct dans une base de séries temporelles.
- Ajoutez des alertes pour les situations évidentes, comme une température de multiplicateur au-dessus d'une limite, à l'aide des règles à seuil du portail ou de votre propre service.
- Validez les sorties du jumeau par rapport aux rapports existants de l'exploitant avant de vous y fier.
Pièges courants
- Utiliser naïvement l'anémomètre de nacelle. Le rotor perturbe la mesure ; les exploitants appliquent souvent une fonction de transfert de nacelle. Comparez des situations comparables d'une turbine à l'autre.
- Ne pas filtrer le bridage. Les périodes de bridage ressemblent à une forte sous-performance si elles ne sont pas exclues grâce aux codes d'état.
- Décalages de fuseau horaire et d'horodatage entre serveurs SCADA et passerelles.
- Mélanger contrôle et supervision. Gardez le jumeau en lecture seule, sauf si l'architecture de contrôle prend explicitement en charge les commandes à distance.
Les mêmes principes s'appliquent à d'autres équipements industriels dans les articles jumeau numérique d'usine et jumeau numérique énergétique.
Connectez votre parc éolien à ConnectMQ
ConnectMQ est un broker MQTT managé avec TLS, MQTT 5 et des options Dedicated ou BYOC pour les exploitants qui ont besoin d'isolation. Commencez gratuitement sur app.connectmq.com avec le plan Serverless, sans carte bancaire, et diffusez les données de votre première turbine en quelques minutes.
Questions fréquentes
Quelles données utilise un jumeau numérique d'éolienne ?
Principalement des données SCADA : vitesse et direction du vent, vitesse du rotor, pas, lacet, puissance active, températures de la chaîne cinématique et codes d'état, ainsi que des données de surveillance d'état et de charge lorsqu'elles sont disponibles.
MQTT peut-il gérer les données de parcs éoliens isolés ?
Oui. MQTT est léger, fonctionne avec des connexions uniquement sortantes et prend en charge la QoS 1 avec des sessions persistantes, ce qui convient aux sites isolés aux liaisons limitées ou instables.
Un jumeau numérique doit-il renvoyer des commandes aux turbines ?
En général non. La plupart des jumeaux sont des outils de supervision et d'analyse en lecture seule ; le pilotage des turbines reste du ressort des systèmes de contrôle certifiés.
Comment mesure-t-on la performance par rapport à la courbe de puissance ?
La production réelle est comparée à la production attendue d'après une courbe de puissance de référence à la vitesse de vent mesurée, après exclusion du bridage, des défauts et des conditions anormales.



