Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Erreur code uxix3 dans 17.06
#1
Bonjour,

Après des heures de recherche j'ai trouvé l'erreur dans le code 17.06 en uxix3 qui remontait des informations fausses de consommation mqtt
Lignes 423-427 de envoimqtt.ino :
Code :
if (Source == "UxIx3") {  //Modif Piamp 8/12/2025
    sprintf(value, "%s,\"Tension_M1\": %.1f, \"Intensite_M1\": %.1f,\"Tension_M2\": %.1f, \"Intensite_M2\": %.1f,\"Tension_M3\": %.1f, \"Intensite_M3\": %.1f, \"Frequence\":%.2f", value, Tension_M1, Intensite_M1, Tension_M2, Intensite_M2, Tension_M3, Intensite_M3, Frequence);
    sprintf(value, "%s,\"PW_M1\": %.1f,\"PW_M2\": %.1f, \"PW_M3\": %.1f", value, PW_M1, PW_M2, PW_M3);
    sprintf(value, "%s,\"Energie_jour_Soutiree\": %.1f,\"Energie_jour_Injectee\": %.1f", value, Energie_jour_Injectee, Energie_jour_Injectee);
  }

dans la dernière ligne on envoie "Energie_jour_Injectee" deux fois au lieu de Energie_jour_Soutiree, Energie-jour_Injectée Big Grin


J'en ai profité pour nettoyer un peu le code pour qu'en uxix3 les bons sensors soient remontés dans un fonctionnement identique à uxix2 et que l'affichage dans les pages web soit bon.

A modifier :
dans sourceuxix3.ino à partir de ligne 90 : on remonte via 2 ajouts les bonnes valeurs de EnergieM (injectée et soutirée)  grace au calcul de phdv61 et on supprime le calcul de la donnée (fausse) remontée par le jsy

Code :
if (injection) {
      PuissanceS_M_inst = 0;
      PuissanceI_M_inst = float((Lecture333[21] << 24) + (Lecture333[22] << 16) + (Lecture333[23] << 8) + Lecture333[24]);
      PVAS_M_inst = 0;
      PVAI_M_inst = abs(PVA_M_inst1 + PVA_M_inst2 + PVA_M_inst3);  // car la somme des puissances apparentes "signées" est négative puisqu'en "injection" au global

      // PhDV61 : on considère que cette puissance active "globale" a duré "delta_temps", et on l'intègre donc pour obtenir une énergie en Wh
      Energie_jour_Injectee += ((float)delta_temps / 1000.0) * (PuissanceI_M_inst / 3600.0);
      Energie_M_Injectee = Energie_jour_Injectee; // ajout piamp

    } else {  // soutirage
      PuissanceI_M_inst = 0;
      PuissanceS_M_inst = float((Lecture333[21] << 24) + (Lecture333[22] << 16) + (Lecture333[23] << 8) + Lecture333[24]);
      PVAI_M_inst = 0;
      PVAS_M_inst = PVA_M_inst1 + PVA_M_inst2 + PVA_M_inst3;

      // PhDV61 : on considère que cette puissance active "globale" a duré "delta_temps", et on l'intègre donc pour obtenir pour obtenir une énergie en Wh
      Energie_jour_Soutiree += ((float)delta_temps / 1000.0) * (PuissanceS_M_inst / 3600.0);
      Energie_M_Soutiree = Energie_jour_Soutiree; // ajout piamp
    }

    // supp piamp Energie_M_Soutiree = ((float)((float)(Lecture333[119] * 16777216) + (float)(Lecture333[120] * 65536) + (float)(Lecture333[121] * 256) + (float)Lecture333[122])) * 10;
    // supp piamp Energie_M_Injectee = ((float)((float)(Lecture333[135] * 16777216) + (float)(Lecture333[136] * 65536) + (float)(Lecture333[137] * 256) + (float)Lecture333[138])) * 10;

dans envoimqtt.ino :
a partir de la ligne 241 on initialise seulement les bonnes variables :
Code :
if (Source == "UxIx3") {
    DeviceToDiscover("Tension_M1", "Tension p1", "V", "voltage", "2");
    DeviceToDiscover("Intensite_M1", "Intensité p1", "A", "current", "2");
    DeviceToDiscover("Tension_M2", "Tension p1", "V", "voltage", "2");
    DeviceToDiscover("Intensite_M2", "Intensité p2", "A", "current", "2");
    DeviceToDiscover("Tension_M3", "Tension p3", "V", "voltage", "2");
    DeviceToDiscover("Intensite_M3", "Intensité p3", "A", "current", "2");
    DeviceToDiscover("PW_M1", "Puissance M phase 1", "W", "power", "1");
    DeviceToDiscover("PW_M2", "Puissance M phase 2", "W", "power", "1");
    DeviceToDiscover("PW_M3", "Puissance M phase 3", "W", "power", "1");
    //DeviceToDiscover("Energie_jour_M_Soutiree", "Energie jour M Soutirée", "Wh", "energy", "1");
    //DeviceToDiscover("Energie_jour_M_Injectee", "Energie jour MInjectée", "Wh", "energy", "1");
  }
  else { 
    DeviceToDiscover("Tension_M", "Tension M", "V", "voltage", "2");
    DeviceToDiscover("Intensite_M", "Intensité M", "A", "current", "2");
    DeviceToDiscoverWithoutUnit("PowerFactor_M", "Facteur de Puissance M", "2");
  }
  DeviceToDiscover("PuissanceI_M", "Puissance M Injectée", "W", "power", "0");
  DeviceToDiscover("PuissanceS_M", "Puissance M Soutirée", "W", "power", "0");
  DeviceToDiscover("Energie_M_Soutiree", "Energie Totale M Soutirée", "Wh", "energy", "0");
  DeviceToDiscover("Energie_M_Injectee", "Energie Totale M Injectée", "Wh", "energy", "0");
  DeviceToDiscover("EnergieJour_M_Soutiree", "Energie Jour M Soutirée", "Wh", "energy", "0");
  DeviceToDiscover("EnergieJour_M_Injectee", "Energie Jour M Injectée", "Wh", "energy", "0");

en ligne 425 on n'envoie plus l'energie puisqu'elle est envoyée par défaut maintenant que energiejourM est ok :
Code :
  if (Source == "UxIx3") {  //Modif Piamp 8/12/2025
    sprintf(value, "%s,\"Tension_M1\": %.1f, \"Intensite_M1\": %.1f,\"Tension_M2\": %.1f, \"Intensite_M2\": %.1f,\"Tension_M3\": %.1f, \"Intensite_M3\": %.1f, \"Frequence\":%.2f", value, Tension_M1, Intensite_M1, Tension_M2, Intensite_M2, Tension_M3, Intensite_M3, Frequence);
    sprintf(value, "%s,\"PW_M1\": %.1f,\"PW_M2\": %.1f, \"PW_M3\": %.1f", value, PW_M1, PW_M2, PW_M3);
    //sprintf(value, "%s,\"Energie_jour_Soutiree\": %.1f,\"Energie_jour_Injectee\": %.1f", value, Energie_jour_Soutiree, Energie_jour_Injectee);
  }

avec ces modifs tout est ok Smile

Je joins les 2 fichiers modifiés si plus facile !


Pièces jointes
.zip   piamp.zip (Taille : 2.22 Ko / Téléchargements : 0)
Répondre



Atteindre :


Utilisateur(s) parcourant ce sujet :
1 visiteur(s)

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