Modification page HTML

Bonjour a tous
Je souhaite modifier mon montage de gestion de chauffage, qui date de 2021.
Cette modif concerne la partie page web.
Actuellement j’envoie des variables sur une page web de cette façon.(merci a JML)
Et ça fonctionne très bien, depuis tout ce temps.

 // ==================================== définition des pages=========
  server.begin();
  server.on("/Chauffage2025", HTTP_GET, [](AsyncWebServerRequest *request) {  // Page web du chauffage
    request->send_P(200, "text/html", Chauffage2025_htm, processeurEtat);
  });
  //=============================================================

Je souhaite ajouter a cette même page un "bouton" qui me permettrait d'envoyer un flag a l'esp32, pour effectuer une action.
En l’occurrence remettre un compteur a zéro.

Je me suis inspiré de cet exemple (de JML) qui allume une led, mais je n'arrive pas a l'intégrer sur ma page.

// définition des pages led html
    server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
      request->send_P(200, "text/html", index_html);
    });

  server.on("/on", HTTP_GET, [](AsyncWebServerRequest *request) {
    allumer();
    request->send_P(200, "text/html", ledon_html);
  });

  server.on("/off", HTTP_GET, [](AsyncWebServerRequest *request) {
    eteindre();
    request->send_P(200, "text/html", ledoff_html);
  });

Voici la page en question:

const char Chauffage2025_htm[] PROGMEM = R"--8<--(<p><BIG>Donnees du Chauffage 2025</BIG></p>

<FONT color=#0033CC>==========CHAMBRE 1 ==========</FONT><p>
<FONT color=#FF6600>Temperature CH1: %TEMPOFFSETCH1% &deg : Consigne Temperature en cours CH1 : %CONS_ENCOURS_CH1% &deg<p>
Consigne Jour CH1 : %CONS_JOUR_CH1% &deg : Consigne Nuit CH1 : %CONS_NUIT_CH1% &deg<p>

Heure debut Jour CH1 : %HDEBUTJOURCH1% : heure_debut_nuitCH1 : %HDEBUTNUITCH1%</FONT><p>

<FONT color=#009900> Temperature mini CH1 : %MINITEMPCH1% &deg : Temperature maxi CH1 : %MAXITEMPCH1% &deg<p>
Hysteresis plus CH1 : %HYSTPLUSCH1% &deg : Hysteresis moins CH1:%HYSTMOINSCH1% &deg<p>

Offset sonde CH1 :  %OFFSETSONDECH1% &deg : Temps d'integration CH1 :  %TPSINTEGRECH1% Secondes</FONT><p>

<FONT color=#FF0000>Statut CH1 :  %STATUTCH1% : Trappe : %ETATTRAPPE%</FONT<p>

<p>

<FONT color=#0033CC>========== CHAMBRE 2 ==========</FONT><p>
<FONT color=#FF6600>Temperature CH2: %TEMPOFFSETCH2% &deg : Consigne Temperature CH2 : %CONS_ENCOURS_CH2% &deg<p>
Consigne Jour CH2 : %CONS_JOUR_CH2% &deg : Consigne Nuit CH2 : %CONS_NUIT_CH2% &deg<p>

Heure debut Jour CH2 : %HDEBUTJOURCH2% : heure_debut_nuitCH2 : %HDEBUTNUITCH2%</FONT><p>

<FONT color=#009900>Temperature mini CH2 : %MINITEMPCH2% &deg : Temperature maxi CH2 : %MAXITEMPCH2% &deg<p>

Hysteresis plus CH2 :  %HYSTPLUSCH2% &deg : Hysteresis moins CH2 :  %HYSTMOINSCH2% &deg<p>

Offset sonde CH2 :  %OFFSETSONDECH2% &deg : Temps d'integration CH2 :  %TPSINTEGRECH2% Secondes</FONT><p>

<FONT color=#FF0000>Statut CH2 :  %ETATCH2% : Bouche : %CHARETATBOUCHE%</FONT><p>

<p>

<FONT color=#0033CC>========== AIR ==========</FONT><p>
Temperature Air : %TEMPERATUREAIR% &deg<p>
Temperature mini Air : %MINITEMPAIR% &deg : Temperature maxi Air : %MAXITEMPAIR% &deg)--8<--";

const char index_html[] PROGMEM = "<p>GESTION DE LA LED:</p><ul><li><a href=\"/on\">Led ON</a></li><li><a href=\"/off\">Led OFF</a></li></ul>";
const char ledon_html[] PROGMEM = "<p>LA LED EST ON</p><ul><li><a href=\"/off\">Led OFF</a></li></ul>";
const char ledoff_html[] PROGMEM = "<p>LA LED EST OFF</p><ul><li><a href=\"/on\">Led ON</a></li></ul>";

Que j’ appel de cette façon:

server.begin();
  server.on("/Chauffage2025", HTTP_GET, [](AsyncWebServerRequest *request) {  // Page web du chauffage
    request->send_P(200, "text/html", Chauffage2025_htm, processeurEtat);
  });

server.on("/Chauffage2025", HTTP_GET, [](AsyncWebServerRequest *request) {
    request->send_P(200, "text/html", index_html);
  });

  server.on("/Chauffage2025", HTTP_GET, [](AsyncWebServerRequest *request) {
    allumer();
    request->send_P(200, "text/html", ledon_html);
  });

  server.on("/Chauffage2025", HTTP_GET, [](AsyncWebServerRequest *request) {
    eteindre();
    request->send_P(200, "text/html", ledoff_html);
  });

Merci de votre aide

Votre code HTML n'est pas entouré de HTML tags.

[edit]Désolé pour mon malentendu. Voir message n° 6.

Bonjour
Merci de votre réponse, mais cela ne m'aide pas du tout.

Non mais sans les balises vous n'aurez pas bcp de réponses :slight_smile:
vaut mieux faciliter la vie des "aidants" et respecter les consignes d'usage du forum.

vous pouvez poster tout le code?

Bonjour
C'est ça que xfpd voulait dire...
Désolé, mais je n'avais pas du tout capté.

Pourtant j'ai bien employé pour passer mon code.

Là je vois que c'est bon non?
C'est vous qui avez rectifié? dans ce cas merci.

Voila le ino (désolé, c'est un joyeux chantier)

// =========================== Version du 24/03/2025 ====================================

// ===================== Envoi valeurs vers CH1 pour affichage seul =====================
// ===================== CH1 gérée par ESP32 CH2 ===============

// ============ Version carte ESP32 3.0.7 OK pas la 3.1.1

// =================== SERVO ===========================

#include <ESP32Servo.h>  // version=3.0.6 author=Kevin Harrington,John K. Bennett
static const int servoPin = 33;
Servo Bouchech2;
// =================== FRAM ===========================
#include "FRAM.h"  // AUTHOR: Rob Tillaart V 0.8.1
FRAM11 fram;       // memoire eeprom
uint32_t start;
uint32_t stop;
uint32_t sizeInBytes = 0;

#include <AsyncTCP.h>

// ===================== Gestion page Web ===============================
#include "pageweb.h"
#include "processeur.h"         //conversion des variables en chaines de characteres
#include <ESPAsyncWebServer.h>  // name=ESP Async WebServer/version=1.2.4/author=Me-No-Dev
AsyncWebServer server(80);      // port vers web
//#include <ESPmDNS.h>
//===========AsyncClient client;

#include <WiFi.h>
#include <HTTPClient.h>  // Pour envoyer des requêtes HTTP_GET

//======================= pour OTA ====================
//#include <ESPmDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
// ====================================================

// Gestion DS18B20
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 32
#define TEMPERATURE_PRECISION 12
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Tableau adresses sondes ds18b20
DeviceAddress ch1, ch2, air;
String addressStr = "";
int tps_sondes = 0;
// ====================================================
#include "RTClib.h"
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = { "Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi" };
// =============================================================================

// Pour acquisition heure N.T.P
#include "esp_sntp.h"
#define MAX_SIZE 80  // pour SNTP
const char *ntpServer = "pool.ntp.org";
bool timeSync = false;  // bit synchro ok
// =====================================
//#define RXD1 12  // Données recues de CH1 3.3V
#define RXD1 2   // Données recues de ch1  3.3V
#define TXD1 13  // Données Emises vers ch1
#define RXD2 16  // Données  Recues de  Nextion 3.3V
#define TXD2 17  // Données Emises vers Nextion

const char *ssid = "xxxxxxx";
const char *password = "xxxxxxxxxxxx";
// ================= VARIABLES =====================

int Nb_sondes = 0;

bool mem_nextion_ok = false;
bool mem_cave_ok = false;
bool mem_wifi_ok = false;
bool flagwifiok = false;   // Wifi connecté
bool flagwifiout = false;  // Time out connection wifi
bool flagwifinextion = false;
const int ledverte = 23;  // pour test
const int ledtest = 5;    // pour test commande html
const int led_defaut = 15;
const int relais_chauffe = 14;  // Contact sec vers Hoben

//tps attente connection wifi dans setup
unsigned long currentMilliswifi = 0;
const long tpswifi = 10000;  //tps attente connection

unsigned long previousMillisWifi = 0;  // interval de
unsigned long intervalWifi = 30000;    // reconnection WIFI
unsigned long currentMillis = millis();

//==================================== Temporisations ======================================

unsigned long previousMillistemp = 0;  // Interval de
const long intervalmesuretemp = 3000;  // Mesure de temperature

unsigned long previousMillistimeout = 0;  // Timeout ouverture/fermeture trappe
const long timeout = 15000;

//unsigned long temps;
//unsigned long tps;  // temps temperature stable avant commutation etat 0/1

// =============================================================== Valeurs CH1 ===============================

// ====== Emission vers CH1 ====================
unsigned long previousMillisenvoi = 0;  // Interval d'émission
const long intervalenvoi = 3000;        // vers CH1

// ========= reception fde ch1 ================
int intFromPC1 = 0;  // flag vie
int intFromPC2 = 0;  // reserve
// ========================================
int statut_ch1 = 0;  // demande chauffe CH1
int flagvie = 0;
int etattrappe = 0;  // 0=fermée 1=ouverte 2=defaut ouverture 3=defaut fermeture
int reserve = 0;
char statutch1[10];        // Affichage  WEB
char statuttrappech1[20];  // Affichage ouverte Fermée WEB
int resolution_tempreellech1 = 12;
float tempreellech1 = 0.0;  // temperature issue de la mesure
float oldtempreellech1 = 0.0;
float tempoffsetch1 = 0.0;  // temperature après application de l'offset

float minitempch1 = 10;
float maxitempch1 = 11;

float cons_temp_jour_ch1 = 0.0;
float oldcons_temp_jour_ch1 = 0.0;
float cons_temp_nuit_ch1 = 0.0;
float oldcons_temp_nuit_ch1 = 0.0;
float cons_encours_ch1 = 0.0;  // consigne temperature en cours

float hystplusch1 = 0.0;
float oldhystplusch1 = 0.0;
float hystmoinsch1 = 0.0;
float oldhystmoinsch1 = 0.0;
float tpsintegrech1 = 0;  // Temps intégration lecture changement temp
float oldtpsintegrech1 = 0;
float offsetsondech1 = 0.0;  // Offset ds18b20 CH1
float oldoffsetsondech1 = 0.0;

// Consigne jours/ nuit CH1
unsigned int heure_debut_jourCH1 = 0;
unsigned int heure_debut_nuitCH1 = 0;

unsigned int oldheure_debut_jourCH1 = 0;
unsigned int oldheure_debut_nuitCH1 = 0;

unsigned long tempsch1;
unsigned long tpsch1;  // temps temperature stable avant commutation etat 0/1

int demch1 = 0;
int journuitch1 = 0;  // 0=jour 1=nuit

bool testplusch1 = 0;  //test delta temperature/consigne ch1
bool testmoinsch1 = 0;
bool memoire_ch1_ok;

//======================================================== DRV8825 Trappe ============================
const int pinEnable = 25;  // Activation du driver/pilote ++++ Logique inverse +++
const int pinStep = 26;    // Signal de PAS (avancement)
const int pinDir = 27;     // Direction pour drv

// ===================================================== Valeurs CH2 ===============================
int resolution_tempreellech2 = 12;
float tempreellech2 = 0.0;     // temperature issue de la mesure
float oldtempreellech2 = 0.0;  // temperature issue de la mesure
float tempoffsetch2 = 0.0;     // temperature après application de l'offset
float oldtempoffsetch2 = 0;    // temperature après application de l'offset
float cons_temp_jour_ch2 = 0.0;
float oldcons_temp_jour_ch2 = 0.0;
float cons_temp_nuit_ch2 = 0.0;
float oldcons_temp_nuit_ch2 = 0.0;
float cons_encours_ch2 = 0.0;  // consigne temperature en cours

float minitempch2 = 21;
float maxitempch2 = 22;
float minitempair = 30;
float maxitempair = 32;

float hystplusch2 = 0.0;
float oldhystplusch2 = 0.0;
float hystmoinsch2 = 0.0;
float oldhystmoinsch2 = 0.0;
float tpsintegrech2 = 0;  // Temps intégration lecture changement temp
float oldtpsintegrech2 = 0;
float offsetsondech2 = 0.0;
float oldoffsetsondech2 = 0.0;

int journuitch2 = 0;  // 0=jour 1=nuit
int positionmin_servo = 0;
float positionmedia_servo = 20;
int oldpositionmedia_servo = 0;
int positionmax_servo = 68;
int valpos_servo = 0;
int oldposservo = 0;
const int pintrappeouverte = 34;  //Fdc trappe ouverte
const int pintrappeferme = 35;    //Fdc trappe fermée
int trappe_ouverte = 0;
int trappe_ferme = 0;
int defaut_ouverture = 0;  //timeout ouverture trappe
int defaut_fermeture = 0;  //timeout fermeture trappe

// Consigne jours/ nuit CH2
unsigned int heure_debut_jourCH2 = 0;
unsigned int heure_debut_nuitCH2 = 0;

unsigned int oldheure_debut_jourCH2 = 0;
unsigned int oldheure_debut_nuitCH2 = 0;

unsigned long tempsch2;
unsigned long tpsch2;  // temps temperature stable avant commutation etat 0/1


int etatch2 = 0;
int etatbouche = 0;    // 1=fermée  2=media  3= ouverte
bool testplusch2 = 0;  //test delta temperature/consigne ch2
bool testmoinsch2 = 0;
char statutch2[10];       // Affichage  WEB
char charetatbouche[20];  // pour affichage en clair du statut Bouche

float tempmaxi = 70;  // control défaut sonde
float resetval = 0;   // valeur de reset Maxi/Mini EEprom
float tempair = 0;
float ldtempair = 0;
int resolution_air = 12;
//float temppoele = 0;
int NB_defsonde_CH1 = 0;    // Nombre de défauts sonde CH1
int NB_defsonde_CH2 = 0;    // Nombre de défauts sonde CH2
int NB_defsonde_AIR = 0;    // Nombre de défauts sonde air
int NB_defsonde_Poele = 0;  // Nombre de défauts sonde poele


// ======================= AFFI Heure ==========================
unsigned int h100 = 0;  // heures en centièmes  ex 917=9h17
unsigned int oldh100 = 0;
int counterreconnectwifi = 0;
int oldcounterreconnectwifi = 0;
#define MAX_SIZE 80  // pour SNTP
//const char *ntpServer = "pool.ntp.org";
//bool timeSync = false;  // bit synchro ok

char sHour[3];  //pour stocker heure avec 0 dans var sHour
char sMin[3];   //pour stocker minute avec 0 dans var sMin
char sSec[3];   //pour stocker secondes avec 0 dans var sSec
char Heure_Courante_Char[20];

int annee = 0;
int oldannee = 0;  // pour tempo
int mois = 0;
int oldmois = 0;
int jour = 0;
int oldjour = 0;
int httpCode;

// ==================== Echanges avec nextion ===========================
float valeur = 0;
int quichar = 0;  // reception ascii de nextion qui envoi la valeur
int numpage = 0;  // de quelle page provient le message
//int refresh = 0;
char text[7] = "    ";     // recoit la valeur nextion
char recup[5] = "    ";    // recupere la valeur nextion
const byte numChars = 32;  // pour 32 octets
char receivedChars[numChars];
boolean newData = false;
// ====================================================================

// ================================== SETUP ===============================
void setup() {
  //Serial.begin(115200);
  Serial1.begin(9600, SERIAL_8N1, RXD1, TXD1);   //COM CH1
  Serial2.begin(57600, SERIAL_8N1, RXD2, TXD2);  // COM Nextion
  Bouchech2.attach(servoPin);
  sensors.begin();
  // =============== ATTENTE COM NEXTION ===============
  delay(4000);
  Serial2.print("Init.b1.pic=");
  Serial2.print(3);  //numero image com nextion ok
  endnextion();
  mem_nextion_ok = true;
  acquit_sondes();

  // ===============================================================
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);


  //pinMode(ledbleu, OUTPUT);
  //pinMode(ledrouge, OUTPUT);
  pinMode(pinDir, OUTPUT);
  pinMode(pinStep, OUTPUT);
  pinMode(pinEnable, OUTPUT);
  digitalWrite(pinEnable, HIGH);  // logique inversée
  pinMode(relais_chauffe, OUTPUT);
  pinMode(led_defaut, OUTPUT);
  pinMode(ledverte, OUTPUT);
  pinMode(ledtest, OUTPUT);
  pinMode(pintrappeouverte, INPUT);
  pinMode(pintrappeferme, INPUT);
  currentMilliswifi = millis();
  // =====================Test si connection wifi Ok sinon timeout de 10s =========================
  while ((flagwifiout == false) && (WiFi.status() != WL_CONNECTED)) {
    Serial2.print(F("Init.t21.txt=\""));
    Serial2.print("ATTENTE");
    Serial2.print(F("\""));
    endnextion();
    if (millis() - currentMilliswifi >= tpswifi) {
      flagwifiout = true;
      //digitalWrite(ledbleu, HIGH);
      Serial2.print(F("Init.t21.txt=\""));
      Serial2.print("TIMEOUT");
      Serial2.print(F("\""));
      endnextion();
    }
    if ((WiFi.status() == WL_CONNECTED)) {
      flagwifiok = true;

      //digitalWrite(ledrouge, HIGH);
      Serial2.print(F("Init.t21.txt=\""));
      Serial2.print("connecte");
      Serial2.print(F("\""));
      endnextion();
      delay(50);
      OTA_wifi();
    }
  }
  // ======================Si Wifi Ok demande serveur NTP ============================================
  // ===================== Acquisition Date/Heure serveur NTP ====================================

  if (flagwifiok == true) {
    configTzTime("CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00", ntpServer);
    sntp_set_time_sync_notification_cb(time_sync_notification);
    while (timeSync != true) {
      delay(500);
    }
    rtc.begin();
    time_t timestamp = time(NULL);
    char buffer[MAX_SIZE];
    struct tm *pTime = localtime(&timestamp);
    strftime(buffer, MAX_SIZE, "%Y/%m/%d %H:%M:%S", pTime);
    rtc.adjust(DateTime(buffer));
    delay(500);
  } else {
    rtc.begin();
  }



  // ==================================== définition des pages =============================================
  server.begin();

  server.on("/Chauffage2025", HTTP_GET, [](AsyncWebServerRequest *request) {  // Page web du chauffage
    request->send_P(200, "text/html", Chauffage2025_htm, processeurEtat);
  });
  //===================================================================================
/*
    // définition des pages led html
    server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
      request->send_P(200, "text/html", index_html);
    });

  server.on("/on", HTTP_GET, [](AsyncWebServerRequest *request) {
    allumer();
    request->send_P(200, "text/html", ledon_html);
  });

  server.on("/off", HTTP_GET, [](AsyncWebServerRequest *request) {
    eteindre();
    request->send_P(200, "text/html", ledoff_html);
  });
*/
server.on("/Chauffage2025", HTTP_GET, [](AsyncWebServerRequest *request) { 
      request->send_P(200, "text/html", index_html);
    });

  server.on("/Chauffage2025", HTTP_GET, [](AsyncWebServerRequest *request) { 
    allumer();
    request->send_P(200, "text/html", ledon_html);
  });

  server.on("/Chauffage2025", HTTP_GET, [](AsyncWebServerRequest *request) { 
    eteindre();
    request->send_P(200, "text/html", ledoff_html);
  });
  // ================================ Positionnement servo =================================================================
  valpos_servo = positionmin_servo;
  deplacemoins();


  // ========================= Lecture variables eeprom FRAM =======================
  //=============================Variables CH1 0X50 =================

  fram.begin(0x50);  // Zone memoire pour CH1
  fram.readObject(0, cons_temp_jour_ch1);
  //Serial.println(lect1, 1);

  fram.readObject(4, cons_temp_nuit_ch1);
  //Serial.println(lect2, 1);

  fram.readObject(8, hystplusch1);
  //Serial.println(lect3, 1);

  fram.readObject(12, hystmoinsch1);
  //Serial.println(lect4, 1);

  fram.readObject(16, offsetsondech1);
  //Serial.println(lect5, 0);

  fram.readObject(20, tpsintegrech1);

  //Serial.println(lect6, 1);

  //============================= Variables CH2 0X51 =================
  fram.begin(0x51);
  fram.readObject(0, cons_temp_jour_ch2);
  //Serial.println(lect1, 1);

  fram.readObject(4, cons_temp_nuit_ch2);
  //Serial.println(lect2, 1);

  fram.readObject(8, hystplusch2);
  //Serial.println(lect3, 1);

  fram.readObject(12, hystmoinsch2);
  //Serial.println(lect4, 1);

  fram.readObject(16, offsetsondech2);
  //Serial.println(lect5, 0);

  fram.readObject(20, tpsintegrech2);
  //Serial.println(lect6, 1);

  fram.readObject(24, positionmedia_servo);
  //Serial.println(lect7, 1);

  //============================= Variables Min / Max Temperatures 0X52 =================

  fram.begin(0x52);

  fram.readObject(0, minitempch1);

  fram.readObject(4, maxitempch1);

  fram.readObject(8, minitempch2);

  fram.readObject(12, maxitempch2);

  fram.readObject(16, minitempair);

  fram.readObject(20, maxitempair);

  //=============================Variables Heures Jour/nuit CH1/CH2 0X53 =================
  fram.begin(0x53);
  fram.readObject(0, heure_debut_jourCH1);
  fram.readObject(4, heure_debut_nuitCH1);

  fram.readObject(8, heure_debut_jourCH2);
  fram.readObject(12, heure_debut_nuitCH2);
}
// ====================================================================================================
// ================================================= LOOP =============================================
// ====================================================================================================
void loop() {

  digitalWrite(ledverte, HIGH);

  ArduinoOTA.handle();
  unsigned long currentMillis = millis();
  unsigned long currentMillisenvoi = millis();

  //======================== Reconnection wifi si perdue ==================================

  if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillisWifi >= intervalWifi)) {
    //Serial.print(millis());
    //Serial.println("Reconnecting to WiFi...");
    WiFi.disconnect();
    WiFi.reconnect();
    previousMillisWifi = currentMillis;
    counterreconnectwifi++;
  }

  recvWithStartEndMarkers();  // Reception des données de CH1
  if (newData) {
    //Serial.println(receivedChars);
    if (parseData())  // showParsedData();
      newData = false;
  }

  // =============================== Reception des valeurs de Nextion Nextion =================
  HMI_read();  // Lecture des valeurs recues de nextion
  repart();    // Affectation des valeurs recu de nextion

  // =============================== Affichages vers Nextion =================================
  affiinit();
  if (numpage == 1) {
    //Serial2.print(F("Init.t14.txt=\""));
    //Serial2.print(numpage);  //
    //Serial2.print(F("\""));
    //endnextion();
    affiinit();  // Affichage paramètres page Init
  }

  if (numpage == 2) {
    //Serial2.print(F("Temp.t17.txt=\""));
    //Serial2.print(numpage);  //
    //Serial2.print(F("\""));
    //endnextion();
    affitemps();  // Affichage paramètres page Temp
  }

  if (numpage == 3) {
    //Serial2.print(F("Temp.t17.txt=\""));
    //Serial2.print(numpage);  //
    //Serial2.print(F("\""));
    //endnextion();
    affich1();  // Affichage paramètres page CH1
  }

  if (numpage == 4) {
    affich2();  // Affichage paramètres page CH2
  }

  if (numpage == 5) {
    affi_maxmin();  // Affichage Mini Maxi
  }

  if (numpage == 6) {
    tempo();  // Affichage paramètres page Linky
  }

  if (numpage == 7) {
    Reset();  // Affichage paramètres page Reset Defaut et Max/Min
  }

  //=============================== Lecture Temperatures ======================
  if (currentMillis - previousMillistemp >= intervalmesuretemp) {
    previousMillistemp = currentMillis;
    acquis_temp();  // Acquisition des températures en mode rapide
    maxmin();
  }
  reconnect_wifi();  // Reconnection wifi si perdue

  // =============================================== Changement consigne jour/nuit CH1 ===========================
  DateTime now = rtc.now();                //get the current date-time
  h100 = now.hour() * 100 + now.minute();  // pour le changement de consigne suivant l'heure

  if (h100 >= heure_debut_jourCH1 && h100 < heure_debut_nuitCH1) {
    cons_encours_ch1 = cons_temp_jour_ch1;
    journuitch1 = 0;  // 0=jour 1=nuit
  } else {
    cons_encours_ch1 = cons_temp_nuit_ch1;
    journuitch1 = 1;  // 0=jour 1=nuit
  }
  // =============================================== Changement consigne jour/nuit CH2 ===========================
  if (h100 >= heure_debut_jourCH2 && h100 < heure_debut_nuitCH2) {
    cons_encours_ch2 = cons_temp_jour_ch2;
    journuitch2 = 0;  // 0=jour 1=nuit
  } else {
    cons_encours_ch2 = cons_temp_nuit_ch2;
    journuitch2 = 1;  // 0=jour 1=nuit
  }
  // =========================================================================================
  //===============================================test demande de chauffe {temp+hystplus} CH1 ====================

  if (tempoffsetch1 > cons_encours_ch1 + hystplusch1 and statut_ch1) {
    testplusch1 = 1;  //temperature > consigne+hysteresis

    tpsch1 = (millis() - tempsch1);
    if (tpsch1 > tpsintegrech1) {  //temps temperature stable
      statut_ch1 = 0;              //autorisation fermeture trappe
    }
  } else {
    testplusch1 = 0;
  }

  //==================================================test={temp-hystmoins} CH1 =========================

  if (tempoffsetch1 < cons_encours_ch1 - hystmoinsch1 and not statut_ch1) {
    testmoinsch1 = 1;  //temperature < consigne+hysteresis

    tpsch1 = (millis() - tempsch1);
    if (tpsch1 > tpsintegrech1) {  //temps temperature stable
      statut_ch1 = 1;              //autorisation ouverture trappe
    }
  } else {
    testmoinsch1 = 0;
  }
  if (not testplusch1 and not testmoinsch1) {
    tempsch1 = millis();
  }

  //===============================================test demande de chauffe {temp+hystplus} CH2 ====================
  if (tempoffsetch2 > cons_encours_ch2 + hystplusch2 and etatch2) {
    testplusch2 = 1;  //temperature > consigne+hysteresis

    tpsch2 = (millis() - tempsch2);
    if (tpsch2 > tpsintegrech2) {  //temps temperature stable
      etatch2 = 0;                 //autorisation fermeture trappe
    }
  } else {
    testplusch2 = 0;
  }

  //===========================================================test={temp-hystmoins} CH2 =============================
  if (tempoffsetch2 < cons_encours_ch2 - hystmoinsch2 and not etatch2) {
    testmoinsch2 = 1;  //temperature < consigne+hysteresis


    tpsch2 = (millis() - tempsch2);
    if (tpsch2 > tpsintegrech2) {  //temps temperature stable
      etatch2 = 1;                 //autorisation ouverture trappe
    }
  } else {
    testmoinsch2 = 0;
  }
  if (not testplusch2 and not testmoinsch2) {
    tempsch2 = millis();
  }
  //=============================================== PILOTAGE SERVO ====================
  servo();

  //============================ Demande air chaud a Hoben ===================
  if (((statut_ch1 == 1) && (defaut_ouverture == 0) && (defaut_fermeture == 0)) || (etatch2 == 1)) {
    digitalWrite(relais_chauffe, HIGH);
  }
  if ((statut_ch1 == 0) && (etatch2 == 0)) {
    digitalWrite(relais_chauffe, LOW);
  }

  // ======================================== Action selon Etat CH1 =====================================================
  switch (statut_ch1) {
    case 0:  //Arret
      strcpy(statutch1, "ARRET");
      break;
    case 1:  //Marche
      strcpy(statutch1, "CHAUFFAGE");
      break;
  }
  switch (etattrappe) {
    case 0:
      strcpy(statuttrappech1, "FERMEE");
      break;
    case 1:
      strcpy(statuttrappech1, "OUVERTE");
      break;
    case 2:
      strcpy(statuttrappech1, "DEFAUT OUVERTURE");
      break;
    case 3:
      strcpy(statuttrappech1, "DEFAUT FERMETURE");
      break;
  }

  // ======================================== Action selon Etat CH2 =====================================================
  switch (etatch2) {
    case 0:  //Arret
      strcpy(statutch2, "ARRET");
      break;
    case 1:  //Marche
      strcpy(statutch2, "CHAUFFAGE");
      break;
  }

  switch (etatbouche) {
    case 1:
      strcpy(charetatbouche, "FERMEE");
      break;
    case 2:
      strcpy(charetatbouche, "MILIEU");
      break;
    case 3:
      strcpy(charetatbouche, "OUVERTE");
      break;
  }

  //============================== Ouverture/Fermeture trappe ==========================
  trappe_ouverte = digitalRead(pintrappeouverte);
  if ((statut_ch1 == 1) && (trappe_ouverte == false) && (defaut_ouverture == 0)) {
    ouverture();
  }
  trappe_ferme = digitalRead(pintrappeferme);
  if ((statut_ch1 == 0) && (trappe_ferme == false) && (defaut_fermeture == 0)) {
    fermeture();
  }

  if ((trappe_ouverte == 1) && (defaut_ouverture == 0) && (defaut_fermeture == 0)) {
    etattrappe = 1;
  }
  if ((trappe_ferme == 1) && (defaut_ouverture == 0) && (defaut_fermeture == 0)) {
    etattrappe = 0;
  }

  //=========================================== Defaut Trappe =======================================
  if (defaut_ouverture == 1) {
    etattrappe = 2;
  }
  if (defaut_fermeture == 1) {
    etattrappe = 3;
  }

  if ((defaut_ouverture == 1) || (defaut_fermeture == 1)) {
    digitalWrite(led_defaut, HIGH);
  }
  if ((defaut_ouverture == 0) && (defaut_fermeture == 0)) {
    digitalWrite(led_defaut, LOW);
  }

  //unsigned long start = millis();
  //unsigned long stop = millis();
  //tps_sondes = (stop - start);
  /*
  Serial2.print(F("Temp.t6.txt=\""));
  Serial2.print(tps_sondes);  // Temps mesures 3 sondes ds18b20
  Serial2.print(F("\""));
  endnextion();

*/

  // ===================================Envoi données vers CH1 ======================================================

  if (currentMillisenvoi - previousMillisenvoi >= intervalenvoi) {
    previousMillisenvoi = currentMillisenvoi;
    emissionversvch1();
  }
}
// ================================ FIN LOOP ===============================

void time_sync_notification(struct timeval *tv)  // verification synchro NTP
{
  //Serial.println("Notification of a time synchronization event");
  timeSync = true;
}
void reconnect_wifi() {
  currentMillis = millis();
  //======================== Reconnection wifi si perdue ==================================
  // if WiFi is down, try reconnecting every CHECK_WIFI_TIME seconds
  if ((WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillisWifi >= intervalWifi)) {
    //Serial.print(millis());
    //Serial.println("Reconnecting to WiFi...");
    WiFi.disconnect();
    WiFi.reconnect();
    previousMillisWifi = currentMillis;
    counterreconnectwifi++;
    //Serial2.print(F("Init.t17.txt=\""));
    //Serial2.print(counterreconnectwifi);
    //Serial2.print(F("\""));
    //endnextion();
  }
}

void acquis_temp() {
  sensors.setWaitForConversion(false);  // makes it async
  sensors.requestTemperatures();
  sensors.setWaitForConversion(true);
  //unsigned long stop = millis();
  //Serial.print("Time used: ");
  //Serial.println(stop - start);
  tempreellech1 = sensors.getTempCByIndex(0);
  tempoffsetch1 = (tempreellech1 + offsetsondech1);
  tempreellech2 = sensors.getTempCByIndex(1);
  tempoffsetch2 = (tempreellech2 + offsetsondech2);
  tempair = sensors.getTempCByIndex(2);
}

void acquit_sondes() {
  Nb_sondes = (sensors.getDeviceCount(), DEC);
  Serial2.print(F("Init.t18.txt=\""));
  Serial2.print(sensors.getDeviceCount());
  Serial2.print(F("\""));
  endnextion();
  if (!sensors.getAddress(ch1, 0)) {
    Serial2.print(F("Init.t25.txt=\"NOK"));
    Serial2.print(F("\""));
    endnextion();
  } else {
    Serial2.print(F("Init.t25.txt=\"OK"));
    Serial2.print(F("\""));
    endnextion();
  }

  if (!sensors.getAddress(ch2, 1)) {
    Serial2.print(F("Init.t26.txt=\"NOK"));
    Serial2.print(F("\""));
    endnextion();
  } else {
    Serial2.print(F("Init.t26.txt=\"OK"));
    Serial2.print(F("\""));
    endnextion();
  }

  if (!sensors.getAddress(air, 2)) {
    Serial2.print(F("Init.t27.txt=\"NOK"));
    Serial2.print(F("\""));
    endnextion();
  } else {
    Serial2.print(F("Init.t27.txt=\"OK"));
    Serial2.print(F("\""));
    endnextion();
  }
}

//=========================  WI-FI OTA ===========================
void OTA_wifi() {
  //Serial.println("Booting");
  //WiFi.mode(WIFI_STA);
  //WiFi.begin(ssid, password);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    //Serial.println("Connection Failed! Rebooting...");
    delay(5000);
    ESP.restart();
  }
  ArduinoOTA
    .onStart([]() {
      String type;
      if (ArduinoOTA.getCommand() == U_FLASH)
        type = "sketch";
      else  // U_SPIFFS
        type = "filesystem";
      // NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()
      //Serial.println("Start updating " + type);
    })
    .onEnd([]() {
      //Serial.println("\nEnd");
    })
    .onProgress([](unsigned int progress, unsigned int total) {
      //Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
    })
    .onError([](ota_error_t error) {
      Serial.printf("Error[%u]: ", error);
      if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
      else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
      else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
      else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
      else if (error == OTA_END_ERROR) Serial.println("End Failed");
    });
  ArduinoOTA.begin();
  //Serial.println("Ready");
  //Serial.print("IP address: ");
  //Serial.println(WiFi.localIP());

  // =========================== FIN WI-FI OTA ====================================
}
void allumer() {
  digitalWrite(ledtest, HIGH);
}

void eteindre() {
  digitalWrite(ledtest, LOW);
}

Et la page "Processeur"

// ============================== CH1 ===========================================

extern float tempoffsetch1;
extern float cons_encours_ch1;
extern float cons_temp_jour_ch1;
extern float cons_temp_nuit_ch1;
extern float hystplusch1;
extern float hystmoinsch1;
extern float offsetsondech1;
extern float tpsintegrech1;
extern float minitempch1;
extern float maxitempch1;
extern int statut_ch1;

extern unsigned int heure_debut_jourCH1;
extern unsigned int heure_debut_nuitCH1;

//extern char statutcharsch1[20] ;
extern char statutch1[10] ;
extern char statuttrappech1[20] ;

// ============================== CH2 ===========================================
extern float tempoffsetch2;
extern float tempreellech2;
extern float tempoffsetch2;
extern float cons_encours_ch2;
extern float cons_temp_jour_ch2;
extern float cons_temp_nuit_ch2;

extern float hystplusch2;
extern float hystmoinsch2;
extern float offsetsondech2;
extern float tpsintegrech2;
extern float minitempch2;
extern float maxitempch2;
extern int etatch2;

extern unsigned int heure_debut_jourCH2;
extern unsigned int heure_debut_nuitCH2;

extern float tempair;
extern float minitempair;
extern float maxitempair;

extern char statutcharsch2[20] ;
extern char statutch2[10] ;
extern char charetatbouche[20] ;
// ===============================================================================

// ===================================================  Variables CH1 =====================================================================

String processeurEtat(const String& var)
{
  char bufferTemporaire[20];
  
   if (var == "TEMPOFFSETCH1") {
    dtostrf(tempoffsetch1, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

 if (var == "CONS_ENCOURS_CH1") {
    dtostrf(cons_encours_ch1, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

if (var == "CONS_JOUR_CH1") {
    dtostrf(cons_temp_jour_ch1, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

if (var == "CONS_NUIT_CH1") {
    dtostrf(cons_temp_nuit_ch1, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

if (var == "HDEBUTJOURCH1") {
    itoa(heure_debut_jourCH1, bufferTemporaire, 10);// convertir l'entier en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

if (var == "HDEBUTNUITCH1") {
    itoa(heure_debut_nuitCH1, bufferTemporaire, 10);// convertir l'entier en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

if (var == "HYSTPLUSCH1") {
    dtostrf(hystplusch1, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

if (var == "HYSTMOINSCH1") {
    dtostrf(hystmoinsch1, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

if (var == "OFFSETSONDECH1") {
    dtostrf(offsetsondech1, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

if (var == "TPSINTEGRECH1") {
    dtostrf((tpsintegrech1/1000), 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

if (var == "MINITEMPCH1") {
    dtostrf(minitempch1, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

if (var == "MAXITEMPCH1") {
    dtostrf(maxitempch1, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }
/*
 if (var == "ETATCH1") {
    itoa(statut_ch1, bufferTemporaire, 10);// convertir l'entier en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }
*/
 if (var == "STATUTCH1") {// Deja en char
return statutch1;
 }

 if (var == "ETATTRAPPE") {// Deja en char
return statuttrappech1;
 }
// ===================================================  Variables CH2 =====================================================================
/*
  if (var == "TEMPREELLECH2") {
    dtostrf(tempreellech2, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }
*/
 if (var == "TEMPOFFSETCH2") {
    dtostrf(tempoffsetch2, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

 if (var == "CONS_ENCOURS_CH2") {
    dtostrf(cons_encours_ch2, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

if (var == "CONS_JOUR_CH2") {
    dtostrf(cons_temp_jour_ch2, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

if (var == "CONS_NUIT_CH2") {
    dtostrf(cons_temp_nuit_ch2, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

if (var == "HDEBUTJOURCH2") {
    itoa(heure_debut_jourCH2, bufferTemporaire, 10);// convertir l'entier en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

if (var == "HDEBUTNUITCH2") {
    itoa(heure_debut_nuitCH2, bufferTemporaire, 10);// convertir l'entier en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

if (var == "HYSTPLUSCH2") {
    dtostrf(hystplusch2, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

if (var == "HYSTMOINSCH2") {
    dtostrf(hystmoinsch2, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

if (var == "OFFSETSONDECH2") {
    dtostrf(offsetsondech2, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

if (var == "TPSINTEGRECH2") {
    dtostrf((tpsintegrech2/1000), 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

if (var == "MINITEMPCH2") {
    dtostrf(minitempch2, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

if (var == "MAXITEMPCH2") {
    dtostrf(maxitempch2, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }
/*
 if (var == "ETATCH2") {
    itoa(etatch2, bufferTemporaire, 10);// convertir l'entier en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }
*/
 if (var == "ETATCH2") {
 return statutch2;
 }
if (var == "CHARETATBOUCHE") {
 return charetatbouche;
 }




 if (var == "TEMPERATUREAIR") {
    dtostrf(tempair, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

if (var == "MINITEMPAIR") {
    dtostrf(minitempair, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }

if (var == "MAXITEMPAIR") {
    dtostrf(maxitempair, 8, 1, bufferTemporaire);// convertir le float en chaine de charactere "XXX" en base 10 (en décimale).
    return bufferTemporaire;
  }
  return String();
}

Je pense qu'il voulait plutôt dire que le code HTML n'avait pas les sections habituelles avec les balises <html> <head> </head> <body></body></html> .

1 Like

Ce n'est pas exactement ce que @J-M-L à indiqué dans son exemple.
Le premier paramétre server.on dans son exemple utilise/définit une URL dfférente pour chaque action.
Tu peux le voir comme le nom de l'action, que doit utiliser ta page HTML, pour indiquer au serveur ce qu'elle veut faire.
on peut voir en commentaire qu'il y a "/off", "/on" et "/"

Je n'ai pas vu le code HTML de ton bouton ?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.