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.
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:
// 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;
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;
//
// 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;
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;
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
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.
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.
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)