From d5cc1c22573ad761be2d94471f4b5140c1bcac81 Mon Sep 17 00:00:00 2001 From: scayac Date: Sun, 18 Jan 2026 16:35:46 +0100 Subject: [PATCH] Correction bug mode soleil --- platformio.ini | 8 ++++---- src/main.cpp | 11 +++++++---- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/platformio.ini b/platformio.ini index 9389c6b..b639ea5 100644 --- a/platformio.ini +++ b/platformio.ini @@ -30,7 +30,7 @@ build_flags = -DARDUINO_USB_CDC_ON_BOOT=1 -DBOARD_HAS_PSRAM ; Configuration ArduinoOTA pour firmware et filesystem -;upload_protocol = espota -;upload_port = 192.168.0.29 -;upload_flags = -; --auth=password \ No newline at end of file +upload_protocol = espota +upload_port = 192.168.0.29 +upload_flags = + --auth=password \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 38144bf..567c583 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -85,6 +85,7 @@ volatile bool pwmNeedRecalc = true; // Flag pour indiquer qu'il faut recalculer TaskHandle_t enphaseTaskHandle = NULL; unsigned long lastEnphaseUpdate = 0; bool enphaseUpdateRequested = false; +bool enphaseDataUpdated = false; // Flag pour indiquer que les données Enphase viennent d'être mises à jour #ifdef ESP32 hw_timer_t *timer = NULL; @@ -470,6 +471,7 @@ void fetchEnphaseData() { Serial.printf("Enphase - Total: %.1fW, Panneaux: %.1fW, Enedis: %.1fW\n", powerNetConsumption, solarProduction, powerImport); enphaseConnectionError = false; + enphaseDataUpdated = true; // Signaler que les données viennent d'être mises à jour } else { Serial.println("Erreur parsing JSON Enphase"); enphaseConnectionError = true; @@ -526,7 +528,7 @@ void calculateHeaterPower() { // Calculer l'excédent solaire et ajuster le pourcentage de chauffe int calculatedHeaterPowerJour = 0; - int calculatedHeaterPowerSoleil = 0; + static int calculatedHeaterPowerSoleil = 0; int calculatedHeaterPower = heaterPower; // Extraire les bits du mode @@ -600,16 +602,17 @@ void calculateHeaterPower() { } } - if (modeSOLEIL) { + if (modeSOLEIL && enphaseDataUpdated) { - // Mode SOLEIL: ajuster selon l'excédent solaire + // Mode SOLEIL: ajuster selon l'excédent solaire (uniquement quand les données Enphase sont mises à jour) if (powerImport <= 0) { // Convertir l'excédent solaire en pourcentage (max = puissance max du chauffe-eau) - calculatedHeaterPowerSoleil = (int)(((abs(powerImport)) * 100) / heaterMaxPower); + calculatedHeaterPowerSoleil = calculatedHeaterPowerSoleil - (int)((powerImport * 100) / heaterMaxPower); if (calculatedHeaterPowerSoleil > 100) calculatedHeaterPowerSoleil = 100; } else { calculatedHeaterPowerSoleil = 0; } + enphaseDataUpdated = false; // Consommer le flag de mise à jour } // Prendre le maximum entre les deux modes calculatedHeaterPower = max(calculatedHeaterPowerJour, calculatedHeaterPowerSoleil);