Skip to content

Commit c2aab42

Browse files
author
xlyric
committed
correction bug minuteur sur 2 jours
1 parent a392a94 commit c2aab42

File tree

2 files changed

+37
-24
lines changed

2 files changed

+37
-24
lines changed

src/config/config.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ constexpr size_t NTP_UPDATE_INTERVAL_MS = 3600000; /// synch de l'heure toute le
154154
// #define ARDUINO_RUNNING_CORE 1
155155
#endif
156156

157-
#define RELEASE "Version 20251024"
157+
#define RELEASE "Version 20260125"
158158
constexpr const int FS_RELEASE = 20251024;
159159
constexpr const char* FS_UPDATE = "<br>!! FS pas à jour !!"; /// paramettre FS pas à jour
160160

src/functions/minuteur.h

Lines changed: 36 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -140,48 +140,54 @@ struct Programme {
140140

141141
public:bool start_progr() {
142142
struct tm timeinfo;
143-
int heures;
144-
int minutes;
145-
sscanf(heure_demarrage, "%d:%d", &heures, &minutes);
146-
int heures_fin;
147-
int minutes_fin;
143+
memset(&timeinfo, 0, sizeof(timeinfo));
144+
145+
if (!getLocalTime(&timeinfo)) {
146+
Serial.println("Échec récupération heure NTP");
147+
return false;
148+
}
149+
150+
int heures_debut, minutes_debut;
151+
int heures_fin, minutes_fin;
152+
sscanf(heure_demarrage, "%d:%d", &heures_debut, &minutes_debut);
148153
sscanf(heure_arret, "%d:%d", &heures_fin, &minutes_fin);
149154

150155
// si heure_demarrage == heure_arret alors on retourne false
151156
if (strcmp(heure_demarrage, heure_arret) == 0) {
152157
return false;
153158
}
154159

155-
// quand c'est l'heure de démarrer le programme
156-
///vérification que le ntp est synchronisé
157-
if(getLocalTime( &timeinfo )) {
158-
if ( heures == timeinfo.tm_hour && minutes == timeinfo.tm_min && temperature > gDisplayValues.temperature ) {
159-
// demarrage du cooler
160+
// Conversion en minutes depuis minuit pour faciliter les comparaisons
161+
int now_minutes = timeinfo.tm_hour * 60 + timeinfo.tm_min;
162+
int debut_minutes = heures_debut * 60 + minutes_debut;
163+
int fin_minutes = heures_fin * 60 + minutes_fin;
164+
165+
// Démarrage exact à l'heure programmée
166+
if (heures_debut == timeinfo.tm_hour && minutes_debut == timeinfo.tm_min &&
167+
temperature > gDisplayValues.temperature) {
160168
commande_run();
161169
return true;
162-
}
163170
}
164171

165172
// remise en route en cas de reboot et si l'heure est dépassée
166173
// recherche si l'heure est passée
167-
bool heure_passee = false;
168-
if (timeinfo.tm_hour > heures || (timeinfo.tm_hour == heures && timeinfo.tm_min > minutes )) {
169-
heure_passee = true;
170-
}
171-
172-
// recherche si l'heure d'arret est est passée
173-
bool heure_arret_passee = false;
174-
if (timeinfo.tm_hour > heures_fin || (timeinfo.tm_hour == heures_fin && timeinfo.tm_min >= minutes_fin )) {
175-
heure_arret_passee = true;
174+
bool dans_plage = false;
175+
if (fin_minutes > debut_minutes) {
176+
// Plage normale (ex: 08:00 -> 18:00)
177+
dans_plage = (now_minutes > debut_minutes && now_minutes < fin_minutes);
178+
} else {
179+
// Plage qui traverse minuit (ex: 22:00 -> 02:00)
180+
// On est dans la plage si on est après le début OU avant la fin
181+
dans_plage = (now_minutes > debut_minutes || now_minutes < fin_minutes);
176182
}
177183

178-
// remise en route en cas de reboot et si l'heure est dépassée
179-
if (heure_passee && !heure_arret_passee && temperature > gDisplayValues.temperature ) {
184+
// Remise en route en cas de reboot si on est dans la plage horaire
185+
if (dans_plage && temperature > gDisplayValues.temperature) {
180186
commande_run();
181187
return true;
182188
}
183189

184-
// protection fuite mémoire
190+
// Protection fuite mémoire
185191
if (temperature > 500) {
186192
savelogs("-- reboot problème de fuite memoire -- ");
187193
ESP.restart();
@@ -193,6 +199,13 @@ struct Programme {
193199
/// @return
194200
public:bool stop_progr() {
195201
struct tm timeinfo;
202+
memset(&timeinfo, 0, sizeof(timeinfo));
203+
204+
if (!getLocalTime(&timeinfo)) {
205+
Serial.println("Échec récupération heure NTP");
206+
return false;
207+
}
208+
196209
int heures ;
197210
int minutes;
198211
/// sécurité temp

0 commit comments

Comments
 (0)