Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
modification timezone EEPROM
#13
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(&timestamp);
   
    // 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
ESP32Wroom, Triac 40A "BTA40", Source UxIx2, Cumulus 300L 3000W.
Sonde temperature sur radiateur triac mise en route ventilateur a 25°
réactivité 30 seuil -50
2 esp32 pour gestion charge batteries
14 panneaux de 410wcc en autoconso micro-onduleur APS DS3
Suivi sur Domoticz
Répondre


Messages dans ce sujet
modification timezone EEPROM - par laroussette - 21-05-2025, 01:45 PM
RE: modification timezone EEPROM - par Lolo69 - 21-05-2025, 01:55 PM
RE: modification timezone EEPROM - par F1ATB - 21-05-2025, 06:45 PM
RE: modification timezone EEPROM - par grostoto - 21-05-2025, 09:42 PM
RE: modification timezone EEPROM - par laroussette - 22-05-2025, 04:58 AM
RE: modification timezone EEPROM - par Lolo69 - 22-05-2025, 07:01 AM
RE: modification timezone EEPROM - par grostoto - 22-05-2025, 12:36 PM
RE: modification timezone EEPROM - par laroussette - 22-05-2025, 01:43 PM
RE: modification timezone EEPROM - par laroussette - 28-05-2025, 09:07 AM
RE: modification timezone EEPROM - par Ltech - 28-05-2025, 12:39 PM
RE: modification timezone EEPROM - par laroussette - 03-06-2025, 07:11 AM
RE: modification timezone EEPROM - par cdlnd - 03-06-2025, 03:24 PM
RE: modification timezone EEPROM - par lucky - 03-06-2025, 06:57 PM

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)