Note de ce sujet :
  • Moyenne : 4.5 (2 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Nouvelle version 11.17 compilée avec ESP32 en V3.03
#25
Je suis en tri avec un uxix3 et je n'ai aucun reboot Smile
Avec une lecture toutes les 400ms Smile

J'ai modifié le code pour simplifier les calculs (operations de bits plutot que multiplications, en entier et non en float) et j'en ai profité pour remonter en mqtt les vraies valeurs de conso / injection

Code :
// *************************************************
// * Client lecture JSY-MK-333 * Triphasé *
// * Développement initial de Pierre F (Mars 2024) *
// * update PhDV61 Juin 2024 *
// *************************************************


void Setup_JSY333() {
  MySerial.setRxBufferSize(SER_BUF_SIZE);
  MySerial.begin(19200, SERIAL_8N1, RXD2, TXD2);  //PORT DE CONNEXION AVEC LE CAPTEUR JSY-MK-333
}

void Lecture_JSY333() {
  float Tension_M1, Tension_M2, Tension_M3;
  float Intensite_M1, Intensite_M2, Intensite_M3;
  float PVA_M_inst1, PVA_M_inst2, PVA_M_inst3;
  float PW_inst1, PW_inst2, PW_inst3;

  byte Lecture333[200];
  bool injection;
  bool sens1, sens2, sens3;
  long delta_temps = 0;

  int i;
  byte msg_send[] = { 0x01, 0x03, 0x01, 0x09, 0x00, 0x30, 0x94, 0x20 };
  for (i = 0; i < 8; i++) {
    MySerial.write(msg_send[i]);
  }

  int a = 0;
  while (MySerial.available()) {
    Lecture333[a] = MySerial.read();
    a++;
  }

  if (a == 101) {                                               //message complet reçu
    delta_temps = (unsigned long)(millis() - Temps_precedent);  // temps écoulé depuis le dernier appel
    Temps_precedent = millis();                                 // on conserve la valeur du temps actuel pour le calcul précédent

    injection = (Lecture333[86] >> 3) & 0x01;  //si sens est true, injection

    if (injection) {
      PuissanceS_M_inst = 0;
      PuissanceI_M_inst = float((Lecture333[3] << 24) + (Lecture333[4] << 16) + (Lecture333[5] << 8) + Lecture333[6]);
      // 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) * (PuissanceI_M_inst / 3600.0);
      Energie_M_Injectee = Energie_jour_Injectee;

    } else {  // soutirage
      PuissanceI_M_inst = 0;
      PuissanceS_M_inst = float((Lecture333[3] << 24) + (Lecture333[4] << 16) + (Lecture333[5] << 8) + Lecture333[6]);
      // 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) * (PuissanceS_M_inst / 3600.0);
      Energie_M_Soutiree = Energie_jour_Soutiree;
    }


    MK333_dataBrute = "<br>Puissance active soutirée : " + String(PuissanceS_M_inst) + "W</br>";
    MK333_dataBrute += "<br>Puissance active injectée : " + String(PuissanceI_M_inst) + "W</br>";
    MK333_dataBrute += "<br>Energie jour nette soutirée (Linky): " + String(Energie_jour_Soutiree) + "Wh</br>";
    MK333_dataBrute += "<br>Energie jour nette injectée (Linky): " + String(Energie_jour_Injectee) + "Wh</br>";
    MK333_dataBrute += "<br>Données reçues : " + String(a) + "</br>";
    MK333_dataBrute += "<br>Number of bytes : " + String(Lecture333[2]) + "</br>";

    Pva_valide = true;
    filtre_puissance();
    PuissanceRecue = true;  //Reset du Watchdog à chaque trame du JSY reçue
    esp_task_wdt_reset();   //Reset du Watchdog à chaque trame du JSY reçue
    EnergieActiveValide = true;
    if (cptLEDyellow > 30) {
      cptLEDyellow = 4;
      //StockMessage(" heure d'arrivée message complet "+String( millis()/1000) );
    }
  } else {
    StockMessage("Pas tout reçu, pas traité... nombre de données : " + String(a));
  }
}
Répondre


Messages dans ce sujet
RE: Nouvelle version 11.17 compilée avec ESP32 en V3.03 - par piamp - 16-08-2024, 12:34 PM

Atteindre :


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