← Retour aux réalisations

Stage 1ère année · Aspen NDB

Dashboard
Sauron — Ligne 27

Mise en place d'un flux Node-RED automatisé, de requêtes SQL et d'un tableau de bord Grafana pour le suivi de la performance industrielle d'une ligne de production.

SQL PostgreSQL Node-RED Grafana JavaScript Industrie pharmaceutique

Présentation

Contexte du stage

Stage de 1ère année réalisé du 26 mai au 23 juin 2026 chez Aspen Notre Dame de Bondeville (Aspen NDB), site industriel pharmaceutique produisant des principes actifs et des seringues préremplies. J'ai intégré le service Applications de la DSI, en charge des outils IT et OT (systèmes industriels) du site.

Ma mission principale a porté sur Sauron, une solution interne développée pour centraliser et analyser les données de performance industrielle, en remplacement d'un ancien système basé sur des fichiers Excel devenu coûteux, rigide et obsolète.

Architecture

De la collecte à la visualisation

Le projet repose sur une chaîne complète, de la donnée brute au tableau de bord :

API IP21→ Node-RED→ PostgreSQL→ Grafana

Un flux Node-RED que j'ai conçu s'exécute automatiquement chaque jour à 5h : il extrait les données de production, les transforme en JavaScript, génère dynamiquement les requêtes SQL, puis les insère dans la base PostgreSQL (OEE_Ligne27) via un mécanisme d'UPSERT évitant les doublons.

Mission principale

Tableau de bord Grafana — Ligne 27

La Ligne 27 conditionne des seringues préremplies. J'ai développé le dashboard Grafana de suivi en temps réel : production journalière, taux de rejet, état des équipements (THERMO, ASS, ETUY, VIGNET), OEE sur l'heure glissante, production par shift et production hebdomadaire.

J'ai écrit l'ensemble des requêtes SQL du dashboard en m'appuyant sur les lignes déjà en production, corrigé plusieurs bugs (valeurs nulles mal gérées, erreurs de format sur les données horaires, erreurs de calcul des totaux), puis optimisé les requêtes pour réduire le temps de réponse.

Extrait de code

Requête Production J-1

Récupère les trois périodes de la veille (matin, après-midi, soir) avec nombre de seringues et efficacité.

production_j1.sql
-- Production de la veille, triée par intervalle
SELECT intervalle, nb_seringues, efficacite
FROM l27_totaux_jour
WHERE date_jour = CURRENT_DATE - 1
ORDER BY intervalle;

Optimisation — État des équipements

La première version imbriquait une sous-requête ORDER BY ... LIMIT 1 dans un COALESCE, forçant PostgreSQL à exécuter deux étapes. Je l'ai restructurée pour intégrer directement le tri dans la requête principale.

etat_equipements.sql — avant / après
-- AVANT : sous-requête imbriquée dans un COALESCE
SELECT COALESCE(
  (SELECT valeur FROM ip21_tags
   WHERE tag = 'THERMO'
   ORDER BY timestamp DESC LIMIT 1), 0
);

-- APRÈS : tri intégré directement dans la requête principale
SELECT valeur
FROM ip21_tags
WHERE tag = 'THERMO'
ORDER BY timestamp DESC
LIMIT 1;

Problème résolu

Le décalage horaire de production (5h → 5h)

Chez Aspen, une journée de production ne commence pas à minuit mais à 5h du matin. Sans en tenir compte, les indicateurs J-1 et hebdomadaires devenaient incohérents entre eux.

J'ai mis en place un décalage horaire de 5 heures directement dans le script Node-RED : les données entre 00h et 05h sont automatiquement rattachées à la journée précédente, ce qui a aligné les calculs de cumul journalier et les agrégations hebdomadaires sur la réalité terrain.

Résultats

Optimisations et gains obtenus

Le plus gros levier de performance a été la création d'index sur les colonnes les plus utilisées en filtre et en tri :

index.sql
CREATE INDEX idx_marche_timestamp ON "table_marche"(timestamp DESC);
CREATE INDEX idx_libelle_timestamp ON "l27_autre_valeurs"(libelle, timestamp DESC);
CREATE INDEX idx_date_intervalle ON l27_totaux_jour(date_jour, intervalle);
  • Performance — requêtes plus rapides, accès direct aux données via les index
  • Stabilité — requêtes simplifiées, moins de risques d'erreur, meilleure compatibilité Grafana
  • Maintenance — code plus lisible et plus facile à reprendre

Organisation

Méthode Agile & outils de suivi

L'équipe fonctionnait en Agile : points journaliers chaque matin, suivi des tâches sur Fabriq, tableau de gestion de projet sur Planificator et communication via Microsoft Teams. Ce découpage en petites itérations m'a permis d'avancer progressivement et de m'appuyer sur les retours de l'équipe.

Compétences BTS SIO SLAM

Bloc 1.1 → Bloc 1.6

Une sous-compétence par bloc, mobilisée concrètement pendant le stage et illustrée par une capture d'écran ou un schéma à l'appui.

Gérer des sauvegardes
Bloc 1.1 — Gérer le patrimoine informatique
Gérer des sauvegardes
Sous-compétence validée

J'ai mis en place un système de tables historiques dans PostgreSQL (horaire, journalière, hebdomadaire) qui n'existait pas auparavant, créant ainsi un historique fiable et exploitable des données de production de la Ligne 27.

Planifier les activités
Bloc 1.4 — Travailler en mode projet
Planifier les activités
Sous-compétence validée

Mon travail était organisé et suivi via le tableau Kanban Planificator (À faire → En cours → En prod → Clôturer), complété par les points journaliers avec l'équipe pour ajuster les priorités.

Déployer un service
Bloc 1.5 — Mettre à disposition un service informatique
Déployer un service
Sous-compétence validée

Le flux Node-RED que j'ai conçu tourne désormais automatiquement en production tous les jours à 5h, sans intervention manuelle, pour alimenter le dashboard mis à disposition des équipes de la Ligne 27.

Mettre en place son environnement d'apprentissage personnel
Bloc 1.6 — Organiser son développement professionnel
Mettre en place son environnement d'apprentissage personnel
Sous-compétence validée

N'ayant jamais utilisé Node-RED ni PostgreSQL avant le stage, j'ai construit mon propre schéma pour comprendre l'architecture existante avant de m'approprier le projet et de développer en autonomie.

Stack technique

Outils & technologies utilisés

SQL / PostgreSQL — requêtes et optimisation par index
Node-RED — flux d'automatisation et transformation de données
JavaScript — scripts de transformation dans Node-RED
Grafana — conception de tableaux de bord industriels
Méthode Agile — points journaliers, Fabriq, Planificator