L'essentiel
Jour Tempo publie une API Tempo gratuite, sans clé ni compte : la couleur d'aujourd'hui et de demain en JSON à l'adresse https://jourtempo.fr/api/v1/tempo.json, et tout l'historique depuis 2014 en CSV. Les couleurs viennent des données officielles de RTE, relevées six fois par jour ; vous trouverez ci-dessous des exemples prêts à copier pour Home Assistant, Jeedom, Domoticz, un ESP32, Python, JavaScript et Google Sheets.
Dans ce guide
Les adresses de l'API
| Adresse | Contenu | Mise à jour |
|---|---|---|
https://jourtempo.fr/api/v1/tempo.json |
couleur d'aujourd'hui et de demain, jours restants de la saison, calendrier de la saison en cours | à chaque changement (bascule de 6 h, annonce de fin de matinée) |
https://jourtempo.fr/api/v1/tempo-historique.csv |
une ligne par jour depuis le 1er septembre 2014 : date, couleur, saison | chaque jour |
https://jourtempo.fr/api/v1/ejp.json |
jour EJP d'aujourd'hui et de demain, compteur des 22 jours | après chaque vérification sur la page d'EDF |
Les trois fichiers sont statiques, servis par le même hébergement que le site, lisibles depuis n'importe quel domaine (en-tête Access-Control-Allow-Origin: *) et mis en cache 2 minutes. Le v1 de l'adresse est une promesse : les champs décrits sur cette page ne changeront ni de nom ni de sens. Si un jour le format doit évoluer, il sortira sous v2 et v1 restera servi.
Le CSV compte aujourd'hui 4 430 jours, sur 13 saisons dont 12 complètes. C'est la même source que notre historique Tempo depuis 2014-2015.
Ce que contient tempo.json
{
"api": "v1",
"documentation": "https://jourtempo.fr/api/",
"attribution": "Source : RTE, API Tempo Like Supply Contract (data.rte-france.com) ; via Jour Tempo (https://jourtempo.fr/api/)",
"source": "RTE, API Tempo Like Supply Contract (data.rte-france.com)",
"collecte_le": "2026-12-03T11:02:41+01:00",
"perime_apres": "2026-12-04T12:00:00+01:00",
"aujourdhui": {"date": "2026-12-03", "code": "blanc", "libelle": "Blanc"},
"demain": {"date": "2026-12-04", "code": "rouge", "libelle": "Rouge"},
"saison": {
"periode": "2026-2027",
"compteurs": {
"bleu": {"quota": 300, "tombes": 90, "restants": 210},
"blanc": {"quota": 43, "tombes": 3, "restants": 40},
"rouge": {"quota": 22, "tombes": 1, "restants": 20}
}
},
"calendrier": {"2026-09-01": "bleu", "...": "..."},
"verifie_le": "2026-12-03T11:02:41+01:00"
}
Exemple raccourci : les couleurs ci-dessus sont fictives. Le fichier réel contient aussi site, source_url, legende et les dates de début et de fin de saison.
| Champ | Contenu |
|---|---|
aujourdhui.code, demain.code |
bleu, blanc ou rouge ; demain.code vaut inconnu tant que RTE n'a pas annoncé la couleur |
aujourdhui.libelle, demain.libelle |
la couleur écrite pour un affichage (« Bleu », « Pas encore annoncée ») |
aujourdhui.date, demain.date |
date du jour Tempo au format AAAA-MM-JJ (un jour Tempo va de 6 h à 6 h le lendemain) |
saison.compteurs.<couleur> |
quota de la saison, jours tombes jusqu'à aujourd'hui inclus, restants (demain déduit dès son annonce) |
calendrier |
toutes les couleurs de la saison en cours, jour par jour, de AAAA-09-01 à demain |
collecte_le |
heure du relevé qui a changé la donnée (heure de Paris, ISO 8601) |
verifie_le |
heure du dernier relevé réussi, même si rien n'a changé |
perime_apres |
au-delà de cette date, la donnée n'est plus vraie : affichez « inconnu » |
source, source_url, attribution |
origine des couleurs (RTE) et texte de crédit prêt à afficher |
Pourquoi inconnu le matin : RTE publie la couleur du lendemain vers 10 h 30. Entre minuit et 6 h, gardez en tête que le jour Tempo n'a pas encore basculé : aujourdhui reste la couleur de la veille jusqu'à 6 h, ce qui correspond à ce que facture EDF. Les détails sont dans notre page sur la couleur Tempo de demain.
Exemples prêts à copier
curl (terminal)
curl -s https://jourtempo.fr/api/v1/tempo.json | python3 -c "import json,sys; d=json.load(sys.stdin); print(d['aujourdhui']['code'], d['demain']['code'])"
# avec jq installé :
curl -s https://jourtempo.fr/api/v1/tempo.json | jq -r '.demain.code'
JavaScript (navigateur ou Node 18+)
const reponse = await fetch("https://jourtempo.fr/api/v1/tempo.json");
const tempo = await reponse.json();
const perime = new Date(tempo.perime_apres) < new Date();
console.log("Aujourd'hui :", tempo.aujourdhui.libelle);
console.log("Demain :", perime ? "inconnu" : tempo.demain.libelle);
console.log("Rouges restants :", tempo.saison.compteurs.rouge.restants);
Python (sans bibliothèque à installer)
import json, urllib.request
req = urllib.request.Request("https://jourtempo.fr/api/v1/tempo.json",
headers={"User-Agent": "mon-script-tempo/1.0"})
with urllib.request.urlopen(req, timeout=10) as r:
tempo = json.load(r)
print("Aujourd'hui :", tempo["aujourdhui"]["libelle"])
print("Demain :", tempo["demain"]["libelle"])
print("Rouges restants :", tempo["saison"]["compteurs"]["rouge"]["restants"])
Et pour compter les jours rouges de chaque saison à partir du CSV :
import csv, io, urllib.request
from collections import Counter
url = "https://jourtempo.fr/api/v1/tempo-historique.csv"
req = urllib.request.Request(url, headers={"User-Agent": "mon-script-tempo/1.0"})
texte = urllib.request.urlopen(req, timeout=10).read().decode("utf-8")
rouges = Counter(l["saison"] for l in csv.DictReader(io.StringIO(texte)) if l["couleur"] == "rouge")
for saison, n in sorted(rouges.items()):
print(saison, n)
Home Assistant : capteurs, « demain rouge » et alerte à 18 h
Dans configuration.yaml, ces lignes créent trois capteurs (sensor.tempo_aujourd_hui, sensor.tempo_demain, sensor.tempo_rouges_restants) et un capteur binaire binary_sensor.tempo_demain_rouge, allumé quand demain est rouge. Redémarrez Home Assistant après l'ajout.
rest:
- resource: https://jourtempo.fr/api/v1/tempo.json
scan_interval: 1800
sensor:
- name: "Tempo aujourd'hui"
unique_id: jourtempo_aujourdhui
value_template: "{{ value_json.aujourdhui.code }}"
json_attributes_path: "$.aujourdhui"
json_attributes: [date, libelle]
- name: "Tempo demain"
unique_id: jourtempo_demain
value_template: "{{ value_json.demain.code }}"
json_attributes_path: "$.demain"
json_attributes: [date, libelle]
- name: "Tempo rouges restants"
unique_id: jourtempo_rouges_restants
value_template: "{{ value_json.saison.compteurs.rouge.restants }}"
unit_of_measurement: "jours"
template:
- binary_sensor:
- name: "Tempo demain rouge"
unique_id: jourtempo_demain_rouge
state: "{{ is_state('sensor.tempo_demain', 'rouge') }}"
L'automatisation, à coller dans automations.yaml (ou dans l'éditeur YAML d'une nouvelle automatisation, sans le tiret du début) : chaque soir à 18 h, si demain est rouge, une notification part.
- alias: "Veille d'un jour rouge Tempo (18 h)"
triggers:
- trigger: time
at: "18:00:00"
conditions:
- condition: state
entity_id: binary_sensor.tempo_demain_rouge
state: "on"
actions:
- action: notify.notify
data:
title: "Demain : jour ROUGE Tempo"
message: >-
Demain ({{ state_attr('sensor.tempo_demain', 'date') }}) est un jour rouge.
Il reste {{ states('sensor.tempo_rouges_restants') }} jours rouges dans la saison.
Cette syntaxe (triggers, trigger:, action:) est celle de Home Assistant depuis la version 2024.10 ; sur une version plus ancienne, écrivez trigger:, platform: time, condition: et service: notify.notify. Vérifiez le nom exact des entités dans Paramètres, Appareils et services, Entités. Pour l'ajouter au calendrier de Home Assistant plutôt qu'en capteur, voyez l'abonnement agenda Tempo.
Jeedom : un virtuel et un scénario
- Créez un équipement Virtuel nommé
Tempo(objetMaison) avec deux commandes info de type autre :AujourdhuietDemain. - Créez un scénario programmé
5 6,11,12,13,18 * * *(6 h 05, 11 h 05, 12 h 05, 13 h 05 et 18 h 05) avec un bloc Code :
$json = @file_get_contents('https://jourtempo.fr/api/v1/tempo.json');
$tempo = $json ? json_decode($json, true) : null;
if (!is_array($tempo)) {
$scenario->setLog('Jour Tempo : pas de réponse, valeurs gardées');
return;
}
cmd::byString('#[Maison][Tempo][Aujourdhui]#')->event($tempo['aujourdhui']['code']);
cmd::byString('#[Maison][Tempo][Demain]#')->event($tempo['demain']['code']);
$scenario->setLog('Jour Tempo : demain ' . $tempo['demain']['code']);
Les commandes valent ensuite bleu, blanc, rouge (ou inconnu pour demain avant l'annonce) et servent de déclencheur à vos autres scénarios, par exemple pour couper le ballon d'eau chaude un jour rouge.
Domoticz : script dzVents
Créez un capteur virtuel de type Texte nommé Tempo demain (Matériel, Dummy), puis ce script dans Configuration, Plus d'options, Événements, dzVents :
return {
on = {
timer = { 'at 06:10', 'at 11:10', 'at 12:10', 'at 13:10', 'at 18:10' },
httpResponses = { 'jourtempo' }
},
execute = function(domoticz, item)
if item.isTimer then
domoticz.openURL({ url = 'https://jourtempo.fr/api/v1/tempo.json', method = 'GET', callback = 'jourtempo' })
elseif item.isHTTPResponse and item.ok and item.isJSON then
local tempo = item.json
domoticz.devices('Tempo demain').updateText(tempo.demain.libelle)
domoticz.log('Jour Tempo : demain ' .. tempo.demain.code, domoticz.LOG_INFO)
end
end
}
Arduino, ESP32 : lampe témoin
Pour un ESP32 avec la bibliothèque ArduinoJson (version 7). Le filtre ne garde que les trois valeurs utiles : la mémoire reste minime même quand le calendrier de la saison s'allonge.
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
const char* WIFI_NOM = "MonWifi";
const char* WIFI_CLE = "MonMotDePasse";
void setup() {
Serial.begin(115200);
WiFi.begin(WIFI_NOM, WIFI_CLE);
while (WiFi.status() != WL_CONNECTED) delay(500);
}
void loop() {
WiFiClientSecure client;
client.setInsecure(); // simple ; pour vérifier le certificat, utilisez client.setCACert()
HTTPClient http;
http.useHTTP10(true); // réponse non découpée : lecture directe par ArduinoJson
http.begin(client, "https://jourtempo.fr/api/v1/tempo.json");
if (http.GET() == 200) {
JsonDocument filtre;
filtre["aujourdhui"]["code"] = true;
filtre["demain"]["code"] = true;
filtre["saison"]["compteurs"]["rouge"]["restants"] = true;
JsonDocument tempo;
if (!deserializeJson(tempo, http.getStream(), DeserializationOption::Filter(filtre))) {
const char* demain = tempo["demain"]["code"]; // "bleu", "blanc", "rouge" ou "inconnu"
Serial.printf("Aujourd'hui %s, demain %s\n", (const char*)tempo["aujourdhui"]["code"], demain);
// ici : allumer la LED de la bonne couleur
}
}
http.end();
delay(30UL * 60 * 1000); // un relevé toutes les 30 minutes
}
Google Sheets : l'historique dans un tableur
Dans une cellule vide, cette formule charge tout l'historique (trois colonnes : date, couleur, saison) et se recharge seule toutes les heures environ :
=IMPORTDATA("https://jourtempo.fr/api/v1/tempo-historique.csv")
Puis, pour compter les jours rouges d'une saison (tableur réglé en français, séparateur ;) :
=NB.SI.ENS(C:C;"2025-2026";B:B;"rouge")
Le même CSV s'ouvre dans Excel ou LibreOffice (Données, À partir d'un fichier texte ou CSV, séparateur virgule).
Le code de ces exemples est libre (licence MIT) : copiez-le, modifiez-le, redistribuez-le. Tous les fichiers sont aussi sur GitHub : github.com/jourtempo/jourtempo-api (suggestions et nouveaux exemples bienvenus). Pour un affichage sans programmation, le widget Tempo à intégrer fait le même travail en une ligne de code.
Conditions d'utilisation
- Gratuit, sans clé, sans inscription, pour un usage personnel comme professionnel, y compris dans une application ou un site commercial.
- D'où viennent les droits : les couleurs Tempo sont des données publiques de RTE. Leurs conditions d'utilisation (article 9) autorisent leur réutilisation à une seule condition : mentionner la source. Nos fichiers (la mise en forme, les compteurs calculés, l'historique en CSV) sont proposés sous Licence Ouverte 2.0, qui demande la même chose.
- Crédit : si vous affichez ces données publiquement, citez RTE comme source et Jour Tempo comme diffuseur, avec
un lien vers
https://jourtempo.fr, et la date de mise à jour quand c'est possible. Le champattributiondu JSON contient un texte prêt à afficher, le champcollecte_lela date. - Pas de dénaturation : n'affichez jamais une couleur devinée comme si elle venait de RTE. Quand
demain.codevautinconnu, ou queperime_apresest dépassé, affichez « inconnu ». - Indépendance : Jour Tempo n'est ni EDF ni RTE. N'utilisez pas leurs logos à côté de nos données et ne présentez pas ce service comme officiel.
- Bon usage : un appel toutes les 30 minutes suffit (la couleur change une fois par jour) ; jamais plus d'un appel toutes les 10 minutes par appareil. Un usage abusif peut être bloqué sans préavis.
- Sans garantie : nous ne publions jamais une couleur supposée, mais une panne de la source ou de notre relevé peut retarder une mise à jour. Pour piloter un appareil coûteux, prévoyez un comportement par défaut.
- Contact : une question, une erreur, un besoin d'un autre format ? Écrivez à contact@jourtempo.fr.
Comment citer ces données
Dans un article, un mémoire ou un tableau de données :
Jour Tempo, Historique des couleurs Tempo depuis 2014-2015, d'après les données publiques de RTE (API Tempo Like Supply Contract). https://jourtempo.fr/api/v1/tempo-historique.csv, consulté le [date].
Sous un widget ou un tableau, sur un site :
<p>Couleurs Tempo : RTE, via <a href="https://jourtempo.fr/">Jour Tempo</a> (mise à jour : [date]).</p>
Dans la presse, la formule courte suffit : « selon les données de RTE compilées par Jour Tempo ».
Pour le code des exemples (dépôt https://github.com/jourtempo/jourtempo-api) : licence MIT, copiez-le librement.
D'où viennent les données
Les couleurs Tempo sont fixées et publiées par RTE, le gestionnaire du réseau de transport d'électricité. Jour Tempo les relève sur l'interface de données officielle de RTE à 6 h 05, 11 h, 11 h 30, 12 h, 12 h 30 et 18 h (heure de Paris) ; en secours, une source indépendante, contre-vérifiée sans écart sur les saisons 2023 à 2026, prend le relais. Le site et l'API sont republiés dès qu'une valeur change. L'historique remonte à la saison 2014-2015, la première publiée par RTE sur son interface. Les chiffres de saison que nous en tirons, comme les chances de jour rouge date par date, sont calculés sur ce même fichier.
Pour les jours EJP, EDF est la seule source : aucun relevé automatique n'est autorisé, nous recopions donc l'annonce à la main après l'avoir vérifiée sur la page de l'option EJP d'EDF (fonctionnement de l'option EJP).
Données de la page : relevé du vendredi 16 octobre 2026, source RTE, API Tempo Like Supply Contract (data.rte-france.com).
Journal des changements
| Date | Changement |
|---|---|
| 23 octobre 2026 | ouverture de l'API v1 : tempo.json, ejp.json, tempo-historique.csv |
Questions fréquentes
Existe-t-il une API Tempo gratuite sans clé ?
Oui : https://jourtempo.fr/api/v1/tempo.json donne la couleur Tempo d'aujourd'hui et de demain, sans compte, sans clé et sans inscription. Le fichier est lisible depuis n'importe quel site (CORS ouvert).
À quelle heure la couleur de demain apparaît-elle dans l'API ?
RTE fixe la couleur du lendemain vers 10 h 30. Nos relevés passent à 11 h, 11 h 30, 12 h et 12 h 30, puis le site est republié en quelques minutes : la couleur de demain est en général dans le JSON avant 13 h. Avant, demain.code vaut inconnu.
À quelle fréquence puis-je interroger l'API ?
Toutes les 30 minutes suffisent, puisque la couleur ne change qu'une fois par jour. Ne descendez jamais sous 10 minutes entre deux appels : au-delà, vous risquez d'être bloqué sans prévenir.
Que se passe-t-il si RTE ne répond pas ?
Le fichier garde la dernière valeur relevée, jamais une couleur supposée. Le champ perime_apres indique la date au-delà de laquelle la donnée n'est plus vraie : passé cette date, affichez « inconnu » plutôt qu'une ancienne couleur.
L'API donne-t-elle aussi les jours EJP ?
Oui, dans https://jourtempo.fr/api/v1/ejp.json. Les jours EJP ne sont publiés que par EDF : nous les recopions à la main après vérification sur la page EDF, si bien que le fichier peut avoir quelques heures de retard sur l'annonce.
Puis-je utiliser ces données dans un site ou une application commerciale ?
Oui, gratuitement. Nous demandons seulement de citer RTE comme source des couleurs et Jour Tempo comme diffuseur, avec un lien vers jourtempo.fr, et de ne pas présenter le service comme celui d'EDF ou de RTE.