Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Routeur esp32 avec horloge temps réel
#1
Bonsoir,
bravo pour cet esp32 avec ses différentes évolutions, j'avoue que la V12 est une nette amélioration.
J'ai la solution avec connexion avec le linky après avoir fait le test avec le envoy...Le linky est suffisament rapide et surtout plus précis car il correspond vraiment à ce qui est renvoyé au réseau
Régulièrement avec des problèmes de fibre je n'ai plus d'internet et par conséquence l'esp32 ne peux plus travailler...Avez vous envisagé d'utiliser une horloge internet pour éviter ça ou ajouter une horloge temps réel type  module RTC DS1307  ?
De plus auriez vous une solution pour piloter un relais juste quelques secondes (moins de 1minute) à partir des actions, le temps que j'arrive à régler mini est 1 mini au niveau des actions.

Merci
Répondre
#2
Dans meme ordre d idées etre en autonomie complète avec un esp32 en access point pour se passer aussi de la box sur lequel on connecterai un ds3231 ( moins de 2 euros chez Ali) pour garder une heure précise.
https://www.analog.com/media/en/technica...DS3231.pdf
Répondre
#3
Actuellement je conduit des essais avec l'horloge interne de l'ESP32. Après 10 jours de fonctionnement, je n'ai que quelques secondes d'écart par rapport à l'horloge internet. Je pense m'orienter vers un choix dans les paramètres entre l'horloge Internet et interne.
Cdlt
André
Répondre
#4
Bonjour André,

Serait-il possible de rendre les serveurs ntp du routeur paramétrables ? (pour utiliser un serveur local plutôt qu’internet)

Sinon félicitations pour ce projet. Entre les fonctionnalités du routeur, la documentation et la vulgarisation, c’est vraiment top !

Merci :-)
Répondre
#5
Utiliser l horloge interne c est chaud la derive n ´est pas constante. J imagine que tu as imaginé t en servir qu en cas de perte du wifi pour prendre le relais en attendant le retour de la connexion.

@ Chris
Tu as un serveur NTP local chez toi ? Dans quoi est il hébergé et sur quoi est il synchronisé ? Je ne connais pas beaucoup de particuliers qui possèdent une antenne GPS.
Répondre
#6
(06-11-2024, 04:51 AM)F1ATB a écrit : Actuellement je conduit des essais avec l'horloge interne de l'ESP32. Après 10 jours de fonctionnement, je n'ai que quelques secondes d'écart par rapport à l'horloge internet. Je pense m'orienter vers un choix dans les paramètres entre l'horloge Internet et interne.
Cdlt
André

Salut
ça c'est une super bonne nlle... j'attend cette version pour ma belle mêre qui n'a pas de réseau wifi ni internet.
MERCI

ps: cela peut aussi permettre d'espacer les appels à l'horloge internet (peut ètre qu'un appel par jour suffirait).
Répondre
#7
(06-11-2024, 08:31 AM)Lolo69 a écrit : @ Chris
Tu as un serveur NTP local chez toi ? Dans quoi est il hébergé et sur quoi est il synchronisé ? Je ne connais pas beaucoup de particuliers qui possèdent une antenne GPS.

Il est hébergé sur une VM Debian et est synchronisé avec internet. Ça répond à mon besoin.
J'ai subi un internet chaotique pendant 1 mois et demi à cause d'un problème matériel sur la box et ça a été quasi transparent sur la domotique. Seuls les prévisions météo et l'assistant vocal (qui s'appuyait sur les api Google) étaient non fonctionnels.
Répondre
#8

Ouai c est cool de faire tourner une VM 24/24 pour avoir l heure.
Ca serait sûrement plus ecolo de mettre un module rtc (2 Euros) sur un esp32 et transformer cet ESP en serveur NTP en point d accès wifi
Niveau consommation, autonomie et stabilité c est plus performant non ? En plus d’internet tu peux meme couper la box et garder la connexion wifi des appareils domotique : joli petit projet de geek ca non ?
Code :
Voici un code modifié qui :

    1.    Se connecte temporairement à Internet au démarrage.
    2.    Récupère l’heure depuis un serveur NTP.
    3.    Synchronise le module RTC avec cette heure.
    4.    Configure ensuite l’ESP en point d’accès et commence à fonctionner comme serveur NTP local en utilisant le RTC pour garder l’heure.

Code Exemple pour Synchronisation Initiale via Internet

#include <WiFi.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
#include <RTClib.h>  // Bibliothèque pour le module RTC DS3231

// Informations du réseau pour la connexion temporaire
const char *ssidInternet = "Votre_SSID";
const char *passwordInternet = "Votre_MotDePasse";

// Informations pour le mode point d'accès local
const char *ssidAP = "ESP_NTP_Server";
const char *passwordAP = "password123";

// Déclaration des objets
WiFiUDP udp;
const int NTP_PORT = 123;  // Port UDP pour NTP
RTC_DS3231 rtc;            // Initialisation du module RTC

void setup() {
  Serial.begin(115200);

  // 1. Connexion temporaire au Wi-Fi pour obtenir l'heure NTP depuis Internet
  connectToInternet();

  // 2. Synchroniser l'heure avec un serveur NTP public et mettre à jour le RTC
  syncTimeWithNTP();

  // 3. Passer en mode Point d'Accès (AP) pour le serveur NTP local
  startAccessPoint();

  // 4. Initialiser l'UDP pour écouter les requêtes NTP
  udp.begin(NTP_PORT);
  Serial.println("Serveur NTP prêt à écouter les requêtes");
}

void loop() {
  // Écouter les requêtes NTP
  int packetSize = udp.parsePacket();
  if (packetSize) {
    byte packetBuffer[48];
    udp.read(packetBuffer, 48);

    // Initialiser la réponse NTP
    packetBuffer[0] = 0b00100100;  // LI, Version, Mode
    packetBuffer[1] = 1;           // Stratum, or type of clock
    packetBuffer[2] = 0;           // Polling Interval
    packetBuffer[3] = 0xEC;        // Precision

    // Obtenir l'heure actuelle à partir du module RTC
    DateTime now = rtc.now();
    unsigned long epochTime = now.unixtime() + 2208988800UL; // Temps en secondes depuis 1900

    // Ajouter l'heure dans le paquet NTP
    packetBuffer[40] = epochTime >> 24;
    packetBuffer[41] = epochTime >> 16;
    packetBuffer[42] = epochTime >> 8;
    packetBuffer[43] = epochTime;

    // Envoyer la réponse
    udp.beginPacket(udp.remoteIP(), udp.remotePort());
    udp.write(packetBuffer, 48);
    udp.endPacket();
    Serial.println("Requête NTP traitée et réponse envoyée");
  }

  delay(1000);
}

void connectToInternet() {
  // Se connecter au Wi-Fi pour obtenir l'heure NTP depuis Internet
  WiFi.begin(ssidInternet, passwordInternet);
  Serial.print("Connexion au Wi-Fi...");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nConnecté à Internet pour la synchronisation initiale");
}

void syncTimeWithNTP() {
  // Initialiser le client NTP pour obtenir l'heure depuis Internet
  WiFiUDP ntpUDP;
  NTPClient timeClient(ntpUDP, "pool.ntp.org");
  timeClient.begin();

  // Attendre la synchronisation avec le serveur NTP
  while(!timeClient.update()) {
    timeClient.forceUpdate();
    delay(500);
  }

  // Récupérer l'heure NTP et mettre à jour le RTC
  rtc.adjust(DateTime(timeClient.getEpochTime()));
  Serial.println("RTC synchronisé avec l'heure NTP");

  // Déconnexion du Wi-Fi après la mise à jour
  WiFi.disconnect();
}

void startAccessPoint() {
  // Configurer l'ESP en mode Point d'Accès pour le serveur NTP local
  WiFi.softAP(ssidAP, passwordAP);
  IPAddress IP = WiFi.softAPIP();
  Serial.print("Point d'accès IP: ");
  Serial.println(IP);
}

Explications du Code

    1.    Connexion à Internet pour la synchronisation initiale :
    •    La fonction connectToInternet() connecte l’ESP au Wi-Fi pour accéder au serveur NTP.
    2.    Synchronisation avec le serveur NTP public :
    •    syncTimeWithNTP() utilise un client NTP pour obtenir l’heure précise d’un serveur NTP en ligne (comme pool.ntp.org).
    •    L’heure est ensuite mise à jour dans le module RTC avec rtc.adjust(DateTime(timeClient.getEpochTime()));.
    3.    Passage en mode Point d’Accès pour le serveur NTP local :
    •    La fonction startAccessPoint() configure l’ESP en tant que point d’accès Wi-Fi, auquel les clients peuvent se connecter.
    4.    Serveur NTP :
    •    Dans la boucle loop(), le serveur NTP répond aux requêtes des clients en utilisant l’heure stockée dans le module RTC.

Conclusion

Ce code initialise l’heure de l’ESP et du module RTC en utilisant Internet, puis l’ESP passe en mode point d’accès et fonctionne comme serveur NTP local. Le RTC conserve l’heure précise et permet au serveur NTP de répondre aux clients même si l’ESP redémarre ou s’il n’a plus accès à Internet.
Répondre
#9
Je n'ai jamais dit que la VM ne servait qu'à ça :-) Elle héberge aussi un serveur dhcp, dns, etc...
Le wifi est assuré par un routeur sous dd-wrt.
Le tout est secouru par un onduleur.
Enfin bref, on peut changer de fournisseur internet quand on veut, ça n'a pas d'impact sur la production.

En ce qui concerne le point d'accès par un esp32, je doute quand même des performances.
Répondre
#10
(06-11-2024, 04:51 AM)F1ATB a écrit : Actuellement je conduit des essais avec l'horloge interne de l'ESP32. Après 10 jours de fonctionnement, je n'ai que quelques secondes d'écart par rapport à l'horloge internet. Je pense m'orienter vers un choix dans les paramètres entre l'horloge Internet et interne.
Cdlt
André

Bonjour André,

Excellente idée, mon beau-frère n'aura jamais internet, 
alors que je suis certain que le routeur lui sera très utile (quand il aura acheté des panneaux ;-))

Par ailleurs, s'il s'agit d'une option dans les paramètres, en cas de défaillance constatée d'internet,
passer sur l'horloge ESP permettrait de poursuivre le routage.

Bravi !!
Crdlmnt
840 Wc (Versailles solar/ Hoymiles) face à l'Est dans le Dept 06, Routeur split 2 ESP uPesy en v12.06: UxIx2 (entrée et cumulus) / Triac 40A et sonde T°.  
Répondre


Atteindre :


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