Messages : 30
Sujets : 11
Inscription : Sep 2024
Réputation :
1
(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.
Messages : 49
Sujets : 3
Inscription : Nov 2024
Réputation :
3
03-06-2025, 03:24 PM
(Modification du message : 03-06-2025, 04:14 PM par cdlnd.)
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.....
Messages : 208
Sujets : 14
Inscription : Jun 2024
Réputation :
8
03-06-2025, 06:57 PM
(Modification du message : 03-06-2025, 06:59 PM par lucky.)
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
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
Messages : 30
Sujets : 11
Inscription : Sep 2024
Réputation :
1
04-06-2025, 09:31 AM
(Modification du message : 04-06-2025, 01:58 PM par laroussette.)
(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
Messages : 30
Sujets : 11
Inscription : Sep 2024
Réputation :
1
(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
|