23-06-2026, 11:06 PM (Modification du message : 23-06-2026, 11:08 PM par Pecheur021.)
bonsoir à tous,
merci pour le super boulot réalisé pour trouver une solution au projet.
je viens de faire la mise a jour en 17.23 et effectivement j'ai bien le token et le ID à OK
mais j'ai toutes les minute un message d’erreur "Envoy Refused request" et toutes les 10 min JSON Reading Timeout 3 / nGlobalIndex=1 nPhaseIndex=1
normal?
je vois plusieurs personnes qui ont désactivé "mDNS", pourquoi faire? quel est le but? faut il le faire?
Pour ceux qui sont en triphasé coté ENEDIS et qui produise sur une unique phase:
est ce que le cas existe? (Production d'un system PV sur une ou deux phases (au moins une phase n'a pas de micro onduleur qui produit)?
si ça existe (et c'est physiquement possible), alors le code contient un autre bug tordu :
dans la 17.23 : la variable "bMonoPhase" se base sur la tension dans le chapeau de la section production (et pas la section échange avec Enedis)
=> si prod sur 1 seul phase alors votre installation/raccordement a Enedis est considéré comme monophasé, la puissance utilisée comme cible par le routeur est basée sur les échanges avec Enedis uniquement sur la phase 1 (il manque 2 et 3 !!!!)
=> si prod sur 2 phases, alors ça devrait le faire, votre installation/raccordement a Enedis sera considéré comme triphasé
Au final ça ne pénalise que les cas maison alimenté Enedis en triphasé mais production PV sur une unique phase
Pour les connaisseurs, j'ai retravaillé une partie du code, ajouter du commentaire, + a mon avis, la partie de code qui calcul le PowerFactor_M peut être supprimé [était basé sur des valeurs lissées] , (en prenant la valeur donnée par la passerelle => on a une valeur entre -1.0 en 100% injection et +1.0 en consommation 100% résistif)
comme d'hab, je ne peux pas tester ce cas spécifique (Raccordé Enedis en tri et production sur 1 unique phase) + vos retours si vous produisez sur une phase qui n'est pas le phase 1 pour la passerelle
Code :
int nGlobalIndex = 0;
int nPhaseIndex = 0;
bool bMonoPhaseProd = true; // production en monophasé
bool bMonoPhaseConso = true; // raccord Enedis en monophasé
// Saute L'entete d'ouverture de la trame JSON.
bTimeout = JSONReadingEnphase(&client, &jsonPayload, '[', TIMEOUT_JSON_READING); // avec l'espoir qu'il n'y aura jamais le caractere '[' dans l'entete
if (bTimeout) {
StockMessage("JSON Reading Timeout 1");
return;
}
float PactProdGlob = 0.0f; // mémorise le global (cumul des 3 phases), sera utilisé dans le cas production en triphasé
float PactProdPh1 = 0.0f; // mémorise la prod sur la phase L1, sera utilisé dans le cas production sur 1 seul phase ( la n°1 )
float PactReseauGlob = 0.0f;
float PactReseauPh1 = 0.0f;
float sommeTensionPhasesEnedis = 0.0f;
for (nGlobalIndex = 0; (nGlobalIndex < 2) && !bJsonLoadingFinished && !bTimeout; nGlobalIndex++) {
// Read Global Topic of current section
bTimeout = JSONReadingEnphase(&client, &jsonPayload, '[', TIMEOUT_JSON_READING);
if (bTimeout) {
StockMessage("JSON Reading Timeout 2 / nGlobalIndex=" + String(nGlobalIndex) + " nPhaseIndex=" + String(nPhaseIndex));
return;
}
delay(1);
if (nGlobalIndex == 0) { // dans la section 0
// long eid = LongJson("eid", jsonPayload); // pour section 0, Production , on attends "eid": 704643328,
PactProdGlob = ValJson("activePower", jsonPayload); // Watt de prod au moment de l'interrogation, utilisé sur un system triphasé
float sommeTensionPhasesProd = ValJson("voltage", jsonPayload); // dans la section 0, recupere la tension a la sortie du system de production
if (sommeTensionPhasesProd > 280.0f) bMonoPhaseProd = false; // bMonoPhaseProd permet de définir si la production est monophasé ou triphasé
} else if (nGlobalIndex == 1) { // dans la section 1 : section échange avec Enedis
// long eid = LongJson("eid", jsonPayload); // pour section 1, Echange avec Enedis, on attends "eid": 704643584,
sommeTensionPhasesEnedis = ValJson("voltage", jsonPayload); // somme des tensions sur chaque phase du réseau Enedis
if (sommeTensionPhasesEnedis > 280.0f) bMonoPhaseConso = false; // on se base sur les tensions cumulées pour décider si l'installation maison est triphase ou monophasé
PactReseauGlob = ValJson("activePower", jsonPayload); // Watt (positif = soutire / négatif = injecte) au moment de l'interrogation sur un system Enedis Triphasé
Frequence = ValJson("freq", jsonPayload); // fréquence réseau Enedis, commun pour chaque phase en triphasé et en monophasé
if (!bMonoPhaseConso) { // cas Enedis en triphasé
PvaReseau = ValJson("apparentPower", jsonPayload);// VA échangé avec Enedis dans le cas production en triphasé
whDlvdCum = ValJson("actEnergyDlvd", jsonPayload);// compteur de Wh injecté dans le cas production en triphasé
whRcvdCum = ValJson("actEnergyRcvd", jsonPayload);// compteur de Wh soutiré dans le cas production en triphasé
PowerFactor_M = ValJson("pwrFactor", jsonPayload);// facteur de puissance pondéré dans le cas production en triphasé
}
}
for (nPhaseIndex = 0; (nPhaseIndex < 3) && !bJsonLoadingFinished && !bTimeout; nPhaseIndex++) {
// Read each Channel of current section, split in 3 subsection, one per phase
bTimeout = JSONReadingEnphase(&client, &jsonPayload, '}', TIMEOUT_JSON_READING);
if (bTimeout) {
StockMessage("JSON Reading Timeout 3 / nGlobalIndex=" + String(nGlobalIndex) + " nPhaseIndex=" + String(nPhaseIndex));
return;
}
jsonPayload += "}";
delay(1);
if ((nGlobalIndex == 0) && (nPhaseIndex == 0)) { // 1er section (Prod) et channel 0 (phase 1)
PactProdPh1 = ValJson("activePower", jsonPayload); // Watt de prod au moment de l'interrogation, utilisé sur un system monophasé traité sur phase 1
PactProd = bMonoPhaseProd ? PactProdPh1 : PactProdGlob; // prend la prod réel selon monophasé ou triphasé (qui ont été recupéré précédement)
} else if ((nGlobalIndex == 1) && (nPhaseIndex == 0)) { // 2nd section (Echange avec Enedis) et channel 0 (phase 1)
Tension_M1 = ValJson("voltage", jsonPayload);
Intensite_M1 = ValJson("current", jsonPayload);
PactReseauPh1 = ValJson("activePower", jsonPayload); // Watt (positif = soutire / négatif = injecte) au moment de l'interrogation sur un system monophasé
PactReseau = bMonoPhaseConso ? PactReseauPh1 : PactReseauGlob; // prend la conso réel selon triphasé ou monophasé (qui ont été recupéré précédement)
// on a la bonne valeur de prod et la bonne valeur échangé avec Enedis, on calcul ce qui est consommé dans la maison
PactConso_M = PactReseau + PactProd; // dans l'hypothese qu'il n'y a pas de l'énergie fournit par une batterie !
if (bMonoPhaseConso) { // raccordé Enedis en monophasé (phase 1)
PvaReseau = ValJson("apparentPower", jsonPayload); // VA échangé avec Enedis dans le cas production en monophasé
whDlvdCum = ValJson("actEnergyDlvd", jsonPayload); // compteur de Wh injecté dans le cas production en monophasé
whRcvdCum = ValJson("actEnergyRcvd", jsonPayload); // compteur de Wh soutiré dans le cas production en monophasé
PowerFactor_M = ValJson("pwrFactor", jsonPayload); // facteur de puissance dans le cas production en monophasé
Tension_M = Tension_M1; // Volt qui seront affichés par le routeur (tiré de la phase 1, dans le cas production en monophasé)
Intensite_M = Intensite_M1; // Ampère qui seront affichés par le routeur (tiré de la phase 1, dans le cas production en monophasé)
}
} else if ((nGlobalIndex == 1) && (nPhaseIndex == 1)) { // 2nd section (Echange avec Enedis) et channel 1 (phase 2)
Tension_M2 = ValJson("voltage", jsonPayload); // Volt phase 2 Enedis en triphasé (et monophasé)
Intensite_M2 = ValJson("current", jsonPayload); // Ampére phase 2 Enedis en triphasé (et monophasé)
} else if ((nGlobalIndex == 1) && (nPhaseIndex == 2)) { // 2nd section (Echange avec Enedis) et channel 2 (phase 3)
Tension_M3 = ValJson("voltage", jsonPayload); // volt phase 3 Enedis en triphasé (et en monophasé proche de zéro)
Intensite_M3 = ValJson("current", jsonPayload); // Ampére phase 3 Enedis en triphasé (et en monophasé normalement proche de zéro ...)
if (!bMonoPhaseConso) { // raccordé Enedis en triphasé
Tension_M = (Tension_M1 + Tension_M2 + Tension_M3) / 3.0f; // affichera une tension moyenne des 3 phases
Intensite_M = (Intensite_M1 + Intensite_M2 + Intensite_M3) / 3.0f; // affichera un courant moyen des 3 phases
} else { // en monophasé, si les info sont toujours sur la phase L1 [ A CONFIRMER ], on met a zéro tension et intensité sur les 2 autres phases
Tension_M2 = Tension_M3 = 0.0f;
Intensite_M2 = Intensite_M3 = 0.0f;
}
bJsonLoadingFinished = true; // termine le scrutage du contenu du JSON
g_nLastGoodReading = millis(); // mémo timestamp de la derniere fois qu'on a reçu une trame suffisante
}
}
}
}
Si les réponses que je propose bénévolement sur ce forum ne vous plaisent pas, ignorez-les simplement sans me jeter la pierre ! (Ou ne posez pas de question)
(23-06-2026, 11:06 PM)Pecheur021 a écrit : bonsoir à tous,
merci pour le super boulot réalisé pour trouver une solution au projet.
je viens de faire la mise a jour en 17.23 et effectivement j'ai bien le token et le ID à OK
mais j'ai toutes les minute un message d’erreur "Envoy Refused request" et toutes les 10 min JSON Reading Timeout 3 / nGlobalIndex=1 nPhaseIndex=1
normal?
je vois plusieurs personnes qui ont désactivé "mDNS", pourquoi faire? quel est le but? faut il le faire?
bonne continuation à tous
Bonsoir,
Il est probable mais pas encore confirmé, que mDNS était aussi incriminé dans le plantage de la passerelle Envoy.
Or, maintenant que le pb est isolé comme il n'y a plus de plantage de la passerelle, c'est le moment pour les volontaires en 5528 (moi je suis tjrs en 5167) de tester si la recherche de l'IP de la passerelle via mDNS (en cochant la case prévue à cet effet, puis en redémarrant le routeur) provoque à nouveau un plantage passerelle.
Si c'est le cas, il faudra laisser cette option décochée le temps de trouver une solution à ce problème.
Pour ceux qui sont en triphasé coté ENEDIS et qui produise sur une unique phase:
est ce que le cas existe? (Production d'un system PV sur une ou deux phases (au moins une phase n'a pas de micro onduleur qui produit)?
si ça existe (et c'est physiquement possible), alors le code contient un autre bug tordu :
dans la 17.23 : la variable "bMonoPhase" se base sur la tension dans le chapeau de la section production (et pas la section échange avec Enedis)
=> si prod sur 1 seul phase alors votre installation/raccordement a Enedis est considéré comme monophasé, la puissance utilisée comme cible par le routeur est basée sur les échanges avec Enedis uniquement sur la phase 1 (il manque 2 et 3 !!!!)
=> si prod sur 2 phases, alors ça devrait le faire, votre installation/raccordement a Enedis sera considéré comme triphasé
Au final ça ne pénalise que les cas maison alimenté Enedis en triphasé mais production PV sur une unique phase
Pour les connaisseurs, j'ai retravaillé une partie du code, ajouter du commentaire, + a mon avis, la partie de code qui calcul le PowerFactor_M peut être supprimé [était basé sur des valeurs lissées] , (en prenant la valeur donnée par la passerelle => on a une valeur entre -1.0 en 100% injection et +1.0 en consommation 100% résistif)
comme d'hab, je ne peux pas tester ce cas spécifique (Raccordé Enedis en tri et production sur 1 unique phase) + vos retours si vous produisez sur une phase qui n'est pas le phase 1 pour la passerelle
Code :
int nGlobalIndex = 0;
int nPhaseIndex = 0;
bool bMonoPhaseProd = true; // production en monophasé
bool bMonoPhaseConso = true; // raccord Enedis en monophasé
// Saute L'entete d'ouverture de la trame JSON.
bTimeout = JSONReadingEnphase(&client, &jsonPayload, '[', TIMEOUT_JSON_READING); // avec l'espoir qu'il n'y aura jamais le caractere '[' dans l'entete
if (bTimeout) {
StockMessage("JSON Reading Timeout 1");
return;
}
float PactProdGlob = 0.0f; // mémorise le global (cumul des 3 phases), sera utilisé dans le cas production en triphasé
float PactProdPh1 = 0.0f; // mémorise la prod sur la phase L1, sera utilisé dans le cas production sur 1 seul phase ( la n°1 )
float PactReseauGlob = 0.0f;
float PactReseauPh1 = 0.0f;
float sommeTensionPhasesEnedis = 0.0f;
for (nGlobalIndex = 0; (nGlobalIndex < 2) && !bJsonLoadingFinished && !bTimeout; nGlobalIndex++) {
// Read Global Topic of current section
bTimeout = JSONReadingEnphase(&client, &jsonPayload, '[', TIMEOUT_JSON_READING);
if (bTimeout) {
StockMessage("JSON Reading Timeout 2 / nGlobalIndex=" + String(nGlobalIndex) + " nPhaseIndex=" + String(nPhaseIndex));
return;
}
delay(1);
if (nGlobalIndex == 0) { // dans la section 0
// long eid = LongJson("eid", jsonPayload); // pour section 0, Production , on attends "eid": 704643328,
PactProdGlob = ValJson("activePower", jsonPayload); // Watt de prod au moment de l'interrogation, utilisé sur un system triphasé
float sommeTensionPhasesProd = ValJson("voltage", jsonPayload); // dans la section 0, recupere la tension a la sortie du system de production
if (sommeTensionPhasesProd > 280.0f) bMonoPhaseProd = false; // bMonoPhaseProd permet de définir si la production est monophasé ou triphasé
} else if (nGlobalIndex == 1) { // dans la section 1 : section échange avec Enedis
// long eid = LongJson("eid", jsonPayload); // pour section 1, Echange avec Enedis, on attends "eid": 704643584,
sommeTensionPhasesEnedis = ValJson("voltage", jsonPayload); // somme des tensions sur chaque phase du réseau Enedis
if (sommeTensionPhasesEnedis > 280.0f) bMonoPhaseConso = false; // on se base sur les tensions cumulées pour décider si l'installation maison est triphase ou monophasé
PactReseauGlob = ValJson("activePower", jsonPayload); // Watt (positif = soutire / négatif = injecte) au moment de l'interrogation sur un system Enedis Triphasé
Frequence = ValJson("freq", jsonPayload); // fréquence réseau Enedis, commun pour chaque phase en triphasé et en monophasé
if (!bMonoPhaseConso) { // cas Enedis en triphasé
PvaReseau = ValJson("apparentPower", jsonPayload);// VA échangé avec Enedis dans le cas production en triphasé
whDlvdCum = ValJson("actEnergyDlvd", jsonPayload);// compteur de Wh injecté dans le cas production en triphasé
whRcvdCum = ValJson("actEnergyRcvd", jsonPayload);// compteur de Wh soutiré dans le cas production en triphasé
PowerFactor_M = ValJson("pwrFactor", jsonPayload);// facteur de puissance pondéré dans le cas production en triphasé
}
}
for (nPhaseIndex = 0; (nPhaseIndex < 3) && !bJsonLoadingFinished && !bTimeout; nPhaseIndex++) {
// Read each Channel of current section, split in 3 subsection, one per phase
bTimeout = JSONReadingEnphase(&client, &jsonPayload, '}', TIMEOUT_JSON_READING);
if (bTimeout) {
StockMessage("JSON Reading Timeout 3 / nGlobalIndex=" + String(nGlobalIndex) + " nPhaseIndex=" + String(nPhaseIndex));
return;
}
jsonPayload += "}";
delay(1);
if ((nGlobalIndex == 0) && (nPhaseIndex == 0)) { // 1er section (Prod) et channel 0 (phase 1)
PactProdPh1 = ValJson("activePower", jsonPayload); // Watt de prod au moment de l'interrogation, utilisé sur un system monophasé traité sur phase 1
PactProd = bMonoPhaseProd ? PactProdPh1 : PactProdGlob; // prend la prod réel selon monophasé ou triphasé (qui ont été recupéré précédement)
} else if ((nGlobalIndex == 1) && (nPhaseIndex == 0)) { // 2nd section (Echange avec Enedis) et channel 0 (phase 1)
Tension_M1 = ValJson("voltage", jsonPayload);
Intensite_M1 = ValJson("current", jsonPayload);
PactReseauPh1 = ValJson("activePower", jsonPayload); // Watt (positif = soutire / négatif = injecte) au moment de l'interrogation sur un system monophasé
PactReseau = bMonoPhaseConso ? PactReseauPh1 : PactReseauGlob; // prend la conso réel selon triphasé ou monophasé (qui ont été recupéré précédement)
// on a la bonne valeur de prod et la bonne valeur échangé avec Enedis, on calcul ce qui est consommé dans la maison
PactConso_M = PactReseau + PactProd; // dans l'hypothese qu'il n'y a pas de l'énergie fournit par une batterie !
if (bMonoPhaseConso) { // raccordé Enedis en monophasé (phase 1)
PvaReseau = ValJson("apparentPower", jsonPayload); // VA échangé avec Enedis dans le cas production en monophasé
whDlvdCum = ValJson("actEnergyDlvd", jsonPayload); // compteur de Wh injecté dans le cas production en monophasé
whRcvdCum = ValJson("actEnergyRcvd", jsonPayload); // compteur de Wh soutiré dans le cas production en monophasé
PowerFactor_M = ValJson("pwrFactor", jsonPayload); // facteur de puissance dans le cas production en monophasé
Tension_M = Tension_M1; // Volt qui seront affichés par le routeur (tiré de la phase 1, dans le cas production en monophasé)
Intensite_M = Intensite_M1; // Ampère qui seront affichés par le routeur (tiré de la phase 1, dans le cas production en monophasé)
}
} else if ((nGlobalIndex == 1) && (nPhaseIndex == 1)) { // 2nd section (Echange avec Enedis) et channel 1 (phase 2)
Tension_M2 = ValJson("voltage", jsonPayload); // Volt phase 2 Enedis en triphasé (et monophasé)
Intensite_M2 = ValJson("current", jsonPayload); // Ampére phase 2 Enedis en triphasé (et monophasé)
} else if ((nGlobalIndex == 1) && (nPhaseIndex == 2)) { // 2nd section (Echange avec Enedis) et channel 2 (phase 3)
Tension_M3 = ValJson("voltage", jsonPayload); // volt phase 3 Enedis en triphasé (et en monophasé proche de zéro)
Intensite_M3 = ValJson("current", jsonPayload); // Ampére phase 3 Enedis en triphasé (et en monophasé normalement proche de zéro ...)
if (!bMonoPhaseConso) { // raccordé Enedis en triphasé
Tension_M = (Tension_M1 + Tension_M2 + Tension_M3) / 3.0f; // affichera une tension moyenne des 3 phases
Intensite_M = (Intensite_M1 + Intensite_M2 + Intensite_M3) / 3.0f; // affichera un courant moyen des 3 phases
} else { // en monophasé, si les info sont toujours sur la phase L1 [ A CONFIRMER ], on met a zéro tension et intensité sur les 2 autres phases
Tension_M2 = Tension_M3 = 0.0f;
Intensite_M2 = Intensite_M3 = 0.0f;
}
bJsonLoadingFinished = true; // termine le scrutage du contenu du JSON
g_nLastGoodReading = millis(); // mémo timestamp de la derniere fois qu'on a reçu une trame suffisante
}
}
}
}
Je pense être dans ce cas là, je n'ai que deux panneaux et dans le statut en direct ce matin je produisais uniquement sur la phase 2 mais maintenant sur les phases 1 et 2.
Je surveillerai dans la journée si ça ne tourne pas entre les phases.
En tout cas même en produisant sur la phase 2 cela routait correctement.
J'ai toujours les messages Envoy refused request (entre 30s et 10mn d'intervalle) et le message JSON Reading Timeout 3 / nGlobalIndex=1 nPhaseIndex=1
j'ai recoché mDNS à 8h20 et pas de soucis jusqu'à présent.
Mise à jour effectuée sur la 17.24 aucun changement
mise à jour via OTA
un constat: la mise à l'heure ne se fait pas à la seconde mais par saccade de 30 à 40 seconde
je suis toujours en triphasé
Est-ce que vous avez bien rentré dans source votre identifiant (adresse mail) et mot de passe Enphase ?
Est-ce que c’est la bonne adresse IP de la passerelle ?
(24-06-2026, 12:09 PM)Alex11 a écrit : Est-ce que vous avez bien rentré dans source votre identifiant (adresse mail) et mot de passe Enphase ?
Est-ce que c’est la bonne adresse IP de la passerelle ?
bonjour, pour ma part adresse email, mot de passe, adresse IP corrects
De mon coté idem a ce qui était ok avant nos problèmes cad apres verification dans système de lApplicatio et MP les 6 derniers chiffres du SN
Cest bien cela?|
(24-06-2026, 01:27 PM)ROPA 59 a écrit : De mon coté idem a ce qui était ok avant nos problèmes cad apres verification dans système de lApplicatio et MP les 6 derniers chiffres du SN
Cest bien cela?|
Je vous ai déjà répondu en vous disant que c’est le mot de passe de votre session Enphase (pour vous connecter à Enlighten). Rien à voir avec les 6 derniers chiffres du SN sauf si bien sûr vous avez utilisé ça.