DEV Community

Jean-Pierre
Jean-Pierre

Posted on

Tempo EDF en Python : calculer ce que va coûter la journée de demain

Avec l'option Tempo d'EDF, le prix du kWh change chaque jour selon une couleur : bleu, blanc ou rouge. On sait en général qu'un jour rouge coûte cher, mais rarement combien pour sa propre maison. Voici un petit script Python, sans dépendance, qui fait le calcul à partir de votre consommation habituelle.

Je porte Calendrier Tempo, un projet indépendant qui publie la couleur Tempo, des prévisions et une API Tempo gratuite, sans compte ni clé. C'est elle que le script interroge.

Ce que renvoie l'API

/api/today donne la couleur du jour, mais aussi la grille tarifaire complète en vigueur :

curl -L https://www.calendrier-tempo.fr/api/today
Enter fullscreen mode Exit fullscreen mode

Extrait de la réponse du 23 octobre :

"tarifs": {
  "date_effet": "2026-08-01",
  "unite": "EUR/kWh TTC",
  "heures_pleines": "06:00-22:00",
  "heures_creuses": "22:00-06:00",
  "couleurs": {
    "BLEU":  {"hp": 0.1654, "hc": 0.1356},
    "BLANC": {"hp": 0.1921, "hc": 0.1536},
    "ROUGE": {"hp": 0.7295, "hc": 0.1615}
  }
}
Enter fullscreen mode Exit fullscreen mode

/api/predictions liste les jours à venir. Chaque jour porte un champ confirmed : true quand la couleur a été publiée par EDF (aujourd'hui, et demain dès sa publication, généralement en fin de matinée), false pour une prévision.

Le script

import json
import urllib.request

API = "https://www.calendrier-tempo.fr/api"

# Votre consommation type d'une journée d'hiver, en kWh (à adapter)
CONSO_HP = 18  # de 6 h à 22 h
CONSO_HC = 10  # de 22 h à 6 h


def lire(chemin):
    with urllib.request.urlopen(f"{API}/{chemin}", timeout=10) as r:
        return json.load(r)


grille = lire("today")["tarifs"]["couleurs"]


def cout(couleur):
    t = grille[couleur]
    return CONSO_HP * t["hp"] + CONSO_HC * t["hc"]


bleu = cout("BLEU")
print(f"Journée bleue de référence : {bleu:.2f} €")

for jour in lire("predictions")["predictions"]:
    if not jour["confirmed"]:
        continue  # on ne chiffre que les couleurs publiées par EDF
    c = jour["couleur_predite"]
    print(f"{jour['date']} {c:<5} {cout(c):6.2f} €  ({cout(c) - bleu:+.2f} € par rapport à un jour bleu)")
Enter fullscreen mode Exit fullscreen mode

Sortie ce matin, avec 18 kWh en heures pleines et 10 kWh en heures creuses :

Journée bleue de référence : 4.33 €
2026-10-23 BLEU    4.33 €  (+0.00 € par rapport à un jour bleu)
2026-10-24 BLEU    4.33 €  (+0.00 € par rapport à un jour bleu)
Enter fullscreen mode Exit fullscreen mode

Rien de spectaculaire en octobre : les jours rouges ne peuvent tomber qu'entre le 1er novembre et le 31 mars (cette saison, pas avant le lundi 2 novembre, le 1er étant un dimanche). Avec la même consommation, un jour blanc reviendrait à 4,99 € et un jour rouge à 14,75 €, soit 10,41 € de plus qu'un jour bleu.

Ce que le calcul montre

Presque tout l'écart vient des heures pleines. La nuit, le kWh rouge (0,1615 €) coûte même un peu moins que le kWh bleu de jour (0,1654 €). Déplacer 8 kWh des heures pleines vers les heures creuses un jour rouge (chauffe-eau, lave-linge, recharge d'une voiture) fait économiser environ 4,54 € sur cette seule journée.

Le script ne chiffre que les jours confirmés : au-delà de demain, la couleur n'est qu'une prévision.

Pour aller plus loin

  • Lancer le script chaque jour vers midi (cron, tâche planifiée) : la couleur de demain est alors en principe publiée.
  • Pour les jours suivants, /api/predictions donne aussi probabilite_bleu, probabilite_blanc et probabilite_rouge : en pondérant cout() par ces probabilités, on obtient un ordre de grandeur, pas un montant.
  • Remplacer les deux constantes par vos vrais relevés : la consommation d'un jour d'hiver n'a rien à voir avec celle d'octobre.
  • Pour vérifier d'un coup d'œil sans script : la couleur Tempo de demain et le calendrier Tempo de la saison.

Les tarifs sont ceux de la grille en vigueur depuis le 1er août 2026 ; vérifiez ceux de votre contrat. Si vous voyez une erreur dans le code ou dans les chiffres, dites-le en commentaire.

Top comments (0)