Bonjour j'utilise la library ayushsharma82/AsyncElegantOTA @ ^2.2.5. Je cherche une méthode pour renouveler le token pour mon compte enphase .
Il existe diffèrent tuto en python ou en shell script .
Avez vous une idée d un petit code en C pour faire la même fonction ? Doc get token
j ai realiser ce test
Get a token programmatically through GET on a URL
Follow the procedure to retrieve a token programmatically. Enphase provides a URL to retrieve a
token and mentions the duration for which the token is valid.
To construct the correct URL for the IQ Gateway:
Paste the token retrieval URL into the web browser’s address bar:
Bon ça veut dire que le serveur n’a pas répondu….
Il faut que je passe le code en https sans doute
Je suis sur mon iPhone pour 48h donc ce ne sera pas pour tout de suite
Décidément =O Merci pour ton exemple il fonctionne parfaitement .
Du premier coup , ce ne doit pas être facile depuis un iPhone en plus .
=) a moi le boulot maintenant
Bonsoir J-M-L , le code fonctionne parfaitement isolé par contre lorsque je le charge sur mon projet j obtient toujours Échec de la requête d'authentification Enphase .
Pense tu que cela puisse venir d une gestion trop lente de la requête par l esp ?
#ifndef ENPHASE_TOKEN_RENEW
#define ENPHASE_TOKEN_RENEW
#include <Arduino.h>
#include <FS.h>
#include "../config/config.h"
#include "../config/enums.h"
#include "../functions/Mqtt_http_Functions.h"
#include "SPIFFS.h"
#include "config/enums.h"
extern Config config;
#define user "test@gmail.com"
#define passwordEnphase "test"
const char* envoySerial = "100145076996";
const char* url = "https://enlighten.enphaseenergy.com/login/login.json?";
const char* data = "user[email]=" user "&user[password]=" passwordEnphase;
void authenticateEnphase() {
//SessionId.clear();
Serial.print("voici l'url=");
Serial.println(url);
Serial.print("voici les data=");
Serial.println(data);
WiFiClientSecure client;
HTTPClient http;
client.setInsecure(); // pour le moment on peut faire comme cela
http.begin(client, url);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
int httpResponseCode = http.POST(data);
if (httpResponseCode > 0) {
String response = http.getString();
DynamicJsonDocument doc(1024);
deserializeJson(doc, response);
const char* sessionId = doc["session_id"]; // Récupération de la session_id
// Construction des données pour la deuxième requête POST
String urlTokens = "https://entrez.enphaseenergy.com/tokens";
String dataTokens = "{\"session_id\":\"" + String(sessionId) + "\",\"serial_num\":\"" + String(envoySerial) + "\",\"username\":\"" + String(user) + "\"}";
// Envoi de la deuxième requête POST
http.begin(client, urlTokens); // Utilisation de WiFiClientSecure avec l'URL HTTPS
http.addHeader("Content-Type", "application/json");
httpResponseCode = http.POST(dataTokens);
if (httpResponseCode > 0) {
String tokenRaw = http.getString();
Serial.print("Token : ");
Serial.println(tokenRaw);
} else {
Serial.println("Échec de la requête pour obtenir le token");
config.countbadtoken = 0;
config.renewtoken = false;
}
http.end();
} else {
Serial.println("Échec de la requête d'authentification Enphase");
config.countbadtoken = 0;
config.renewtoken = false;
}
}
#endif
Voici le log terminal
voici l'url=https://enlighten.enphaseenergy.com/login/login.json?
voici les data=user[email]=test@gmail.com&user[password]=test
Échec de la requête d'authentification Enphase
J'essaye de comprendre mon erreur . Merci pour ton aide précieuse
oops j ai modifié mon message du dessus entre temps
les codes secret mentionné dans la discussion sont des exemples mais dans mon code il sont identique a ceux utilisés dans votre code qui fonctionne .
J ai ajouté ce petit debug pour vérifier l intégrité des données
les fonctions suivante sont désactivé si la fonction de récupération du token est lancé
par mesure de précaution j ai rajouter un https.end(); en debut de void authenticateEnphase()
cela vous semble t il logique ?
Sans résultat malheureusement
Sur votre exemple la récupération prend bien 8 secondes .
J ai l'impression que dans mon code cela prend trop de temps et la tache est terminé avant la réponse du serveur