|
|
|
|
@ -85,6 +85,7 @@ volatile bool pwmNeedRecalc = true; // Flag pour indiquer qu'il faut recalculer
@@ -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() {
@@ -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() {
@@ -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() {
@@ -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); |
|
|
|
|
|