Note de ce sujet :
  • Moyenne : 5 (5 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Plus d'accès aux données de la passerelle Enphase Envoy
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


Pièces jointes Miniature(s)
   
Répondre

Bonjour,

  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
        }
      }
    }
  }
Merci André Smile ,
Routeur V17.19 (since V2.01) / Source UxI / 5 actions

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)
Répondre

(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.
Répondre

(23-06-2026, 11:47 PM)michy a écrit : Bonjour,

  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.
Répondre

bonjour et merci. pour votre travail acharné.

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é

JSON loading failed
pas de réception d'enphase

   
   
`
CDT

Patrick
Répondre

Bonjour, idem configuration, idem résultats ( juste mon énérgie active  égale à 1 )


Pièces jointes Miniature(s)
   
6 kWc - Enphase iq8hc
Enphase envoy metered
Répondre

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 ?
Répondre

(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
Répondre

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?|
6 kWc - Enphase iq8hc
Enphase envoy metered
Répondre

(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.
Répondre



Atteindre :


Utilisateur(s) parcourant ce sujet :
rdsoft30, 4 visiteur(s)

Moteur MyBB, © 2002-2026 Melroy van den Berg.