#define NBMESSAGE 10
String MessageH[NBMESSAGE];
String DATE = "30/12/2025 11:01:02";
uint8_t idxMessage = 0;
bool HeureValide = false;
void PrintScroll(String m) {
//Serial.println(m);
}
void StockMessage(String m) {
int8_t substitution = -1;
String replacement = "";
if (m == "Réception de l'heure par NTP") { // on fait une ligne JJ/MM/AAAA HH:MM HH:MM HH:MM : Récéption de l'heure internet
for (int i = 0; i < NBMESSAGE; i++) { // scan la liste des messages pour trouver le texte
if (MessageH[i].indexOf(" : " + m) > 0) { // c'est le message Réception heure
if (MessageH[i].substring(0, NBMESSAGE) == DATE.substring(0, 10)) { // check si les messages dans l'historique commence par la même date
replacement = DATE + " " + MessageH[i].substring(11, 16); // supprime les secondes de l'horaire precedent
// 56 = lg message contenant déja un second horaire
if (MessageH[i].length() > 56) replacement += "+"; else replacement += " "; // il y a plus qu'un horaire précédent
replacement += MessageH[i].substring(20, MessageH[i].indexOf(" : ") + 3) + m; // garde la partie horodatage sans les secondes pour les événements passés
substitution = i;
break;
}
}
}
} else 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 l'info la plus fraîche
substitution = i;
}
}
} else if (String(DATE + " : " + m) == MessageH[idxMessage == 0 ? NBMESSAGE - 1 : idxMessage - 1]) return; //++ on evite les messages en double (même date, même heure)
if (HeureValide) 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'
}
PrintScroll(m);
}
void echoListMsg() {
Serial.println("v===========================v");
int j = (NBMESSAGE + idxMessage) % NBMESSAGE;
for (int i = j; i < j + NBMESSAGE; i++) {
//Serial.printf("x= %2d, i= %2d, j= %2d msg[%2d] = ", idxMessage, i, j, i % NBMESSAGE);
if (MessageH[i % NBMESSAGE] != "") Serial.println(MessageH[i % NBMESSAGE]);
}
Serial.println("^===========================^\n**");
}
void setup() {
Serial.begin(115200);
Serial.println("Hello, ESP32!");
StockMessage("Start 00");
echoListMsg();
StockMessage("Start 01");
echoListMsg();
StockMessage("Wifi Begin : 194Rue_Neuve");
echoListMsg();
StockMessage("Connecté par WiFi, addresse IP : 192.168.1.71");
echoListMsg();
DATE = "29/12/2025 03:29:56";
HeureValide = true;
StockMessage("Réception de l'heure par NTP");
echoListMsg();
DATE = "28/12/2025 06:12:05";
StockMessage("TEMPO Periode du 28/12 6h au 39/12 6h = ZZZZ | 'Demain' = BLANC");
echoListMsg();
DATE = "29/12/2025 03:30:05";
StockMessage("TEMPO Periode du 29/12 6h au 30/12 6h = ? | 'Demain' = BLANC");
echoListMsg();
DATE = "29/12/2025 04:30:05";
StockMessage("BlaBla1");
echoListMsg();
DATE = "29/12/2025 04:40:05";
StockMessage("BlaBla2");
echoListMsg();
DATE = "29/12/2025 06:00:07";
StockMessage("Tempo depuis 6h00: TEMPO_BLANC,Demain ?");
echoListMsg();
DATE = "29/12/2025 06:03:05";
StockMessage("TEMPO Periode du 29/12 6h au 30/12 6h = BLANC | 'Demain' = ?");
echoListMsg();
DATE = "29/12/2025 06:12:05";
StockMessage("TEMPO Periode du 29/12 6h au 30/12 6h = BLANC | 'Demain' = ROUGE");
echoListMsg();
DATE = "29/12/2025 08:50:05";
StockMessage("BlaBla3");
echoListMsg();
DATE = "29/12/2025 09:55:05";
StockMessage("BlaBla4");
echoListMsg();
DATE = "29/12/2025 13:24:11";
StockMessage("Réception de l'heure par NTP");
echoListMsg();
DATE = "29/12/2025 15:30:05";
StockMessage("BlaBla5");
echoListMsg();
DATE = "29/12/2025 20:46:14";
StockMessage("Réception de l'heure par NTP");
echoListMsg();
DATE = "29/12/2025 22:30:05";
StockMessage("TEMPO Periode du 29/12 6h au 30/12 6h = ROUGE | 'Demain' = BLANC");
echoListMsg();
DATE = "29/12/2025 23:00:05";
StockMessage("TEMPO Periode du 29/12 6h au 30/12 6h = ROUGE | 'Demain' = BLANC");
echoListMsg();
DATE = "29/12/2025 23:47:16";
StockMessage("Réception de l'heure par NTP");
echoListMsg();
DATE = "30/12/2025 02:46:15";
StockMessage("Réception de l'heure par NTP");
echoListMsg();
}
void loop() {
delay(10); // this speeds up the simulation
}