#define NBMESSAGE 10
String MessageH[NBMESSAGE];
String DATE;
int idxMessage = 0;
bool HeureValide = true;
void StockMessage(String m) {
if (String(DATE + " : " + m) == MessageH[idxMessage == 0 ? NBMESSAGE - 1 : idxMessage - 1]) return; //++ on evite les messages en double (même date, même heure, même message)
int8_t substitution = -1;
String replacement = "";
if (m.indexOf("TEMPO") >= 0) { // on ne repere pas les lignes 'couleur tempo' pour la même période
for (int i = 0; i < NBMESSAGE; i++) { // scan la liste des messages pour trouver le texte qui commence avec la même date et fini par demain ?
if (MessageH[i].startsWith(DATE.substring(0, 10)) && MessageH[i].indexOf("TEMPO") >= 0) { // même date du jour, le message dans la liste est Tempo depuis 6h00 : ....demain ?
replacement = DATE + " : " + m; // substitue avec un info plus fraîche
substitution = i;
}
}
} else {
// quand on a le même message a un horaire different, on fait une ligne JJ/MM/AAAA HH:MM:SS HH:MM+HH:MM : le message
for (int i = 0; i < NBMESSAGE; i++) { // scan la liste des messages pour trouver le texte
if (MessageH[i].indexOf(" : " + m) > 0 && MessageH[i].substring(0, 10) == DATE.substring(0, 10)) { // c'est un message qu'on a déja vu ce jour
replacement = DATE;
replacement += " ";
replacement += MessageH[i].substring(11, 16); // juste HH:MM de l'horaire precedent
String anciennesHeures = MessageH[i].substring(20, MessageH[i].indexOf(" : "));
if (anciennesHeures.length() > 4) { // on a déja au moins un HH:MM
replacement += "+";
replacement += anciennesHeures;
}
replacement += " : ";
replacement += m;
substitution = i;
break;
}
}
}
if (HeureValide && DATE != "") m = DATE + " : " + m; //++ si la date n'est pas dispo on ne met pas les :
if (substitution < 0) { // ajoute / remplace le message le plus ancien
MessageH[idxMessage] = m;
idxMessage = (idxMessage + 1) % NBMESSAGE;
} else { //modif message et retabli l'ordre
for (int i = idxMessage; i < (idxMessage + NBMESSAGE); i++) {
if (i > substitution + (idxMessage < substitution ? 0 : NBMESSAGE)) MessageH[(i-1) % NBMESSAGE] = MessageH[i % NBMESSAGE]; // shift message pour eliminer celui a remplacer
}
MessageH[(idxMessage - 1 + NBMESSAGE) % NBMESSAGE] = replacement; // le message de remplacement devient le plus 'jeune'
}
}
void printMessages() {
for (int i = 0; i < NBMESSAGE; i++) {
if (MessageH[i] != "") Serial.printf("%d : %s\n", i, MessageH[i].c_str());
}
Serial.println();
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
DATE = "23/02/2026 12:51:31";StockMessage("Réception heure par NTP");
printMessages();
DATE = "23/02/2026 13:52:41";StockMessage("Réception heure par NTP");
printMessages();
DATE = "23/02/2026 14:53:51";StockMessage("Réception heure par NTP");
printMessages();
DATE = "23/02/2026 15:54:32";StockMessage("Réception heure par NTP");
printMessages();
DATE = "24/02/2026 16:55:42";StockMessage("Réception heure par NTP");
printMessages();
DATE = "24/02/2026 17:56:52";StockMessage("Réception heure par NTP");
printMessages();
DATE = "24/02/2026 18:57:01";StockMessage("Réception heure par NTP");
printMessages();
}
void loop() {
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
}