Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
modification timezone EEPROM
#11
(28-05-2025, 12:39 PM)Ltech a écrit :
(28-05-2025, 09:07 AM)laroussette a écrit : Bonjour,
Il ne me reste plus qu'a patienter que cette fonctionnalité arrive un jour sur nos super routeur ?
Merci André

Via  ArduinoIDE

Dans solar_router V14.23

Ligne 790 ....797

Ligne 797 configTzTime: a changer.


  if (Horloge == 0) {  //heure par Internet}
    //Heure / Hour . A Mettre en priorité avant WIFI (exemple ESP32 Simple Time)
    //External timer to obtain the Hour and reset Watt Hour every day at 0h
    sntp_set_sync_interval(10800000);  //Synchro toutes les 3h
    sntp_set_time_sync_notification_cb(time_sync_notification);
    //sntp_servermode_dhcp(1);   Déprecié
    esp_sntp_servermode_dhcp(true);                                                        //Option
    configTzTime("CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00", ntpServer1, ntpServer2);  //Voir Time-Zone:
Bonjour Ltech, oui je sais, c'est la modification que j'ai apportée. Le problème étant qu'à la prochaine MAJ je ne pourrai pas la faire depuis l'OTA car ces paramètres ne sont pas enregistrés dans l'EEPROM.
Répondre
#12
Bonjour,

rien ne t'empêchera de passer par le OTA juste il faudra que tu télécharge la dernière version en zip et que tu la modifie via l'ide et que tu change les lignes par celle De ltech
puis tu compilera ton bin et tu pourra le charger par OTA
6800W pV
un triac sur  résistance cumulus eau sanitaire
2 relais SSR sur 2 résistances pour cumulus chauffage
et 1 relais  SSR sur radiateur en on/off
4 DS18b20 plus 4 thermistances
2 JSY-MK-194 soit 4 ampèremètre
8 relais  sur 74hc595 contrôle, chaudière, planché, vanne, circulateur.....
Répondre
#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
#14
(03-06-2025, 03:24 PM)cdlnd a écrit : Bonjour,

rien ne t'empêchera de passer par le OTA juste il faudra que tu télécharge la dernière version en zip et que tu la modifie via l'ide et que tu change les lignes par celle De ltech
puis tu compilera ton bin et tu pourra le charger par OTA

Merci pour ton retour. Je ne connaissais pas cette solution
Répondre
#15
(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(&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

Bonjour Lucky, il fonctionne très bien et le Dashboard est pratique. Merci
Répondre


Atteindre :


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