Accès à la couleur du jour Tempo EDF (électricité de France)

Bonjour,
J’aimerais pouvoir utiliser la couleur tempo EDF du jour et du lendemain avec mon Homey.

J’ai trouvé sur le net des exemples d’appel au services EDF :
https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant=2022-10-12
ou
https://particulier.edf.fr/services/rest/referentiel/getNbTempoDays

Dans un navigateur, s’affiche bien le résultat attendu, sous forme json.
Mais dans les scripts (avancés) de Homey, faire une requête HTTP GET avec ces url ne fonctionne pas, Network request fail.

Dans les mêmes conditions, faire la requette HTTP GET avec l’url de la vidéo de démonstration https://api.chucknorris.io/jokes/random fonctionne

Une idée pour me débloquer ? Merci.
Jacques

J’ai essayé et je pense que c’est l’API EDF qui déconne. Elle renvoie une erreur.
Car avec celle de Chuck Norris cela fonctionne.

Je partage le code au cas ou…

Pour récupérer sous forme de String (String = chaine de caractère, lettre et chiffre comme un texte. Par exemple " Nous sommes le 24 Novembre 2022")

const message = JSON.parse(args[0]); //(args[0]) pour le premier argument dans la carte de flow, (args[1]) pour le second...
await tag('Extract Message', (message.value)); //"Extract Message" est le nom que vous souhaitez donner au tag 
return true; //true pour valider dans la carte de flow sinon elle s'exécutera mais comme si ce n'était pas valide

Pour récupérer sous forme de Number donc uniquement des chiffres:

//Par exemple la requête HTTP renvoi: {"name": "Temperature Nantes", "temperature": "21"}
const message = JSON.parse(args[0]);
await tag('Extract Message', Number(message.temperature));
return true;

Le Flow est le suivant:

J’ai réussi.

Le code Homey Script est le suivant:

// Create the request
const res = await fetch('https://particulier.edf.fr/services/rest/referentiel/getNbTempoDays');
if (!res.ok) {
  throw new Error(res.statusText);
}

// Get the body JSON
const body = await res.json();

var blanc = parseFloat(`${body.PARAM_NB_J_BLANC}`)
var rouge = parseFloat(`${body.PARAM_NB_J_ROUGE}`)
var bleu = parseFloat(`${body.PARAM_NB_J_BLEU}`)

await tag('Jour Blanc', Number(blanc));
await tag('Jour Rouge', Number(rouge));
await tag('Jour Bleu', Number(bleu));

return true;

Le flow:

Bravo Sébastien, tu as trouvé une bonne solution à mon problème.
Grand merci à toi.
Reste à comprendre pourquoi le “Faire une requête HTTP” dans un flow ne fonctionne pas avec une url qui fonctionne bien avec le “fetch” dans un script homey (ou dans un navigateur)

De rien, j’ai adapté un des exemples qui était dans Homey Script.
Je pense que la requête HTTP attend une réponse alors que le fetch récupère simplement ce qui est dans la page sans rien attendre en retour.

Le code peut être raccourci à:

// Create the request
const res = await fetch('https://particulier.edf.fr/services/rest/referentiel/getNbTempoDays');
if (!res.ok) {
  throw new Error(res.statusText);
}

// Get the body JSON
const body = await res.json();

await tag('Jour Blanc', Number(parseFloat(`${body.PARAM_NB_J_BLANC}`)));
await tag('Jour Rouge', Number(parseFloat(`${body.PARAM_NB_J_ROUGE}`)));
await tag('Jour Bleu', Number(parseFloat(`${body.PARAM_NB_J_BLEU}`)));
return true;

Bonjour,
Je lis avec intérêt votre script permettant de récupérer le nombre de jours Bleu blanc et rouge qui fonctionne très bien :hugs:

Avez-vous réussi à faire de même pour la couleur du jour et du J+1 :
https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant=2022-10-12
(Avec la variable du jour du rapport)

En reprenant le script, je n’arrive pas à le modifier pour obtenir cela :sweat:

Merci !

Bonjour NicoJ,

Voici le script que j’utilise :

//
// EDFTempo.js
//

// ==========================
// Jours restants par couleur
// ==========================

var res = await fetch('https://particulier.edf.fr/services/rest/referentiel/getNbTempoDays');


if (!res.ok) {
  throw new Error(res.statusText);
}

// Get the body JSON
var body = await res.json();

var blanc = parseFloat(`${body.PARAM_NB_J_BLANC}`)
var rouge = parseFloat(`${body.PARAM_NB_J_ROUGE}`)
var bleu = parseFloat(`${body.PARAM_NB_J_BLEU}`)

console.log(body)


await tag('EDF reste Jour Blanc', Number(blanc));
await tag('EDF reste Jour Rouge ', Number(rouge));
await tag('EDF reste Jour Bleu', Number(bleu));

// ==========================
// Couleur du jour et du lendemain
// ==========================

var sys = await Homey.system.getInfo ();
var sToday = sys.date.substring(0,10);

res = await fetch('https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant='+sToday);

if (!res.ok) {
  throw new Error(res.statusText);
}
body = await res.json()

var EDFCouleurJour = (`${body.couleurJourJ}`)
var EDFCouleurDemain = (`${body.couleurJourJ1}`)

// enlever TEMPO_
// et remplacer UNDEFINED par Inconnu

if (EDFCouleurJour.substring(0,6)== "TEMPO_")
  {
  EDFCouleurJour= EDFCouleurJour.substring(6)
  }

if (EDFCouleurDemain.substring(0,6)== "TEMPO_")
  {
  EDFCouleurDemain= EDFCouleurDemain.substring(6)
  }
else
  {
  EDFCouleurDemain= "Inconnu"
  }

console.log(EDFCouleurJour)
console.log(EDFCouleurDemain)


await tag('EDF Couleur Jour', EDFCouleurJour);
await tag('EDF Couleur Demain', EDFCouleurDemain);



return true;

Et voici comment tu peux le tester :

Bonne journée,
Jacques

1 Like

Tu peux utiliser ce code:

let today = new Date()
let todayFormatted = today.toISOString().split('T')[0]

const res = await fetch('https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant='+ todayFormatted)

if (!res.ok) {
  throw new Error(res.statusText);
}

// Get the body JSON
const body = await res.json();

await tag('Jour J', (`${body.couleurJourJ}`));
await tag('Jour J+1', (`${body.couleurJourJ1}`));
return true;

image

1 Like

Super, merci à tous les deux, ça fonctionne au top :hugs:

Bonjour Jacques,

J’ai utilisé ton code pour récupérer la couleur des jours Tempo, merci beaucoup !!

J’aimerai pouvoir créer un scénario de type, si demain est un jour Rouge (Donc demain à 6h), éteindre telle prise toute la journée par exemple.

Comment puis je insérer cette condition ?

Merci par avance,

Cordialement,

Alexandre

Bonjour,

Ou le faire directement le jour J à 6h01:

Merci beaucoup !

Bonjour Alexandre,

Pour compléter la réponse de Sébastien, n’oublie pas quand il est 6 heure (pourquoi attendre 6:01 ?) d’exécuter le script EDFTempo pour mettre à jour la variable EDFCouleurJour avant de l’utiliser pour voir si elle contient “ROUGE”…
Ou alors, tu exécutes le script tous les jours à midi (en réalité après 11 heure quand la couleur du lendemain est connue) et tu testes la variable EDFCouleurDemain à 6 heure.

Mais pour tester en réel il va falloir attendre parce que là on est parti pour quelques mois de jours bleus et c’est tant mieux :wink:

Jacques

J’ai pensé à 6h01 pour être sur que ce soit changé. S’ils changent pile à 6h et que Homey fait la demande à 6h y’aura peut être un croisement d’information. Mais je me trompe peut être. A tester.

Salut Sebastien et Alexandre,

Pour info, au jour J, à n’importe quelle heure on peut demander la couleur Tempo du jour. Mais il faut attendre 11h pour connaitre la couleur du lendemain.

1 Like

Merci pour vos reponses a tous.

J’ai encore un soucis, tous les jours depuis l’installation du script il reste 77 jours bleu…

D’ou cela vient il ?

Cordialement,

Alexandre

Bonsoir Alexandre,

Est-ce que tu fais exécuter (au moins une fois par jour) le script EDFTempo.js ?
C’est lui qui met à jour les différentes variables (EDF reste Jour Bleu, etc)

Suis-je clair ?

Cordialement,
Jacques

Bonjour Jacques,

En effet, je n’avais rien fait de ce côté…
Je viens de créer un flow d’exécution du script tous les jours à 8h.
Est ce correct ?

Sinon, si je le mets en amont des notifications comme sur ma capture, ca suffira ?

Cordialement,

Alexandre

Bonjour Alexandre,
Ça me semble mieux.
Tu peux vérifier tes résultats avec
https://particulier.edf.fr/fr/accueil/gestion-contrat/options/tempo.html#/selection-bp

Bonne journée,
Jacques

Merci Jacques,

Décidément, je ne suis pas doué pour le moment dans les flows…
Pourquoi tous les résultats sont vrais ?