Bienvenue, Visiteur
Vous devez vous enregistrer avant de pouvoir poster.

Nom d’utilisateur
  

Mot de passe
  





Rechercher dans les forums

(Recherche avancée)

Derniers sujets
Messages d'erreurs v 13.3
Dernier message : Alain_C38
Il y a 3 heures
Plus d'accès aux données ...
Dernier message : ROPA 59
Il y a 5 heures
forcer connection routeur...
Dernier message : daniel
Il y a 8 heures
Shelly EM, 3EM, Pro, Gen ...
Dernier message : H3rv3
Hier, 03:28 PM
problème prise T2
Dernier message : alexm22
Hier, 02:41 PM
Signal température
Dernier message : JFLA76
Hier, 12:04 PM
Nouveau routeur F1ATB sur...
Dernier message : forlx.62
Hier, 10:18 AM
Conso puissance en dehors...
Dernier message : Mike
Hier, 08:42 AM
installation panneau sola...
Dernier message : AtomeIon
13-07-2026, 11:38 PM
Routeur sur Installation ...
Dernier message : Bixente
13-07-2026, 10:31 AM

Statistiques du Forum
» Membres : 2,960,   » Dernier membre : Hugocha,   » Sujets du forum : 2,472,   » Messages du forum : 23,608,  
Statistiques complètes

  Lecture des 2 voies simultanées sur Shelly3EM
Posté par : H3rv3 - 03-03-2026, 12:13 PM - Forum : Routeur Photovoltaïque - Pas de réponse

Le Shelly3EM peut lire les 3 voies simultanément (c'est utilisé pour le triphasé) et donc aussi les 2 voies qui peuvent être utilisées dans le routeur.
Avec cette formule, pas besoin de faire des appels sur la voie 0 ou la voie 1.

Dans les paramètres, il faut choisir le ShellyEM et la voie 60 (cela donne lecture simultanée, voie de la puissance maison sur canal 0. Le cas où la puissance maison est sur le canal 1 n'est traité).

Le code de Source_ShellyEm.ino modifié est là:

Code :
// ****************************************************
// * Client d'un Shelly Em sur voie 0 ou 1 ou triphasé*
// ****************************************************

String ReadStringMulti(WiFiClient &client, const String &terminator, uint32_t timeout = 1000) {
  String result = "";
  unsigned long start = millis();

  while (millis() - start < timeout) {
    while (client.available()) {
      char c = client.read();
      result += c;

      // Vérifie si la fin correspond au terminateur
      if (result.endsWith(terminator)) {
        // Supprime le terminateur si tu ne veux pas le garder
        result.remove(result.length() - terminator.length());
        return result;
      }
      start = millis();  // reset du timeout à chaque caractère reçu
    }
  }
  return result;  // timeout atteint
}


void LectureShellyEm() {
  String S = "";
  String Shelly_Data = "";
  float Pw = 0;
  float voltage = 0;
  float pf = 0;
  float Pva;
  int p = 0;
  // Use WiFiClient class to create TCP connections
  WiFiClient clientESP_RMS;
  String host = IP2String(RMSextIP);
  if (!clientESP_RMS.connect(host.c_str(), 80, 3000)) {
    delay(500);
    if (!clientESP_RMS.connect(host.c_str(), 80, 3000)) {
      delay(100);
      clientESP_RMS.stop();
      StockMessage("connection to Shelly Em failed : " + host);
      return;
    }
  }
  int voie = EnphaseSerial.toInt();
  int Voie = voie % 2;

  if (ShEm_comptage_appels == 1) {
    Voie = (Voie + 1) % 2;
  }
 
  String url = "/emeter/" + String(Voie);
  if (voie == 3)  url = "/status";  //Triphasé Shelly 3Em
  if (voie >= 30) url = "/rpc/Shelly.GetStatus";
  if (voie == 60) url = "/status";  // HP11 Triphasé Shelly 3Em pour lire les données monophasées
 
  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");
  unsigned long timeout = millis();
  while (clientESP_RMS.available() == 0) {
    if (millis() - timeout > 5000) {
      StockMessage("client Shelly Em Timeout ! : " + host);
      clientESP_RMS.stop();
      delay(100);
      return;
    }
  }
  if (voie ==3 || voie == 60) {   // HP11 Triphasé ou  lecture des troies voies monphasées en même temps
    Shelly_Data = ReadStringMulti(clientESP_RMS, "fs_mounted");
  } else {
    timeout = millis();
    // Lecture des données brutes distantes jusqu'à Fin (Defini d'après ChatGPT et à verifier pour tous les Shelly)
    while (clientESP_RMS.available() && (millis() - timeout < 5000)) {
      Shelly_Data += clientESP_RMS.readStringUntil('}');
    }
    Shelly_Data +="}";
  }
  clientESP_RMS.stop();
  p = Shelly_Data.indexOf("{");
  Shelly_Data = Shelly_Data.substring(p) ;
  if (voie == 3) {  //Triphasé
    ShEm_dataBrute = "<strong>Triphasé</strong><br>" + Shelly_Data;
    p = Shelly_Data.indexOf("emeters");
    Shelly_Data = Shelly_Data.substring(p + 10);
    Pw = PfloatMax(ValJson("power", Shelly_Data));  //Phase 1
    pf = ValJson("pf", Shelly_Data);
    pf = abs(pf);
    float total_Pw = Pw;
    float total_Pva = 0;
    if (pf > 0) {
      total_Pva = abs(Pw) / pf;
    }
    float total_E_soutire = ValJson("total", Shelly_Data);
    float total_E_injecte = ValJson("total_returned", Shelly_Data);
    p = Shelly_Data.indexOf("}");
    Shelly_Data = Shelly_Data.substring(p + 1);
    Pw = PfloatMax(ValJson("power", Shelly_Data));  //Phase 2
    pf = ValJson("pf", Shelly_Data);
    pf = abs(pf);
    total_Pw += Pw;
    if (pf > 0) {
      total_Pva += abs(Pw) / pf;
    }
    total_E_soutire += ValJson("total", Shelly_Data);
    total_E_injecte += ValJson("total_returned", Shelly_Data);
    p = Shelly_Data.indexOf("}");
    Shelly_Data = Shelly_Data.substring(p + 1);
    Pw = PfloatMax(ValJson("power", Shelly_Data));  //Phase 3
    pf = ValJson("pf", Shelly_Data);
    pf = abs(pf);
    total_Pw += Pw;
    if (pf > 0) {
      total_Pva += abs(Pw) / pf;
    }
    total_E_soutire += ValJson("total", Shelly_Data);
    total_E_injecte += ValJson("total_returned", Shelly_Data);
    Energie_M_Soutiree = int(total_E_soutire);
    Energie_M_Injectee = int(total_E_injecte);
    if (total_Pw == 0) {
      total_Pva = 0;
    }
    if (total_Pw > 0) {
      PuissanceS_M_inst = total_Pw;
      PuissanceI_M_inst = 0;
      PVAS_M_inst = total_Pva;
      PVAI_M_inst = 0;
    } else {
      PuissanceS_M_inst = 0;
      PuissanceI_M_inst = -total_Pw;
      PVAI_M_inst = total_Pva;
      PVAS_M_inst = 0;
    }
  } else if (voie == 60){ // HP11 Lecture des données sur les 2 premières sondes
    ShEm_dataBrute = "<strong>Shelly 3em</strong><br>" + Shelly_Data;
    //******* SONDE 1 *****************
    p = Shelly_Data.indexOf("emeters");
    Shelly_Data = Shelly_Data.substring(p + 10);
    Pw = PfloatMax(ValJson("power", Shelly_Data));  //Phase 1
    pf = ValJson("pf", Shelly_Data);
    pf = abs(pf);
    voltage = ValJson("voltage", Shelly_Data); // HP11 on recupère aussi le voltage
    Energie_M_Soutiree = ValJson("total", Shelly_Data);
    Energie_M_Injectee = ValJson("total_returned", Shelly_Data);

    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;
    }
    PowerFactor_M = pf;
    Tension_M = voltage;  // HP11 mise à jour Tension_M
    Pva_valide = true;
//******* SONDE 2 *****************
    p = Shelly_Data.indexOf("}");
    Shelly_Data = Shelly_Data.substring(p + 1);
    Pw = PfloatMax(ValJson("power", Shelly_Data));  //Phase 2
    pf = ValJson("pf", Shelly_Data);
    pf = abs(pf);
    voltage = ValJson("voltage", Shelly_Data); // HP11 on recupère aussi le voltage
    Energie_T_Soutiree = ValJson("total", Shelly_Data);
    Energie_T_Injectee = ValJson("total_returned", Shelly_Data);
  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;
    }
    PowerFactor_T = pf;
    Tension_T = voltage; // HP11 mise à jour Tension_T
  } else if (voie < 3) {  //Monophasé Shelly Em de base
    ShEm_dataBrute = "<strong>Voie : " + String(Voie) + "</strong><br>" + Shelly_Data;
    Shelly_Data = Shelly_Data + ",";
    if (Shelly_Data.indexOf("true") > 0) {  // Donnée valide
      Pw = PfloatMax(ValJson("power", Shelly_Data));
      voltage = ValJson("voltage", Shelly_Data);
      pf = ValJson("pf", Shelly_Data);
      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;
        }
        Energie_M_Soutiree = int(ValJson("total", Shelly_Data));
        Energie_M_Injectee = int(ValJson("total_returned", Shelly_Data));
        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;
        }
        Energie_T_Soutiree = int(ValJson("total", Shelly_Data));
        Energie_T_Injectee = int(ValJson("total_returned", Shelly_Data));
        PowerFactor_T = pf;
        Tension_T = voltage;
      }
    }

  } else {  //Shelly Em Gen3  . On recupere les 2 voies à chaque message
    Voie = voie % 2;
    ShEm_dataBrute = "<strong>Shelly Em Gen3 Voie : " + String(Voie) + "</strong><br>" + Shelly_Data;
    if (Shelly_Data.indexOf("ssid") > 0) {  // Donnée valide
      Shelly_Data = SubJson("em1:" + String(Voie), "}", Shelly_Data);
      Pw = PfloatMax(ValJson("act_power", Shelly_Data));
      pf = ValJson("pf", Shelly_Data);
      voltage = ValJson("voltage", Shelly_Data);
      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;
      }
      Shelly_Data = SubJson("em1data:" + String(Voie), "}", ShEm_dataBrute);
      Energie_M_Soutiree = int(ValJson("total_act_energy", Shelly_Data));
      Energie_M_Injectee = int(ValJson("total_act_ret_energy", Shelly_Data));
      PowerFactor_M = pf;
      Tension_M = voltage;
      Pva_valide = true;
      Voie = (Voie + 1) % 2;
      Shelly_Data = SubJson("em1:" + String(Voie), "}", ShEm_dataBrute);
      Pw = PfloatMax(ValJson("act_power", Shelly_Data));
      pf = ValJson("pf", Shelly_Data);
      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;
      }
      Shelly_Data = SubJson("em1data:" + String(Voie), "}", ShEm_dataBrute);
      Energie_T_Soutiree = int(ValJson("total_act_energy", Shelly_Data));
      Energie_T_Injectee = int(ValJson("total_act_ret_energy", Shelly_Data));
      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;
  }
}

Imprimer cet élément

  SSR ou Triac et connexion avec contacteur HC/HP
Posté par : dicky34 - 02-03-2026, 11:37 PM - Forum : Routeur Photovoltaïque - Réponses (6)

Bonjour,

J'ai parcouru toutes les pages du site et lu le forum afin de me familiariser avec le montage, j'ai fait de nombreux projets IOT avec des ESP (8266 puis 32) et je suis à l'aise en électronique et je cherche à optimiser mon autoconsommation.

Après cette intro, voici les questions que je me pose :

1. SSR ou Dimmer (Triac)
En ayant parcouru le site je ne suis pas sûr de voir quels sont les avantages ou inconvénients de ces 2 modules (je souhaite piloter un simple CE à résistance), câbler un SSR me paraît plus simple, et j'ai cru comprendre que les trias pouvaient provoquer plus d'interférences electro-magnétiques.

Dans mon cas d'usage, pour un CE résistant, est-ce un bon choix de partir sur un SSR ?

2. Intégration du routeur solaire au tableau électrique.
Je me pose la question de la connexion du routeur au circuit de puissance, le CE est actuellement piloté avec un contacteur HC/HP (donc il chauffe principalement la nuit). Mon but avec le routeur est bien entendu d'utiliser le surplus solaire en journée et éviter un conso la nuit en HC.

J'ai vu ce schéma de câblage sur une des pages du site :

[Image: contacteur.png]

Si j'ai bien compris, en connectant le routeur en // de la sortie du contacteur HC/HP, le routeur envoie la puissance modulée par le SSR ou le Dimmer vers le CE s'il y a du surplus et cela permet également, les jours sans surplus ou sans soleil, de conserver une alimentation du CE la nuit en HC ?

Question supplémentaire : pour éviter de tirer des câbles vers le CE, peut-on connecter la sortie du routeur (puissance) directement en // du contacteur jour/nuit dans le tableau électrique ?

Merci à André et aux différents intervenants sur le forum pour toute les informations que j'y ai trouvé.

Imprimer cet élément

  recherche version Solar_Router_V15_11
Posté par : fazer31 - 02-03-2026, 10:58 PM - Forum : Routeur Photovoltaïque - Réponses (5)

Bonjour,

Suite à un soucis sur un de mes ESP32 sur lequel je dois re-téléverser la version et comme celle-ci n'est plus en téléchargement sur le site d’André, du coup je suis à la rechercher de la version  Solar_Router_V15_11.

C'est version convient et fonctionne très bien pour mon installation, si quelqu'un avait la gentillesse de me la faire passer svp.

@+

Imprimer cet élément

  V17.7 et mqtt , problème publication
Posté par : cddu33 - 02-03-2026, 09:42 PM - Forum : Routeur Photovoltaïque - Réponses (11)

Bonsoir, j'ai installé ce matin la version 17.07 et depuis plus de publication de l'ouverture, temps estimé...
J'ai downgrade en 17.05 et c'est revenu.

J'ai bien sûr reset l'esp32 après la mise a jour.

Sinon le reste fonctionne très bien.

Imprimer cet élément

  spectrum center frequency alignment
Posté par : Scandio I2WQ - 02-03-2026, 06:41 PM - Forum : Remote SDR - Pas de réponse

the frequency of the central beacon on the spectrum is not in the center and does not coincide
with that indicated in the strip below
if I align the two frequencies with manual correction the correction comes eliminated by enabling self-correction
how to center the spectrum?

Imprimer cet élément

  Erreur compilation arduino ide
Posté par : cupriste - 01-03-2026, 09:16 PM - Forum : Routeur Photovoltaïque - Réponses (5)

Bonsoir,

Je tente de téléverser la version 17.07 et j'ai cette erreur . En version 15 ça fonctionnait du coup j'ai mis à jour les bibliothéques .

Il n'y a pas de nouvelles librairies à télécharger juste celles ci dessous ? 

[*]PubSubClient
[*]OneWire
[*]DallasTemperature
[*]UrlEncode
[*]LovyanGFX
[*]EthernetESP32

[*]Merci pour votre aide



Pièces jointes Miniature(s)
   
Imprimer cet élément

  V17.7
Posté par : David51 - 01-03-2026, 06:15 PM - Forum : Routeur Photovoltaïque - Réponses (8)

Je viens de voir une nouvelle version pas encore essayé pour moi.

C est quoi les changements que notre amis André a fait, suis toujours en v17.5 sur mes différente routeur.
Car la 17.6 première version bug sur mon tactile

Imprimer cet élément

  Installation Arduino ou OTA impossible
Posté par : Patrick B. - 01-03-2026, 06:10 PM - Forum : Adaptation aux chargeurs VE - Réponses (5)

Bonjour à tous

Avec plusieurs RMS depuis 2 ans, je m'intéresse vivement au sujet du routage vers une borne de charge.
J'ai plusieurs RMS en service en V17.06, passés en V17.07 à l'instant.
J'ai 1 RMS que j'utilise exclusivement en tests.
Sur ce dernier, j'ai installé la version "Solar_Router_V16_09_station_VE_h3rv3_2_5_1.ino" en OTA, et il me semble que cela fonctionne. 
Si je passe en "Solar_Router_V16_10_station_VE_h3rv3_2_6_3_1.ino" en OTA, la sélection des différents modes revient toujours sur "arrêt" après quelques secondes.
Mise à jour vers " Solar_Router_V17_06_station_VE_h3rv3_2_6_7.ino" par ARDUINO impossible, le téléversement se fait mais l'ESP plante ou reste en version précédente.
Partant du RMS test en V17.06 version F1atb, j'ai tenté une mise à jour OTA vers "V17_06_station_VE", la mise à jour ne se fait pas.

J'ai respecté la prog, les Gpios 4 et 5, etc...

J'ai peut être raté quelque chose, découvrant le sujet station VE.

Merci pour vos lumières !

Imprimer cet élément

  mqtt
Posté par : atlantis007@free.fr - 01-03-2026, 01:07 PM - Forum : Evolutions faites, à faire, dont vous rêvez... - Pas de réponse

bonjour
j ai une petite question comment récupère en mqtt les valeur de la 2ème sonde.
cordialement

Imprimer cet élément

  CT002 integré dans le routeur
Posté par : Jimmy Vabaglio - 01-03-2026, 11:27 AM - Forum : Evolutions faites, à faire, dont vous rêvez... - Réponses (1)

Bonjour

serait il possible d'intégré le CT002 de marstek dans les sources de mesures de puissance sur le routeur F1ATB

Merci d'avance

Cordialement

Imprimer cet élément


Utilisateurs en ligne
Il y a actuellement 354 utilisateurs connectés. » 0 Membre(s) | 349 Visiteur(s)
Applebot, Baidu, Bing, Google, Yandex

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