Hier, 09:55 AM
(03-06-2025, 06:57 PM)lucky a écrit : a test
version time zone v14.23 avec dashboad
https://mega.nz/file/MZ4RSYZT#iWzLUstmfL...4EfPBNmMHY
timezone juste si heure internet
Code :RÉCAPITULATIF DES MODIFICATIONS POUR LE TIMEZONE
1. Fichier Stockage.ino
A. Ajouter la constante (au début avec les autres constantes) :
cppconst int adr_TimeZone = 3400; // AJOUT: Adresse pour le timezone (après Dashboard)
B. Modifier la fonction JourHeureChange() :
cppif (Horloge == 0) { //Heure Internet
//Time Update / de l'heure
time_t timestamp = time(NULL);
struct tm *pTime = localtime(×tamp);
// D'abord récupérer les composants de l'heure
strftime(buffer, MAX_SIZE_T, "%H", pTime);
int16_t hour = atoi(buffer);
strftime(buffer, MAX_SIZE_T, "%M", pTime);
int16_t minute = atoi(buffer);
strftime(buffer, MAX_SIZE_T, "%S", pTime);
int16_t second = atoi(buffer);
// Application du décalage horaire
hour = hour + TimeZoneOffset;
while (hour < 0) hour += 24;
while (hour >= 24) hour -= 24;
// Mettre à jour les variables internes
Int_Heure = hour;
Int_Minute = minute;
Int_Seconde = second;
// Reconstruire DATE avec l'heure modifiée
strftime(buffer, MAX_SIZE_T, "%d/%m/%Y", pTime);
char timeStr[20];
sprintf(timeStr, " %02d:%02d:%02d", hour, minute, second);
DATE = String(buffer) + String(timeStr);
}
C. Ajouter ces deux fonctions (à la fin du fichier avant ImportParametres) :
cpp// AJOUT: Fonctions pour le TimeZone
void SaveTimeZone() {
byte valeurAEcrire = (byte)(TimeZoneOffset + 12); // Convertir -12 à +12 en 0 à 24
Serial.println("Sauvegarde TimeZone: " + String(TimeZoneOffset) + " -> valeur EEPROM: " + String(valeurAEcrire));
EEPROM.writeByte(adr_TimeZone, valeurAEcrire);
EEPROM.commit();
Serial.println("TimeZone sauvegardé avec succès");
}
void LoadTimeZone() {
byte tz = EEPROM.readByte(adr_TimeZone);
Serial.println("Valeur lue EEPROM TimeZone: " + String(tz));
// Vérifier si c'est une valeur non initialisée (0xFF = 255) ou invalide
if (tz >= 0 && tz <= 24) { // Valeur valide entre 0 et 24
TimeZoneOffset = (int8_t)(tz - 12);
} else {
// Première fois ou valeur invalide
Serial.println("TimeZone invalide, initialisation à UTC+1");
TimeZoneOffset = 1; // Par défaut UTC+1 pour Paris
SaveTimeZone(); // Sauvegarder la valeur par défaut
}
Serial.println("TimeZone chargé: UTC" + String(TimeZoneOffset > 0 ? "+" : "") + String(TimeZoneOffset));
}
2. Fichier Solar_Router_V14_23.ino
A. Ajouter la variable globale (vers ligne 290 avec les autres variables de temps) :
cppint8_t TimeZoneOffset = 1; // AJOUT: Décalage horaire UTC+1 par défaut
B. Dans setup(), modifier la configuration NTP :
cppif (Horloge == 0) { //heure par Internet
sntp_set_sync_interval(10800000);
sntp_set_time_sync_notification_cb(time_sync_notification);
esp_sntp_servermode_dhcp(true);
configTzTime("UTC", ntpServer1, ntpServer2); // MODIFIÉ: Toujours récupérer l'heure UTC
}
C. Dans setup(), après INIT_EEPROM(); :
cppINIT_EEPROM();
LoadTimeZone(); // AJOUT: Charger le timezone
3. Fichier Server.ino
A. Dans Init_Server(), ajouter ces routes :
cppserver.on("/TimeZoneUpdate", handleTimeZoneUpdate);
server.on("/GetTimeZone", handleGetTimeZone);
B. Ajouter ces fonctions (avant la dernière accolade du fichier) :
cpp// AJOUT: Handlers pour le timezone
void handleTimeZoneUpdate() {
Serial.println("handleTimeZoneUpdate appelé");
if (server.hasArg("tz")) {
int8_t newTZ = server.arg("tz").toInt();
Serial.println("Nouvelle valeur TZ reçue: " + String(newTZ));
if (newTZ >= -12 && newTZ <= 12) {
TimeZoneOffset = newTZ;
SaveTimeZone(); // Sauvegarder dans l'EEPROM
server.send(200, "text/plain", "OK");
Serial.println("TimeZone mis à jour avec succès");
return;
}
}
Serial.println("Erreur dans handleTimeZoneUpdate");
server.send(400, "text/plain", "Erreur");
}
void handleGetTimeZone() {
server.send(200, "text/plain", String(TimeZoneOffset));
}
4. Fichier pageHtmlPara.h
A. Ajouter le HTML du sélecteur (après </div> de la zone Horloge) :
html <div class='ligne' id='ligneTimeZone'>
<label for='TimeZone'>Fuseau horaire : </label>
<select name='TimeZone' id='TimeZone' onchange='SaveTimeZone()'>
<option value='-12'>UTC-12</option>
<option value='-11'>UTC-11</option>
<option value='-10'>UTC-10</option>
<option value='-9'>UTC-9</option>
<option value='-8'>UTC-8</option>
<option value='-7'>UTC-7</option>
<option value='-6'>UTC-6</option>
<option value='-5'>UTC-5</option>
<option value='-4'>UTC-4</option>
<option value='-3'>UTC-3</option>
<option value='-2'>UTC-2</option>
<option value='-1'>UTC-1</option>
<option value='0'>UTC</option>
<option value='1'>UTC+1</option>
<option value='2'>UTC+2</option>
<option value='3'>UTC+3</option>
<option value='4'>UTC+4</option>
<option value='5'>UTC+5</option>
<option value='6'>UTC+6</option>
<option value='7'>UTC+7</option>
<option value='8'>UTC+8</option>
<option value='9'>UTC+9</option>
<option value='10'>UTC+10</option>
<option value='11'>UTC+11</option>
<option value='12'>UTC+12</option>
</select>
</div>
B. Dans la fonction checkDisabled(), ajouter :
javascriptGID("ligneTimeZone").style.display = (Horloge==0) ? "table-row" : "none"; // AJOUT
C. Dans la fonction LoadParametres(), après checkDisabled(); :
javascript// AJOUT: Charger le timezone actuel
var xhttp2 = new XMLHttpRequest();
xhttp2.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
GID("TimeZone").value = this.responseText;
}
};
xhttp2.open('GET', 'GetTimeZone', true);
xhttp2.send();
D. Ajouter la fonction SaveTimeZone() avant la fin du script :
javascript// AJOUT: Fonction pour sauvegarder le timezone
function SaveTimeZone() {
var tz = GID("TimeZone").value;
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
console.log("TimeZone sauvegardé: " + tz);
}
};
xhttp.open('GET', 'TimeZoneUpdate?tz=' + tz, true);
xhttp.send();
}
C'est tout ! Ces modifications permettent :
De sélectionner un fuseau horaire de UTC-12 à UTC+12
De sauvegarder le choix dans l'EEPROM (adresse 3400)
De persister après redémarrage
D'afficher uniquement quand l'horloge est sur Internet
Bonjour Lucky, il fonctionne très bien et le Dashboard est pratique. Merci