Statistiques du Forum
» Membres : 2,194,   » Dernier membre : Toufik,   » Sujets du forum : 1,744,   » Messages du forum : 15,120,  
Statistiques complètes

  Radiateur avec thermostat électronique
Posté par : JMi09 - 26-10-2025, 05:18 PM - Forum : Vos configurations - Réponses (9)

Bonjour à toutes et tous,
Je souhaiterais pouvoir rooter un radiateur électrique muni d'un thermostat électrique. 
J'ai testé le branchement direct cela ne fonctionne pas le thermostat électronique ne supporte pas le courant haché de mon triac. 
J'ai démonté le radiateur j'ai essayé de m'inspirer de la modification à faire pour les chauffe-eau avec thermostat électronique  mais je n'arrive pas à transposer le problème à mon chauffage électriqu: cela est tout de suite mes compétences.
Ci-joint une photo de la carte électronique qui contient 4 fiches :une pour le neutre et une autre pour la phase provenant de EDF et deux fiches pour lesquelles j'ai pu vérifier au multimètre que cela correspondait à la résistance chauffante du radiateur. Si certains plus douées que moi peuvent me proposer un branchement pour le triac de mon routeur je suis preneur. Merci à vous par avance



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

  Configuration, actions, conditions. Besoin d'explications
Posté par : Ardèche - 26-10-2025, 02:22 PM - Forum : Routeur Photovoltaïque - Réponses (1)

Bonjour à tous ! 
Tous d'abord, si vous voyez qu'un topic identique existe, n'hésitez pas à me renvoyer dessus. J'ai cherché mais pas trouvé. 

Ma config : Installation de 3400w sur toiture. 3 routeurs sur la maison. 1 routeur relais chauffe eau (2000w) 1 routeur triac sèche serviette (750w) , 1 routeur triac radiateur roulette (1500w)
Objectif idéal : le chauffe eau (routeur maitre) prend ce dont il a besoin. le sèche serviette prend le reste, ensuite le radiateur roulette. 

ce que j'observe : 
problème 1 : le chauffe eau prend ce dont il a besoin mais quand un nuage passe, le temps qu'il rectifie sa conso, on passe des fois à -100w ce qui déclenche le sèche serviette qui a une config à -100w et PAF, ça fait le yoyo entre les deux routeurs. Idem quand le chauffe eau à fini et que je balance sur sèche serviette et radiateur roulette : yoyo. 

Problème 2 : quand j'ai une consigne de démarrage à -100w (ex sèche serviette), le sèche serviette va tout prendre mais va maintenir la conso à -100w, je donne donc 100w à EDF. Je comprend le truc mais je me demande comment faire mieux.

Question : Comment éviter les phénomènes de yoyo tout en gardant des priorités ? Je ne comprends pas très bien l'utilisation des " conditions optionnelles pour activer" avec les durées et les pourcentages. 

D'avance merci pour vos conseils Smile

Imprimer cet élément

  Sécuriser l' accès des pages du serveur
Posté par : Laurent53 - 26-10-2025, 12:11 PM - Forum : Evolutions faites, à faire, dont vous rêvez... - Réponses (2)

Bonjour 

Ma demande à Gemini pro avec le fichier server ino v15.10:


Sécuriser l accès des pages par basic auth, et ajoute du code pour pouvoir modifier mot de passe, donne le fichier entièrement modifié

(Il demande une fois le mot de passe pour l'accès à l'ensemble des pages tant que la session est ouverte, IMPORTANT : Vous devez ajouter ces variables à vos fonctions de lecture/écriture ROM
// (comme EcritureEnROM) pour les sauvegarder de manière permanente !!
String www_user = "admin";
String www_pass = "admin"Wink



// ***************
// * WEB SERVER *
// ***************
[span_0](start_span)bool opened = false;[span_0](end_span)
[span_1](start_span)String ConfImport;[span_1](end_span)

// --- AJOUT POUR BASIC AUTH ---
// Identifiants par défaut.
// !! IMPORTANT : Vous devez ajouter ces variables à vos fonctions de lecture/écriture ROM
// (comme EcritureEnROM) pour les sauvegarder de manière permanente !!
String www_user = "admin";
String www_pass = "admin";

// Page HTML pour changer le mot de passe
const char PassHtml[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML><html><head>
<title>Changer Mot de Passe</title><meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<meta name='viewport' content='width=device-width, initial-scale=1'>
<style>
  body { font-family: Arial, sans-serif; background: #f0f0f0; text-align: center; }
  div { background: #fff; border-radius: 8px; padding: 20px; max-width: 400px; margin: 50px auto; box-shadow: 0 4px 8px rgba(0,0,0,0.1); }
  input { width: 90%; padding: 10px; margin: 10px 0; border: 1px solid #ccc; border-radius: 4px; }
  button { background: #007bff; color: white; padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; }
  button:hover { background: #0056b3; }
</style>
</head><body>
<div>
  <h2>Changer le mot de passe</h2>
  <form action='/passupdate' method='POST'>
    Nom d'utilisateur:<br>
    <input type='text' name='user' value='@@USER@@'><br>
    Nouveau mot de passe:<br>
    <input type='password' name='pass'><br>
    <button type='submit'>Enregistrer</button>
  </form>
  <br><a href='/'>Retour</a>
</div>
</body></html>
)rawliteral";


/**
 * @brief Vérifie l'authentification "Basic Auth".
 * Renvoie 'true' si l'utilisateur est authentifié (ou en mode AP).
 * Renvoie 'false' si l'authentification a échoué et demande les identifiants.
 */
bool checkAuth() {
  // Désactive l'authentification en mode AP pour permettre la configuration Wi-Fi
  if (WiFi.getMode() != WIFI_STA) {
    return true;
  }
  
  if (!server.authenticate(www_user.c_str(), www_pass.c_str())) {
    server.requestAuthentication();
    return false;
  }
  return true;
}
// --- FIN AJOUT BASIC AUTH ---


[span_2](start_span)void Init_Server() {[span_2](end_span)
  //Init Web Server on port 80
  [span_3](start_span)server.on("/", handleRoot);[span_3](end_span)
  [span_4](start_span)server.on("/MainJS", handleMainJS);[span_4](end_span)
  [span_5](start_span)server.on("/MainJS2", handleMainJS2);[span_5](end_span)
  [span_6](start_span)server.on("/MainJS3", handleMainJS3);[span_6](end_span)
  [span_7](start_span)server.on("/Para", handlePara);[span_7](end_span)
  [span_8](start_span)server.on("/ParaJS", handleParaJS);[span_8](end_span)
  [span_9](start_span)server.on("/ParaRouteurJS", handleParaRouteurJS);[span_9](end_span)
  [span_10](start_span)server.on("/ParaAjax", handleParaAjax);[span_10](end_span)
  [span_11](start_span)server.on("/ParaRouteurAjax", handleParaRouteurAjax);[span_11](end_span)
  [span_12](start_span)server.on("/ParaUpdate", handleParaUpdate);[span_12](end_span)
  [span_13](start_span)server.on("/Actions", handleActions);[span_13](end_span)
  [span_14](start_span)server.on("/ActionsJS", handleActionsJS);[span_14](end_span)
  [span_15](start_span)server.on("/ActionsJS2", handleActionsJS2);[span_15](end_span)
  [span_16](start_span)server.on("/ActionsJS3", handleActionsJS3);[span_16](end_span)
  [span_17](start_span)server.on("/ActionsUpdate", handleActionsUpdate);[span_17](end_span)
  [span_18](start_span)server.on("/ActionsAjax", handleActionsAjax);[span_18](end_span)
  [span_19](start_span)server.on("/Brute", handleBrute);[span_19](end_span)
  [span_20](start_span)server.on("/BruteJS", handleBruteJS);[span_20](end_span)
  [span_21](start_span)server.on("/BruteJS2", handleBruteJS2);[span_21](end_span)
  [span_22](start_span)server.on("/ajax_histo48h", handleAjaxHisto48h);[span_22](end_span)
  [span_23](start_span)server.on("/ajax_histo1an", handleAjaxHisto1an);[span_23](end_span)
  [span_24](start_span)server.on("/ajax_dataRMS", handleAjaxRMS);[span_24](end_span)
  [span_25](start_span)server.on("/ajax_dataESP32", handleAjaxESP32);[span_25](end_span)
  [span_26](start_span)server.on("/ajax_data", handleAjaxData);[span_26](end_span)
  [span_27](start_span)server.on("/ajax_data10mn", handleAjaxData10mn);[span_27](end_span)
  [span_28](start_span)server.on("/ajax_etatActions", handleAjax_etatActions);[span_28](end_span)
  [span_29](start_span)server.on("/ajax_etatActionX", handleAjax_etatActionX);[span_29](end_span)
  [span_30](start_span)server.on("/ajax_Temperature", handleAjaxTemperature);[span_30](end_span)
  [span_31](start_span)server.on("/ajax_Noms", handleAjaxNoms);[span_31](end_span)
  [span_32](start_span)server.on("/ajaxRAZhisto", handleajaxRAZhisto);[span_32](end_span)
  [span_33](start_span)server.on("/SetGPIO", handleSetGpio);[span_33](end_span)
  [span_34](start_span)server.on("/Export", handleExport);[span_34](end_span)
  [span_35](start_span)server.on("/export_file", handleExport_file);[span_35](end_span)
  [span_36](start_span)server.on("/restart", handleRestart);[span_36](end_span)
  [span_37](start_span)server.on("/Change_Wifi", handleChange_Wifi);[span_37](end_span)
  [span_38](start_span)server.on("/AP_ScanWifi", handleAP_ScanWifi);[span_38](end_span)
  [span_39](start_span)server.on("/AP_SetWifi", handleAP_SetWifi);[span_39](end_span)
  [span_40](start_span)server.on("/commun.css", handleCommunCSS);[span_40](end_span)

  // --- AJOUT ROUTES MOT DE PASSE ---
  server.on("/password", handlePassword);
  server.on("/passupdate", HTTP_POST, handlePassUpdate); // Accepte le POST du formulaire

  [span_41](start_span)server.onNotFound(handleNotFound);[span_41](end_span)

  //SERVER OTA
  server.on("/OTA", HTTP_GET, []() {
    if (!checkAuth()) return; // <-- SÉCURISÉ
    server.sendHeader("Connection", "close");
    server.send(200, "text/html", OtaHtml);
  [span_42](start_span)});[span_42](end_span)
  /*handling uploading firmware file */
  server.on(
    "/update", HTTP_POST, []() {
      if (!checkAuth()) return; // <-- SÉCURISÉ (Partie 1)
      server.sendHeader("Connection", "close");
      server.send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK");
      ESP.restart();
    },
    []() {
      if (!checkAuth()) return; // <-- SÉCURISÉ (Partie 2)
      HTTPUpload& upload = server.upload();
      [span_43](start_span)if (upload.status == UPLOAD_FILE_START) {[span_43](end_span)
        [span_44](start_span)Serial.printf("Update: %s\n", upload.filename.c_str());[span_44](end_span)
        [span_45](start_span)if (!Update.begin(UPDATE_SIZE_UNKNOWN)) {[span_45](end_span)
          [span_46](start_span)Update.printError(Serial);[span_46](end_span)
        }
      [span_47](start_span)} else if (upload.status == UPLOAD_FILE_WRITE) { [cite: 246-247]
        /* flashing firmware to ESP*/
        [cite_start]if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) {[span_47](end_span)
          [span_48](start_span)Update.printError(Serial);[span_48](end_span)
        }
      [span_49](start_span)} else if (upload.status == UPLOAD_FILE_END) {[span_49](end_span)
        [span_50](start_span)if (Update.end(true)) {[span_50](end_span)
          [span_51](start_span)Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize);[span_51](end_span)
        } else {
          [span_52](start_span)Update.printError(Serial);[span_52](end_span)
        }
      }
    [span_53](start_span)});[span_53](end_span)

  /*handling uploading file */
  server.on(
    "/import", HTTP_POST, []() {
      if (!checkAuth()) return; // <-- SÉCURISÉ (Partie 1)
      server.sendHeader("Connection", "close");
      server.send(200, "text/plain", "OK");
    },
    []() {
      if (!checkAuth()) return; // <-- SÉCURISÉ (Partie 2)
      HTTPUpload& upload = server.upload();
      [span_54](start_span)if (opened == false) {[span_54](end_span)
        [span_55](start_span)opened = true;[span_55](end_span)

        [span_56](start_span)Serial.println("Debut Upload");[span_56](end_span)
        [span_57](start_span)ConfImport = "";[span_57](end_span)
      }
      [span_58](start_span)if (upload.status == UPLOAD_FILE_WRITE) {[span_58](end_span)
        [span_59](start_span)for (int i = 0; i < upload.currentSize; i++) { [cite: 248-249]
          [cite_start]ConfImport += String(char(upload.buf[i]));[span_59](end_span)
        }
      [span_60](start_span)} else if (upload.status == UPLOAD_FILE_END) {[span_60](end_span)
        [span_61](start_span)Serial.println("UPLOAD_FILE_END");[span_61](end_span)
        [span_62](start_span)Serial.println(ConfImport);[span_62](end_span)
        [span_63](start_span)ImportParametres(ConfImport);[span_63](end_span)
        [span_64](start_span)opened = false;[span_64](end_span)
      }
    [span_65](start_span)});[span_65](end_span)
  [span_66](start_span)server.begin();[span_66](end_span)
}

// --- NOUVEAUX HANDLERS POUR MOT DE PASSE ---

/**
 * @brief Affiche la page de modification du mot de passe.
 */
void handlePassword() {
  if (!checkAuth()) return; // Sécurise l'accès à cette page
  String html = PassHtml;
  html.replace("@@USER@@", www_user);
  server.sendHeader("Connection", "close");
  server.send(200, "text/html", html);
}

/**
 * @brief Traite la mise à jour du mot de passe depuis le formulaire.
 */
void handlePassUpdate() {
  if (!checkAuth()) return; // Sécurise l'accès à cette fonction
  
  if (server.hasArg("user") && server.hasArg("pass")) {
    www_user = server.arg("user");
    www_pass = server.arg("pass");
    
    // !! IMPORTANT !!
    // Assurez-vous que votre fonction EcritureEnROM() (dans votre .ino principal)
    // sauvegarde bien les variables 'www_user' et 'www_pass' en EEPROM.
    EcritureEnROM(); [span_67](start_span)// Appel de votre fonction existante[span_67](end_span)
    
    server.sendHeader("Connection", "close");
    server.send(200, "text/plain", "OK. Mot de passe mis a jour. Le navigateur va redemander l'authentification.");
  } else {
    server.sendHeader("Connection", "close");
    server.send(400, "text/plain", "Erreur: 'user' ou 'pass' manquant.");
  }
}

// --- HANDLERS EXISTANTS (TOUS MODIFIÉS AVEC checkAuth()) ---

void handleRoot() { //Pages principales
  if (!checkAuth()) return; // <-- SÉCURISÉ

  [span_68](start_span)server.sendHeader("Connection", "close");[span_68](end_span)
  [span_69](start_span)if (WiFi.getMode() != WIFI_STA) {[span_69](end_span)
    [span_70](start_span)server.send(200, "text/html", ConnectAP_Html);[span_70](end_span)
  } else {
    [span_71](start_span)server.send(200, "text/html", MainHtml);[span_71](end_span)
  }
}
void handleChange_Wifi() {
  if (!checkAuth()) return; // <-- SÉCURISÉ
  [span_72](start_span)server.sendHeader("Connection", "close");[span_72](end_span)
  [span_73](start_span)server.send(200, "text/html", ConnectAP_Html);[span_73](end_span)
}
void handleMainJS() { //Code Javascript
  if (!checkAuth()) return; // <-- SÉCURISÉ
  [span_74](start_span)server.sendHeader("Connection", "close");[span_74](end_span)
  [span_75](start_span)server.send(200, "text/javascript", MainJS);[span_75](end_span)
}
void handleMainJS2() { //Code Javascript
  if (!checkAuth()) return; // <-- SÉCURISÉ
  [span_76](start_span)server.sendHeader("Connection", "close");[span_76](end_span)
  [span_77](start_span)server.send(200, "text/javascript", MainJS2);[span_77](end_span)
}
void handleMainJS3() { //Code Javascript
  if (!checkAuth()) return; // <-- SÉCURISÉ
  [span_78](start_span)server.sendHeader("Connection", "close");[span_78](end_span)
  [span_79](start_span)server.send(200, "text/javascript", MainJS3);[span_79](end_span)
}
void handleBrute() { //Page données brutes
  if (!checkAuth()) return; // <-- SÉCURISÉ
  [span_80](start_span)server.sendHeader("Connection", "close");[span_80](end_span)
  [span_81](start_span)server.send(200, "text/html", PageBrute);[span_81](end_span)
}
void handleBruteJS() { //Code Javascript
  if (!checkAuth()) return; // <-- SÉCURISÉ
  [span_82](start_span)server.sendHeader("Connection", "close");[span_82](end_span)
  [span_83](start_span)server.send(200, "text/javascript", PageBruteJS);[span_83](end_span)
}
void handleBruteJS2() { //Code Javascript
  if (!checkAuth()) return; // <-- SÉCURISÉ
  [span_84](start_span)server.sendHeader("Connection", "close");[span_84](end_span)
  [span_85](start_span)server.send(200, "text/javascript", PageBruteJS2);[span_85](end_span)
}

void handleAjaxRMS() { // Envoi des dernières données brutes reçues du RMS
  if (!checkAuth()) return; // <-- SÉCURISÉ
  [span_86](start_span)String S = "";[span_86](end_span)
  [span_87](start_span)String RMSExtDataB = "";[span_87](end_span)
  [span_88](start_span)int LastIdx = server.arg(0).toInt();[span_88](end_span)
  [span_89](start_span)if (Source == "Ext") {[span_89](end_span)
    [span_90](start_span)WiFiClient clientESP_RMS;[span_90](end_span)
    [span_91](start_span)String host = IP2String(RMSextIP);[span_91](end_span)
    [span_92](start_span)if (!clientESP_RMS.connect(host.c_str(), 80)) {[span_92](end_span)
      [span_93](start_span)StockMessage("connection to ESP_RMS external failed (call from handleAjaxRMS)");[span_93](end_span)
      [span_94](start_span)return;[span_94](end_span)
    }
    [span_95](start_span)String url = "/ajax_dataRMS?idx=" + String(LastIdx);[span_95](end_span)
    [span_96](start_span)clientESP_RMS.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");[span_96](end_span)
    [span_97](start_span)unsigned long timeout = millis();[span_97](end_span)
    [span_98](start_span)while (clientESP_RMS.available() == 0) {[span_98](end_span)
      [span_99](start_span)if (millis() - timeout > 5000) {[span_99](end_span)
        [span_100](start_span)StockMessage(">>> clientESP_RMS Timeout !");[span_100](end_span)
        [span_101](start_span)clientESP_RMS.stop();[span_101](end_span)
        [span_102](start_span)return;[span_102](end_span)
      }
    }
    [span_103](start_span)while (clientESP_RMS.available()) {[span_103](end_span)
      [span_104](start_span)RMSExtDataB += clientESP_RMS.readStringUntil('\r');[span_104](end_span)
    }
    [span_105](start_span)S = RMSExtDataB.substring(RMSExtDataB.indexOf("\n\n") + 2);[span_105](end_span)
  } else {
    [span_106](start_span)S = DATE + RS + Source_data;[span_106](end_span)
    [span_107](start_span)if (Source_data == "UxI") {[span_107](end_span)
      [span_108](start_span)S += RS + String(Tension_M) + RS + String(Intensite_M) + RS + String(PowerFactor_M) + GS;[span_108](end_span)
      [span_109](start_span)int i0 = 0;[span_109](end_span)
      [span_110](start_span)int i1 = 0;[span_110](end_span)
      [span_111](start_span)for (int i = 0; i < 100; i++) {[span_111](end_span)
        [span_112](start_span)i1 = (i + 1) % 100;[span_112](end_span)
        [span_113](start_span)if (voltM[i] <= 0 && voltM[i1] > 0) {[span_113](end_span)
          [span_114](start_span)i0 = i1;[span_114](end_span)
          [span_115](start_span)i = 100;[span_115](end_span)
        }
      }
      [span_116](start_span)for (int i = 0; i < 100; i++) {[span_116](end_span)
        [span_117](start_span)i1 = (i + i0) % 100;[span_117](end_span)
        [span_118](start_span)S += String(int(10 * voltM[i1])) + RS;[span_118](end_span)
      }
      [span_119](start_span)S += "0" + GS;[span_119](end_span)
      [span_120](start_span)for (int i = 0; i < 100; i++) {[span_120](end_span)
        [span_121](start_span)i1 = (i + i0) % 100;[span_121](end_span)
        [span_122](start_span)S += String(int(10 * ampM[i1])) + RS;[span_122](end_span)
      }
      [span_123](start_span)S += "0";[span_123](end_span)
    }
    [span_124](start_span)if (Source_data == "UxIx2") {[span_124](end_span)
      [span_125](start_span)S += GS + String(Tension_M) + RS + String(Intensite_M) + RS + String(PuissanceS_M - PuissanceI_M) + RS + String(PowerFactor_M) + RS + String(Energie_M_Soutiree) + RS + String(Energie_M_Injectee);[span_125](end_span)
      [span_126](start_span)S += RS + String(Tension_T) + RS + String(Intensite_T) + RS + String(PuissanceS_T - PuissanceI_T) + RS + String(PowerFactor_T) + RS + String(Energie_T_Soutiree) + RS + String(Energie_T_Injectee);[span_126](end_span)
      [span_127](start_span)S += RS + String(Frequence);[span_127](end_span)
    }
    [span_128](start_span)if (Source_data == "Linky") {[span_128](end_span)
      [span_129](start_span)S += GS;[span_129](end_span)
      [span_130](start_span)while (LastIdx != IdxDataRawLinky) {[span_130](end_span)
        [span_131](start_span)S += String(DataRawLinky[LastIdx]);[span_131](end_span)
        [span_132](start_span)LastIdx = (1 + LastIdx) % 10000;[span_132](end_span)
      }
      [span_133](start_span)S += GS + String(IdxDataRawLinky);[span_133](end_span)
    }
    [span_134](start_span)if (Source_data == "Enphase") {[span_134](end_span)
      [span_135](start_span)S += GS + String(Tension_M) + RS + String(Intensite_M) + RS + String(PuissanceS_M - PuissanceI_M) + RS + String(PowerFactor_M) + RS + String(Energie_M_Soutiree) + RS + String(Energie_M_Injectee);[span_135](end_span)
      [span_136](start_span)S += RS + String(PactProd) + RS + String(PactConso_M);[span_136](end_span)
      [span_137](start_span)String SessionId = "Not Received from Enphase";[span_137](end_span)
      [span_138](start_span)if (Session_id != "") {[span_138](end_span)
        [span_139](start_span)SessionId = "Ok Received from Enphase";[span_139](end_span)
      }
      [span_140](start_span)String Token_Enphase = "Not Received from Enphase";[span_140](end_span)
      [span_141](start_span)if (TokenEnphase.length() > 50) {[span_141](end_span)
        [span_142](start_span)Token_Enphase = "Ok Received from Enphase";[span_142](end_span)
      }
      [span_143](start_span)if (EnphaseUser == "") {[span_143](end_span)
        [span_144](start_span)SessionId = "Not Requested";[span_144](end_span)
        [span_145](start_span)Token_Enphase = "Not Requested";[span_145](end_span)
      }
      [span_146](start_span)S += RS + SessionId;[span_146](end_span)
      [span_147](start_span)S += RS + Token_Enphase;[span_147](end_span)
    }
    [span_148](start_span)if (Source_data == "SmartG") {[span_148](end_span)
      [span_149](start_span)S += GS + SG_dataBrute;[span_149](end_span)
    }
    [span_150](start_span)if (Source_data == "ShellyEm" || Source_data == "ShellyPro") {[span_150](end_span)
      [span_151](start_span)S += GS + ShEm_dataBrute;[span_151](end_span)
    }
    [span_152](start_span)if (Source_data == "UxIx3") {[span_152](end_span)
      [span_153](start_span)S += GS + MK333_dataBrute;[span_153](end_span)
    }
    [span_154](start_span)if (Source_data == "Pmqtt") {[span_154](end_span)
      [span_155](start_span)S += GS + P_MQTT_Brute;[span_155](end_span)
    }
  }
  [span_156](start_span)server.sendHeader("Connection", "close");[span_156](end_span)
  [span_157](start_span)server.send(200, "text/html", S);[span_157](end_span)
}
void handleAjaxHisto48h() { // Envoi Historique de 50h (600points) toutes les 5mn
  if (!checkAuth()) return; // <-- SÉCURISÉ
  [span_158](start_span)String S = "";[span_158](end_span)
  [span_159](start_span)String T = "";[span_159](end_span)
  [span_160](start_span)String U = "";[span_160](end_span)
  [span_161](start_span)String Ouverture = "";[span_161](end_span)
  [span_162](start_span)int iS = IdxStockPW;[span_162](end_span)
  [span_163](start_span)for (int i = 0; i < 600; i++) {[span_163](end_span)
    [span_164](start_span)S += String(tabPw_Maison_5mn[iS]) + ",";[span_164](end_span)
    [span_165](start_span)T += String(tabPw_Triac_5mn[iS]) + ",";[span_165](end_span)
    [span_166](start_span)iS = (1 + iS) % 600;[span_166](end_span)
  }
  [span_167](start_span)for (int canal = 0; canal < 4; canal++) {[span_167](end_span)
    [span_168](start_span)iS = IdxStockPW;[span_168](end_span)
    [span_169]}

Imprimer cet élément

  Commande de chauffage avec circulateur
Posté par : DavidR79 - 25-10-2025, 01:56 PM - Forum : Evolutions faites, à faire, dont vous rêvez... - Réponses (2)

Bonjour,
Je souhaiterais installer un ballon tampon pour compléter la chauffe de ma chaudière gaz.
L'idée est de chauffer le ballon tampon par sa résistance électrique avec le surplus d'électricité et quand la température demandée est atteinte activer le circulateur du ballon tampon pour envoyer l'eau chaude vers la chaudière en circuit fermé. 
C'est la fonction du déclenchement du circulateur que je ne maîtrise pas.
Il faudrait qu'à une température atteinte ça enclenche le circulateur et quand la température est en dessous de la température demandée le circulateur s'arrête. 
Quel matériel utiliser pour la commande du circulateur. 
Pour info j'ai 2 départs sur la chaudière, le premier pour le chauffage central et le second qui sera utilisé par le ballon tampon.
Je pense à une fonction on off ssr commandé en fonction d'une température atteinte mais je préfère avoir vos avis.
En espérant que vous avez compris.
Merci d'avance
David

Imprimer cet élément

  Conflit entre mon routeur et ma batterie
Posté par : djipipi - 25-10-2025, 10:36 AM - Forum : Routeur Photovoltaïque - Réponses (6)

Bonjour à tous,

Je viens d’installer une batterie Venus E3 + CT002 en complément de mon installation photovoltaïque 5,7Kwc pour optimiser mon autoconsommation (je suis en Convention d'Autoconsommation Sans Injection CACSI).

J'ai un abonnement E.J.P Linky triphasé.

J’ai un routeur F1ATB piloté par un module Shelly 3em pour la régulation de l’injection de ma production solaire vers mon chauffe-eau électrique monophasé.

Jusque-là tout va bien si ce n’est que j’ai évidemment le même problème que beaucoup à propos de la concurrence entre mon routeur et ma batterie, dans la journée, la batterie se vide dans le chauffe-eau alors que je préférerais d’abord remplir la batterie et ensuite chauffer l’eau du CE, même partiellement car nous ne sommes plus que 2 à la maison.

Quelqu’un aurait une expérience à partager, pour le moment je gère en manuel mais c’est dommage pour du si beau matériel.
Merci pour vos conseils
P.S : je n’ai pas home assistant.

Imprimer cet élément

  Doute sur le fonctionnement du routeur / profil conso
Posté par : DGF88 - 24-10-2025, 08:52 PM - Forum : Routeur Photovoltaïque - Réponses (6)

Bonjour à tous,

J'ai depuis qques temps un routeur F1ATB, comme je ne connais pas bien l'électricité et l'électronique j'ai fais le strict minimum moi-même. Je m'excuse par avance pour mes imprécisions.

J'étais agréablement surpris  en pensais que tout fonctionnais bien mais en regardant ma consommation heure par heure auprès de mon fournisseur d’électricité, je constate un profil de consommation récurrent le matin, dès 8h30 voir 9h00 sur le mois d'octobre. Pendant environ 1h ou 2h, j'ai des consommations d'environ 1,5 kwh (0,9 kwh par tranche de 30 min sur les graphiques).

Est-ce possible que quand j'ai du surplus d'électricité, le routeur démarre le ballon mais que ce dernier ne prenne pas que le surplus pour fonctionner mais 100% de sa puissance (2 200 watts de mémoire) ?

J'ai 3 panneaux solaires pour environ 1100 watts crêtes. Je n'ai pas effectué de calibration des mesures Ueff et Ieff. Je pense avoir la V9 UxI RMS.

Je peux vous envoyer des captures d'écran de ma configuration et des photos de l'installation si c'est nécessaire.

Bonne soirée à vous et merci d'avance.

Imprimer cet élément

  Routeur vers ECS Ariston VLS 65
Posté par : Elfinols - 23-10-2025, 07:36 PM - Forum : Routeur Photovoltaïque - Réponses (7)

Bonjour,
Je suis donc à vouloir monter un routeur solaire pour mon chauffe-eau ARISTON VLS65 Fr.
Vous m'avez bien aidé pour la partie capteur mesure avec mon Linky (qui était en mode historique et non standard).
Le linky est donc dans mon garage dans lequel est aussi ma box et le ballon ECS dans une salle d'eau à environ 10 m. Normalement le Wifi porte jusque là-bas.
Donc je ne suis pas très compétent en électricité, mais ça va pour le câblage électronique (je sais braser en gros !).

Donc ne voulant pas faire de bêtises (faire cramer l'ECS, incendie, etc ...) et ne sachant pas bien convertir les schémas électriques trouvés sur le site, je vous joins quelques photos à partir desquelles j'espère vous pourrez me dire quoi faire.
J'avais pris l'option TRIAC au lieu de SSR, j'espère que j'ai eu raison, mais si il faut acheter des composants, je suis prêt à le faire.

Donc merci pour votre future aide : où couper, que câbler, quel matériel.
A ce stade j'ai un ESP WROOM, Triac à modifier et un refroidisseur, LED.
Je n'ai pas de système HC/HP sur l'ECS (pas compatible puisqu'électronique ...)
Merci d'avance.



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

  Routeur UxIx2 qui ne fonctionne plus
Posté par : Hobi72 - 23-10-2025, 05:43 PM - Forum : Routeur Photovoltaïque - Réponses (14)

Bonjour,

Mon routeur ne fonctionne plus depuis hier.

- Après un reset via tablette ou PC, les 2 leds installées s’allument 3 fois de suite (démarrage normal) mais la led qui normalement clignote toutes les sec environ reste éteinte. Le voyant sur la carte ESP32 est bien allumé, ainsi que celui du capteur JSY-MK-194T.
- Le gpio17 (je l’utilise pour commander un relai à distance) se met à 3,3v alors que suivant ma programmation journalière elle devrait être 0.
- Au niveau de l’interface, sur tablette ou PC :
page « accueil » : message "demande d’une mise à l’heure manuelle".
Page données brutes : aucune tension.
Partie « Messages » :
Wifi Begin : Livebox-D870
Connecté par WiFi, adresse IP : 192.168.1.10 or RMS-ESP32-11512720.local. ça reste fixe.

- Hier j’ai eu besoin de couper l’alimentation du circuit qui alimente ma Live Box 5.
- J’ai fait un essai en installant une version plus récente : même constat.
- ça fonctionnait très bien depuis environ 6 mois. (juste l’adresse ip qui s’est modifiée toute seule)
je vous mets 4 captures.

Merci pour l’aide.



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

  pas de données venant du linky
Posté par : xerw80 - 23-10-2025, 04:11 PM - Forum : Routeur Photovoltaïque - Réponses (8)

bonjour a tous.

je post aujourd’hui pour vous exposer mon problème.

je n ai aucune remontée d info  du linky concernant ma consommation  et l ESP 32 ne cesse de redémarrer au bout de 2 minutes. j ai également un voyant rouge clignotant en haut a gauche de l écran du pc 

j ai bien suivi le schéma de montage et j utilise la version 15.10

j ai essayé 2 esp différent et ça me fait exactement la même chose

l ESP 32 est bien connecté a internet 

je vous met 2 photos ( si j y arrive), ça sera plus parlant je pense
           

n hésitez pas a me demander les infos que vous pourriez avoir besoin

merci

Imprimer cet élément

  saisie message : le copié/collé ne marche pas ?
Posté par : Hobi72 - 23-10-2025, 03:22 PM - Forum : Routeur Photovoltaïque - Réponses (6)

Bonjour,
j'ai un message tout prêt rédigé avec Word mais impossible de  faire un copié/collé, la police est minuscule, c'est illisible.
Y a-t-il une solution autre que tout taper ici ?
merci.

 

Imprimer cet élément


Utilisateurs en ligne
Il y a actuellement 382 utilisateurs connectés. » 7 Membre(s) | 372 Visiteur(s)
Applebot, Bing, Google, Grisly18, jean pierre geffroy, Jeff52, L'Arsène57, Lolo69

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