Aller au contenu
PERINGER Service Informatique, retour à l’accueil

Retour
Rotor et nacelle d’une éolienne en noir et blanc, vus d’en bas

Photo de Matt Artz sur Unsplash

Réalisation d’ingénierie

Boîte à outils Python, R et .NET pour les prévisions des marchés de l’électricité

Recevoir en continu les prévisions de marché électrique de treize pays, les conserver dans des bases locales et les rendre consultables par les analystes dans des tableaux de bord et des outils R.

Énergie et réseauxPythonRSQLiteServer-Sent EventsPlotly DashShiny.NET

Le projet

Un producteur d’énergie suisse actif sur les marchés européens de l’électricité reçoit les prévisions d’un fournisseur de données de marché, Wattsight, devenu Volue Insight, par une API REST et par un flux d’événements Server-Sent Events. Les courbes de consommation, de production renouvelable, de température, de disponibilité des centrales et d’échanges transfrontaliers couvrent treize pays et sont republiées à chaque exécution des modèles météorologiques ECMWF et GFS. Les analystes avaient besoin de ces courbes dans des bases locales interrogeables, avec leur historique, et de tableaux de bord qui suivent chaque nouvelle publication.

Approche technique

Le flux d’événements ne transporte que l’annonce d’une modification. L’écouteur relit la courbe par l’API avant d’écrire, ce qui garantit une série complète et horodatée dans le fuseau CET. Les événements d’ensemble ne sont retenus que pour la moyenne, afin de ne pas multiplier les écritures, et les événements consécutifs sur la même plage sont regroupés. Chaque pays dispose de ses propres processus et de ses propres bases, de sorte qu’une coupure sur un pays n’arrête pas les autres. L’écouteur Python et la bibliothèque R partagent les mêmes catalogues JSON et la même convention de nommage des tables ; le gestionnaire .NET les pilote sans dupliquer leur logique.

Résultat

Treize bases de prévisions et treize bases d’historique SQLite tenues à jour en continu, avec une table par courbe et ses métadonnées, consultables depuis R, depuis l’application Shiny et depuis le gestionnaire. Les tableaux de bord relisent l’API toutes les 30 secondes et affichent les nouvelles prévisions sans intervention.

Mon intervention
  • Écouteur d’événements en Python, un processus par famille de courbes et par pays, abonné au flux Server-Sent Events de l’API. À chaque modification d’une courbe suivie, lecture de la nouvelle instance par l’API et remplacement de la série dans la base SQLite du pays, avec renouvellement du jeton OAuth2, reconnexion du flux et journal quotidien
  • Bibliothèque R documentée dans un manuel R Markdown pour l’authentification, la recherche de courbes, le téléchargement des séries et des instances, la création des bases à partir de catalogues JSON, la reprise de l’historique depuis octobre 2016 et les graphiques Plotly
  • Tableau de bord Plotly Dash par pays, servi en local, qui compare les dernières prévisions de vent, de solaire, de consommation et de température aux exécutions précédentes et aux valeurs réalisées, avec relecture de l’API toutes les 30 secondes
  • Application Shiny pour parcourir n’importe quelle courbe d’une base, en graphique et en tableau
  • Gestionnaire de bureau en .NET et WPF intégrant R par R.NET, pour éditer les catalogues de courbes, créer ou supprimer les tables et lancer les écouteurs et les tableaux de bord de chaque pays, avec prise en charge du proxy d’entreprise

Vue fonctionnelle

Logique de traitement

Parlons de votre projet

Un échange sur la conception, le développement et la mise en production de votre projet.