Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Intégration shelly PRO em
#38
(17-10-2024, 06:12 AM)cetin.s a écrit : Bonjour,
Mon installation dispose d'un compteur Shelly pro 3 EM.
j'ai installé la version 12 . on a bien une lecture des donnée brut de Shelly mais les valeur ne sont pas lu et visible sur l'écran accueille ni sur les graphique.
Après l'installation de votre modification , on a une lecture mais malheureusement celle-ci  n'est pas correct pour moi.
Shelly fait déjà la moyenne de la puissance, donc pas de division des puissances cumulé cela fausse le fonctionnement.
Je pense que la lecture de la ligne surligné serait plus approprié.
total_act_power:469.889 Puissance active
total_aprt_power:652.952 puissance Reactive
Merci pour votre travail.

Merci pour le test.
Correction lecture de puissance en triphasé. Si vous pouviez valider.
Le pro 3 em en monophasé ne devrait pas poser problème (même format que le pro EM 50 qui fonctionne).
Je pense qu'on est bon André !

Code :
//****************************************************************
// Variante Shelly Pro Em proposé par Raphael591 (Juillet 2024)
//  + Correction Octobre 2024
// ****************************************************
// * Client d'un Shelly Em sur voie 0 ou 1 ou triphasé*
// ****************************************************

void LectureShellyProEm()
{
  String S = "";
  String Shelly_Data = "";
  String Shelly_Name = "";
  float Pw = 0;
  float voltage = 0;
  float pf = 0;

  // ADD PERSO : AJOUT VARIABLE JSON pour facilité la lecture des infos EM PRO
  String tmp; // ADD PERSO

  // Use WiFiClient class to create TCP connections
  WiFiClient clientESP_RMS;
  byte arr[4];
  arr[0] = RMSextIP & 0xFF;         // 0x78
  arr[1] = (RMSextIP >> 8) & 0xFF;  // 0x56
  arr[2] = (RMSextIP >> 16) & 0xFF; // 0x34
  arr[3] = (RMSextIP >> 24) & 0xFF; // 0x12

  String host = String(arr[3]) + "." + String(arr[2]) + "." + String(arr[1]) + "." + String(arr[0]);
  if (!clientESP_RMS.connect(host.c_str(), 80))
  {
    StockMessage("connection to Shelly Em failed : " + host);
    delay(200);
    return;
  }
  int voie = EnphaseSerial.toInt();
  int Voie = voie % 2;

  if (ShEm_comptage_appels == 1)
  {
    Voie = (Voie + 1) % 2;
  }

  // Connaître modèle du shelly *******************************************
  String url = "/rpc/Shelly.GetDeviceInfo";
  clientESP_RMS.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
  unsigned long timeout = millis();
  while (clientESP_RMS.available() == 0)
  {
    if (millis() - timeout > 5000)
    {
      StockMessage("client Shelly Em Timeout ! : " + host);
      clientESP_RMS.stop();
      return;
    }
  }
  timeout = millis();
  // Lecture des données brutes distantes
  while (clientESP_RMS.available() && (millis() - timeout < 5000))
  {
    Shelly_Data += clientESP_RMS.readStringUntil('\r');
  }
  Shelly_Name = StringJson("id", Shelly_Data);
  int p = Shelly_Name.indexOf("-");
  Shelly_Name = Shelly_Name.substring(0,p);
  Shelly_Data = "";
  // Modèle shelly FIN *****************************************************
 
  if (!clientESP_RMS.connect(host.c_str(), 80))
  {
    StockMessage("connection to Shelly Em failed : " + host);
    delay(200);
    return;
  }

  url = "/rpc/Shelly.GetStatus";                  // pour Pro Em
  ShEm_comptage_appels = (ShEm_comptage_appels + 1) % 5; // 1 appel sur 6 vers la deuxième voie qui ne sert pas au routeur
  clientESP_RMS.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
  timeout = millis();
  while (clientESP_RMS.available() == 0)
  {
    if (millis() - timeout > 5000)
    {
      StockMessage("client Shelly Em Timeout 2 ! : " + host);
      clientESP_RMS.stop();
      return;
    }
  }
  timeout = millis();
  // Lecture des données brutes distantes
  while (clientESP_RMS.available() && (millis() - timeout < 5000))
  {
    Shelly_Data += clientESP_RMS.readStringUntil('\r');
  }
  p = Shelly_Data.indexOf("{");
  Shelly_Data = Shelly_Data.substring(p);
  if (Shelly_Name == "shellypro3em" && voie == 3) {
    // 3 em Triphasé
    ShEm_dataBrute = "<strong>"+Shelly_Name+"</strong><br>" + Shelly_Data;

    float Pw1, Pw2, Pw3;
    float pf1, pf2, pf3;
    float volt1, volt2, volt3;

    tmp = PrefiltreJson("em:0", ":", Shelly_Data);

    Pw = ValJson("total_act_power", tmp);   

    volt1 = ValJson("a_voltage", tmp);
    pf1 = ValJson("a_pf", tmp);

    volt2 = ValJson("b_voltage", tmp);
    pf2 = ValJson("b_pf", tmp);

    volt3 = ValJson("c_voltage", tmp);
    pf3 = ValJson("c_pf", tmp);

    voltage = (volt1 + volt2 + volt3) / 3;
    pf = abs((pf1 + pf2 + pf3) / 3);
    if (pf > 1) pf = 1;
    if (Pw >= 0) {
      PuissanceS_M_inst = Pw;
      PuissanceI_M_inst = 0;
      if (pf > 0.01) {
        PVAS_M_inst = PfloatMax(Pw / pf);
      } else {
        PVAS_M_inst = 0;
      }
      PVAI_M_inst = 0;
    }
    else {
      PuissanceS_M_inst = 0;
      PuissanceI_M_inst = -Pw;
      if (pf > 0.01)
      {
        PVAI_M_inst = PfloatMax(-Pw / pf);
      }
      else
      {
        PVAI_M_inst = 0;
      }
      PVAS_M_inst = 0;
    }
    tmp = PrefiltreJson("emdata:0", ":", Shelly_Data); // ADD PERSO
    Energie_M_Soutiree = myLongJson("total_act", tmp);         // ADD PERSO
    Energie_M_Injectee = myLongJson("total_act_ret", tmp);     // ADD PERSO
    PowerFactor_M = pf;
    Tension_M = voltage;
    Pva_valide = true;
  }
  else if (Shelly_Name == "shellypro3em")
  {
    // 3 em Monophasé : Voie != 3
    ShEm_dataBrute = "<strong>"+Shelly_Name+"</strong><br>" + Shelly_Data;

    tmp = PrefiltreJson("em1:" + String(Voie), ":", Shelly_Data); // Voie mono
    Pw = ValJson("act_power", tmp);
    voltage = ValJson("voltage", tmp);
    pf = ValJson("pf", tmp);
    pf = abs(pf);
    if (pf > 1) pf = 1;
    if (Pw >= 0)
    {
      PuissanceS_M_inst = Pw;
      PuissanceI_M_inst = 0;
      if (pf > 0.01)
      {
        PVAS_M_inst = PfloatMax(Pw / pf);
      }
      else
      {
        PVAS_M_inst = 0;
      }
      PVAI_M_inst = 0;
    }
    else
    {
      PuissanceS_M_inst = 0;
      PuissanceI_M_inst = -Pw;
      if (pf > 0.01)
      {
        PVAI_M_inst = PfloatMax(-Pw / pf);
      }
      else
      {
        PVAI_M_inst = 0;
      }
      PVAS_M_inst = 0;
    }
    tmp = PrefiltreJson("em1data:" + String(Voie), ":", Shelly_Data); // ADD PERSO
    Energie_M_Soutiree = myLongJson("total_act_energy", tmp);         // ADD PERSO
    Energie_M_Injectee = myLongJson("total_act_ret_energy", tmp);     // ADD PERSO
    PowerFactor_M = pf;
    Tension_M = voltage;
    Pva_valide = true;
  }
  else if (Shelly_Name == "shellyproem50" )
  { // Monophasé pro EM
    ShEm_dataBrute = "<strong>" + Shelly_Name + "</strong><br>" + Shelly_Data;
    Shelly_Data = Shelly_Data + ",";
    if (Shelly_Data.indexOf("true") > 0)
    {                                                               // Donnée valide
      tmp = PrefiltreJson("em1:" + String(Voie), ":", Shelly_Data); // ADD PERSO
      Pw = ValJson("act_power", tmp);                               // ADD PERSO
      voltage = ValJson("voltage", tmp);                            // ADD PERSO
      pf = ValJson("pf", tmp);                                      // ADD PERSO
      pf = abs(pf);
      if (pf > 1) pf = 1;
      if (Voie == voie)
      { // voie du routeur
        if (Pw >= 0)
        {
          PuissanceS_M_inst = Pw;
          PuissanceI_M_inst = 0;
          if (pf > 0.01)
          {
            PVAS_M_inst = PfloatMax(Pw / pf);
          }
          else
          {
            PVAS_M_inst = 0;
          }
          PVAI_M_inst = 0;
        }
        else
        {
          PuissanceS_M_inst = 0;
          PuissanceI_M_inst = -Pw;
          if (pf > 0.01)
          {
            PVAI_M_inst = PfloatMax(-Pw / pf);
          }
          else
          {
            PVAI_M_inst = 0;
          }
          PVAS_M_inst = 0;
        }
        tmp = PrefiltreJson("em1data:" + String(Voie), ":", Shelly_Data); // ADD PERSO
        Energie_M_Soutiree = myLongJson("total_act_energy", tmp);         // ADD PERSO
        Energie_M_Injectee = myLongJson("total_act_ret_energy", tmp);     // ADD PERSO
        PowerFactor_M = pf;
        Tension_M = voltage;
        Pva_valide = true;
      }
      else
      { // voie secondaire
        if (LissageLong)
        {
          PwMoy2 = 0.2 * Pw + 0.8 * PwMoy2; // Lissage car moins de mesure sur voie secondaire
          pfMoy2 = 0.2 * pf + 0.8 * pfMoy2;
          Pw = PwMoy2;
          pf = pfMoy2;
        }
        if (Pw >= 0)
        {
          PuissanceS_T_inst = Pw;
          PuissanceI_T_inst = 0;
          if (pf > 0.01)
          {
            PVAS_T_inst = PfloatMax(Pw / pf);
          }
          else
          {
            PVAS_T_inst = 0;
          }
          PVAI_T_inst = 0;
        }
        else
        {
          PuissanceS_T_inst = 0;
          PuissanceI_T_inst = -Pw;
          if (pf > 0.01)
          {
            PVAI_T_inst = PfloatMax(-Pw / pf);
          }
          else
          {
            PVAI_T_inst = 0;
          }
          PVAS_T_inst = 0;
        }
        tmp = PrefiltreJson("em1data:" + String(Voie), ":", Shelly_Data); // ADD PERSO
        Energie_T_Soutiree = myLongJson("total_act_energy", tmp);         // ADD PERSO
        Energie_T_Injectee = myLongJson("total_act_ret_energy", tmp);     // ADD PERSO
        PowerFactor_T = pf;
        Tension_T = voltage;
      }
    }
  }
  filtre_puissance();
  PuissanceRecue = true; // Reset du Watchdog à chaque trame du Shelly reçue
  if (ShEm_comptage_appels > 1)
    EnergieActiveValide = true;
  if (cptLEDyellow > 30)
  {
    cptLEDyellow = 4;
  }
}
Routeur avec Triac, CE 2500w. Shelly pro em50 pour les mesures. Kit PV pnp 2 kW. Home assistant
Répondre


Messages dans ce sujet
Intégration shelly PRO em - par Raphael591 - 12-06-2024, 05:49 PM
RE: Intégration shelly PRO em - par F1ATB - 12-06-2024, 07:10 PM
RE: Intégration shelly PRO em - par Raphael591 - 12-06-2024, 07:16 PM
RE: Intégration shelly PRO em - par F1ATB - 12-06-2024, 07:18 PM
RE: Intégration shelly PRO em - par Raphael591 - 12-06-2024, 07:53 PM
RE: Intégration shelly PRO em - par DanielJ - 17-06-2024, 04:00 PM
RE: Intégration shelly PRO em - par Raphael591 - 23-06-2024, 03:33 PM
RE: Intégration shelly PRO em - par F1ATB - 23-06-2024, 04:31 PM
RE: Intégration shelly PRO em - par DanielJ - 26-06-2024, 12:36 PM
RE: Intégration shelly PRO em - par Raphael591 - 26-06-2024, 02:31 PM
RE: Intégration shelly PRO em - par F1ATB - 03-07-2024, 04:23 PM
RE: Intégration shelly PRO em - par DanielJ - 03-07-2024, 06:56 PM
RE: Intégration shelly PRO em - par Raphael591 - 03-07-2024, 10:01 PM
RE: Intégration shelly PRO em - par F1ATB - 04-07-2024, 08:31 AM
RE: Intégration shelly PRO em - par olivr2s - 23-08-2024, 12:13 PM
RE: Intégration shelly PRO em - par Raphael591 - 04-07-2024, 09:49 AM
RE: Intégration shelly PRO em - par F1ATB - 24-08-2024, 05:51 AM
RE: Intégration shelly PRO em - par olivr2s - 24-08-2024, 01:51 PM
RE: Intégration shelly PRO em - par manusaxo - 28-08-2024, 08:49 AM
RE: Intégration shelly PRO em - par olivr2s - 28-08-2024, 09:40 AM
RE: Intégration shelly PRO em - par manusaxo - 28-08-2024, 08:27 PM
RE: Intégration shelly PRO em - par vmarchis - 07-10-2024, 06:43 PM
RE: Intégration shelly PRO em - par F1ATB - 29-08-2024, 08:01 AM
RE: Intégration shelly PRO em - par manusaxo - 29-08-2024, 10:55 AM
RE: Intégration shelly PRO em - par olivr2s - 29-08-2024, 11:17 AM
RE: Intégration shelly PRO em - par manusaxo - 30-08-2024, 12:07 PM
RE: Intégration shelly PRO em - par olivr2s - 31-08-2024, 12:33 PM
RE: Intégration shelly PRO em - par manusaxo - 13-10-2024, 07:28 PM
RE: Intégration shelly PRO em - par olivr2s - 13-10-2024, 07:39 PM
RE: Intégration shelly PRO em - par F1ATB - 13-10-2024, 07:37 PM
RE: Intégration shelly PRO em - par Raphael591 - 14-10-2024, 10:43 AM
RE: Intégration shelly PRO em - par Raphael591 - 14-10-2024, 12:37 PM
RE: Intégration shelly PRO em - par olivr2s - 14-10-2024, 01:05 PM
RE: Intégration shelly PRO em - par Raphael591 - 14-10-2024, 02:00 PM
RE: Intégration shelly PRO em - par Raphael591 - 14-10-2024, 03:20 PM
RE: Intégration shelly PRO em - par Robi60 - 18-10-2024, 09:04 PM
RE: Intégration shelly PRO em - par cetin.s - 17-10-2024, 06:12 AM
RE: Intégration shelly PRO em - par Raphael591 - 17-10-2024, 04:23 PM
RE: Intégration shelly PRO em - par F1ATB - 17-10-2024, 04:45 PM
RE: Intégration shelly PRO em - par cetin.s - 17-10-2024, 07:32 PM
RE: Intégration shelly PRO em - par Raphael591 - 17-10-2024, 08:57 PM
RE: Intégration shelly PRO em - par cetin.s - 18-10-2024, 09:38 PM
RE: Intégration shelly PRO em - par Raphael591 - 19-10-2024, 03:25 PM
RE: Intégration shelly PRO em - par F1ATB - 19-10-2024, 04:13 PM
RE: Intégration shelly PRO em - par cetin.s - 19-10-2024, 04:34 PM
RE: Intégration shelly PRO em - par F1ATB - 19-10-2024, 05:15 PM
RE: Intégration shelly PRO em - par F1ATB - 19-10-2024, 05:30 PM
RE: Intégration shelly PRO em - par cetin.s - 19-10-2024, 05:32 PM
RE: Intégration shelly PRO em - par Lolo69 - 19-10-2024, 09:06 PM
RE: Intégration shelly PRO em - par Raphael591 - 19-10-2024, 09:19 PM
RE: Intégration shelly PRO em - par F1ATB - 20-10-2024, 04:17 AM
RE: Intégration shelly PRO em - par Robi60 - 20-10-2024, 11:41 AM
RE: Intégration shelly PRO em - par manusaxo - 03-11-2024, 09:18 PM

Atteindre :


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