Fabrication intelligente

Tableau de bord de suivi de ligne de production avec MQTT, Grafana et Node-RED

Construction pas à pas d'un tableau de bord de suivi de ligne de production : les postes publient leur état et leurs compteurs en MQTT, Telegraf les stocke, et Grafana ou Node-RED en tire une vue de ligne en temps réel.

Tableau de bord de suivi de ligne de production avec tuiles d'état des postes, compteurs de pièces et jauge de TRS alimentés par des données MQTT
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

Un tableau de bord de suivi de ligne de production transforme les signaux bruts des machines en un seul écran qui indique aux chefs d'équipe si la ligne tourne, combien de pièces bonnes elle a produites et où elle perd du temps. Dans ce tutoriel, vous publierez les données des postes en MQTT, les stockerez avec Telegraf et InfluxDB, puis construirez le tableau de bord dans Grafana, avec une alternative plus légère sous Node-RED pour les petites lignes. Tout fonctionne avec un vrai broker : vous pouvez suivre depuis un simple ordinateur portable.

Ce qu'un bon tableau de bord de ligne doit afficher

Avant de câbler quoi que ce soit, décidez à quelles questions l'écran doit répondre. La plupart des tableaux de bord de ligne échouent parce qu'ils affichent toutes les variables exposées par l'automate au lieu des quelques questions que les gens se posent réellement pendant un poste.

Question à l'atelier Signal nécessaire Widget typique
Chaque poste tourne-t-il en ce moment ? state (RUNNING, IDLE, DOWN, SETUP) Tuiles d'état codées par couleur
Sommes-nous dans le plan pour ce poste ? Pièces bonnes, objectif Grand chiffre et barre de progression
D'où viennent les rebuts ? Rebuts par poste Histogramme par poste
Quel poste est le goulot d'étranglement ? Cadence réelle vs cadence idéale Tableau trié par écart de cadence
Quelle est la santé globale de la ligne ? Disponibilité, performance, qualité Jauge de TRS avec trois sous-barres
Qu'est-ce qui nous a arrêtés la dernière heure ? Changements d'état horodatés Chronologie des états

Limitez la première version à ces six éléments. Les chefs d'équipe en demanderont davantage dès qu'ils feront confiance aux chiffres, et cette confiance vient de compteurs qui correspondent à ce qu'ils voient sur le terrain.

Architecture : du poste à l'écran

Le chemin des données est court et chaque brique est remplaçable :

  1. Chaque poste (passerelle automate, PC industriel en périphérie ou microcontrôleur) publie un petit message d'état JSON vers un broker MQTT à chaque changement d'état et au moins toutes les quelques secondes.
  2. Telegraf s'abonne aux topics de la ligne et écrit chaque message dans InfluxDB sous forme de série temporelle.
  3. Grafana interroge InfluxDB et affiche les panneaux.
  4. En option, un flow Node-RED s'abonne aux mêmes topics et pilote un tableau de bord léger sur un écran installé près de la ligne.

Le broker est le point central qui découple les postes des consommateurs. Si ce rôle est nouveau pour vous, cet article sur le rôle d'un broker MQTT en présente les bases. Comme chaque consommateur s'abonne indépendamment, vous pourrez ajouter plus tard un historien, un tableau andon ou un calculateur de TRS sans toucher aux postes.

Étape 1 : concevoir la structure des topics

Une arborescence de topics prévisible fait gagner des heures par la suite. Utilisez une hiérarchie de type ISA-95 afin que le tableau de bord puisse filtrer par ligne et par poste avec des jokers :

connectmq/demo/<your-id>/line1/<station>/status

Par exemple connectmq/demo/a7f3k9/line1/filler/status. Le payload est un unique objet JSON :

{
  "state": "RUNNING",
  "good": 1842,
  "reject": 17,
  "rate": 58.5,
  "ideal_rate": 60,
  "ts": 1792137600
}

Les compteurs sont cumulés sur le poste de travail, ce qui rend les données robustes : si un message est perdu, le suivant porte toujours le bon total. Les cadences sont exprimées en pièces par minute. Ajoutez un niveau entreprise et site devant la ligne lorsque vous déployez sur plus d'une usine.

Étape 2 : simuler les postes

Pour construire le tableau de bord avant que la vraie ligne ne soit raccordée, lancez ce simulateur Python. Il utilise paho-mqtt 2.x et le serveur MQTT public gratuit broker.connectmq.com. Remplacez a7f3k9 par votre propre identifiant aléatoire, car l'espace public est lisible par tout le monde.

import json
import random
import time

import paho.mqtt.client as mqtt

PREFIX = "connectmq/demo/a7f3k9/line1"
STATIONS = {"filler": 60, "capper": 62, "labeler": 65, "packer": 58}

client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="line1-sim-a7f3k9")
client.connect("broker.connectmq.com", 1883, keepalive=30)
client.loop_start()

counters = {name: {"good": 0, "reject": 0, "state": "RUNNING"} for name in STATIONS}

try:
    while True:
        for name, ideal in STATIONS.items():
            c = counters[name]
            # Change d'état de temps en temps pour animer le tableau de bord
            roll = random.random()
            if c["state"] == "RUNNING" and roll < 0.03:
                c["state"] = random.choice(["DOWN", "IDLE"])
            elif c["state"] != "RUNNING" and roll < 0.25:
                c["state"] = "RUNNING"

            rate = 0.0
            if c["state"] == "RUNNING":
                rate = round(ideal * random.uniform(0.85, 1.0), 1)
                made = int(rate / 12)  # environ 5 secondes de production
                rejects = 1 if random.random() < 0.04 else 0
                c["good"] += made - rejects
                c["reject"] += rejects

            payload = {
                "state": c["state"],
                "good": c["good"],
                "reject": c["reject"],
                "rate": rate,
                "ideal_rate": ideal,
                "ts": int(time.time()),
            }
            client.publish(f"{PREFIX}/{name}/status", json.dumps(payload), qos=1, retain=True)
        time.sleep(5)
except KeyboardInterrupt:
    client.loop_stop()
    client.disconnect()

Quatre postes publiant toutes les cinq secondes restent largement sous la limite du broker public de 10 messages par seconde et par client. Le flag retain garantit qu'un tableau de bord qui se connecte en cours de poste reçoit immédiatement le dernier état connu de chaque poste. Vérifiez le flux depuis un terminal :

mosquitto_sub -h broker.connectmq.com -p 1883 -i viewer-a7f3k9 -t "connectmq/demo/a7f3k9/line1/+/status" -v

Étape 3 : stocker les données avec Telegraf et InfluxDB

Le consommateur MQTT de Telegraf transforme chaque message en point InfluxDB, et l'analyse des topics extrait la ligne et le poste sous forme de tags. Enregistrez ceci dans telegraf.conf :

[agent]
  interval = "5s"
  flush_interval = "5s"

[[inputs.mqtt_consumer]]
  servers = ["tcp://broker.connectmq.com:1883"]
  topics = ["connectmq/demo/a7f3k9/line1/+/status"]
  client_id = "telegraf-a7f3k9"
  qos = 1
  data_format = "json"
  json_string_fields = ["state"]
  json_time_key = "ts"
  json_time_format = "unix"

  [[inputs.mqtt_consumer.topic_parsing]]
    topic = "connectmq/demo/+/+/+/status"
    measurement = "_/_/_/_/_/measurement"
    tags = "_/_/_/line/station/_"

[[outputs.influxdb_v2]]
  urls = ["http://localhost:8086"]
  token = "YOUR_INFLUX_TOKEN"
  organization = "plant"
  bucket = "line"

Chaque point arrive dans la mesure status avec les tags line=line1 et station=filler, ainsi que les champs state, good, reject, rate et ideal_rate. En production, passez le serveur à ssl://broker.connectmq.com:8883 et ajoutez username = "YOUR_USERNAME", password = "YOUR_PASSWORD" ainsi que le client_id qui vous a été attribué. D'autres options sont détaillées dans le guide du consommateur MQTT de Telegraf.

Étape 4 : construire le tableau de bord de suivi de ligne de production dans Grafana

Ajoutez InfluxDB comme source de données dans Grafana (langage de requête Flux) et créez les panneaux suivants.

Tuiles d'état des postes. Utilisez un panneau Stat avec des correspondances de valeurs : RUNNING en vert, IDLE en jaune, DOWN en rouge, SETUP en bleu.

from(bucket: "line")
  |> range(start: -5m)
  |> filter(fn: (r) => r._measurement == "status" and r._field == "state")
  |> last()
  |> group(columns: ["station"])

Pièces bonnes sur le poste. Les compteurs étant cumulés, la dernière valeur donne le total :

from(bucket: "line")
  |> range(start: today())
  |> filter(fn: (r) => r._measurement == "status" and r._field == "good" and r.station == "packer")
  |> last()

Prenez le dernier poste de la ligne (ici l'encaisseuse) comme sortie de ligne ; compter à chaque poste revient à compter plusieurs fois les mêmes pièces.

Cadence vs cadence idéale. Un panneau Time series avec rate et ideal_rate par poste révèle le goulot d'un coup d'œil : c'est le poste dont la cadence réelle reste la plus éloignée de sa cadence idéale lorsqu'il tourne.

Chronologie des états. Le panneau State timeline de Grafana, alimenté par le champ state, affiche une barre par poste colorée selon l'état sur toute la durée du poste de travail : c'est le moyen le plus rapide de voir quand et où la ligne s'est arrêtée.

Jauge de TRS. Pour une première version, calculez le TRS (OEE) dans un abonné séparé et publiez le résultat sur line1/oee, puis tracez ce topic. Le calcul est expliqué dans comment calculer le TRS, et le tutoriel de suivi du TRS en temps réel contient un abonné prêt à l'emploi. Faire le calcul une seule fois, en dehors de Grafana, garantit que tous les écrans affichent le même chiffre.

Alternative Node-RED pour une seule ligne

Si vous avez seulement besoin d'un écran près d'une ligne et ne voulez pas de base de séries temporelles, Node-RED est plus rapide. Configurez un nœud de configuration mqtt-broker avec le serveur broker.connectmq.com et le port 1883 (ou 8883 avec TLS et vos identifiants en production), puis ajoutez :

  1. Un nœud mqtt in abonné à connectmq/demo/a7f3k9/line1/+/status, avec une sortie en objet JSON analysé.
  2. Un nœud function qui extrait le nom du poste avec msg.topic.split("/")[4] et l'oriente vers le bon widget.
  3. Des widgets Dashboard 2.0 ui-text pour l'état, ui-gauge pour la cadence et un ui-chart pour les pièces bonnes.

Le compromis porte sur l'historique : Node-RED montre bien le présent mais n'est pas un historien. Beaucoup d'usines utilisent les deux, avec Node-RED sur l'écran de ligne et Grafana pour la revue de poste. L'article sur le tableau de bord TRS sous Node-RED va plus loin dans cette approche.

Pièges courants et comment les éviter

  • Les compteurs repartent à zéro en cours de poste. Un redémarrage de l'automate ou de la passerelle efface son compteur. Stockez la référence de début de poste en périphérie, ou faites utiliser au tableau de bord difference() avec nonNegative: true afin que les remises à zéro ne créent pas de production négative.
  • Les tuiles affichent un RUNNING périmé. Si un poste se déconnecte, son message retenu indique toujours RUNNING. Ajoutez le champ ts à la tuile et passez-la en gris au-delà de 30 secondes, ou utilisez un message MQTT Last Will qui publie OFFLINE.
  • Client ID en double. Deux instances Telegraf avec le même client ID vont s'éjecter mutuellement en permanence. Chaque client a besoin d'un identifiant unique.
  • Trop de panneaux. Si l'écran de l'atelier doit défiler, il est trop chargé. Déplacez le détail vers un tableau de bord d'exploration.

De la démo à la production

Le broker public est parfait pour construire, mais ses topics sont visibles par tous. Pour une vraie ligne, passez à un broker privé : un broker MQTT managé vous libère des mises à jour et du dimensionnement d'un serveur, et un broker MQTT cloud permet aux responsables à distance et au siège de consulter le même tableau de bord. Avec ConnectMQ, vous créez le broker dans le portail, obtenez un nom d'utilisateur, un mot de passe et un client ID, et ne modifiez que les paramètres de connexion du simulateur, de Telegraf et de Node-RED. L'explorateur de topics en direct du portail est pratique pour confirmer que chaque poste publie bien avant de déboguer un panneau Grafana vide.

L'offre Serverless (Free) prend en charge jusqu'à 25 connexions, ce qui couvre une ligne pilote avec sa passerelle, Telegraf et quelques tableaux de bord. Les usines plus importantes passent généralement à l'offre Serverless (Paid) ou à un cluster Dedicated à mesure que de nouvelles lignes sont raccordées. Pour la stratégie d'ensemble, consultez le guide de l'industrie connectée.

Démarrer avec ConnectMQ

Créez un broker gratuit sur app.connectmq.com avec l'offre Serverless, sans carte bancaire, pointez-y vos postes et Telegraf, et faites tourner dès aujourd'hui un tableau de bord de ligne de production sur une infrastructure privée.

Questions fréquentes

Faut-il utiliser Grafana ou Node-RED pour un tableau de bord de ligne de production ?

Utilisez Grafana lorsque vous avez besoin d'historique, de comparaisons entre postes et de nombreux utilisateurs ; utilisez Node-RED pour un affichage en direct rapide sur une seule ligne. Beaucoup d'équipes utilisent les deux à partir des mêmes topics MQTT.

À quelle fréquence les postes doivent-ils publier leur état ?

Publiez immédiatement à chaque changement d'état et envoyez un heartbeat toutes les 5 à 10 secondes. Les tuiles restent à jour sans inonder le broker.

Peut-on connecter les automates directement ?

La plupart des automates ont besoin d'une passerelle en périphérie (Node-RED, un convertisseur de protocole ou le client MQTT intégré à l'automate) qui lit les variables et publie du JSON vers le broker. Une fois les données sur MQTT, le tableau de bord ne se soucie pas de leur provenance.

Le broker public convient-il à de vraies données de production ?

Non. L'espace public de broker.connectmq.com est lisible par tout le monde : utilisez-le uniquement pour des tests et déplacez les données de production vers un broker ConnectMQ privé avec identifiants et TLS.

Articles liés

TRS (OEE) vs TEEP vs OOE : quel indicateur utiliser ?

Le TRS (OEE), l'OOE et le TEEP partagent les mêmes facteurs de performance et de qualité, mais se mesurent sur des bases de temps différentes. Ce comparatif déroule un exemple unique et liste les signaux MQTT nécessaires à chaque indicateur.

7 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.