From 367baf5f9a31a2923f9236385d1cf9f73116f589 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Gauthier?= Date: Mon, 13 Jun 2022 16:55:18 +0200 Subject: [PATCH] try test ntp fix --- include/main.h | 2 +- src/main.cpp | 122 +++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 108 insertions(+), 16 deletions(-) diff --git a/include/main.h b/include/main.h index 8b0f590..2345d36 100644 --- a/include/main.h +++ b/include/main.h @@ -23,7 +23,7 @@ #define SENSORS_NUMBER 5 #define DHT22 22 //comment for the test part this is the good frequency -#define TIME_TO_SLEEP 598 +#define TIME_TO_SLEEP 596 //#define TIME_TO_SLEEP 28 #define US_TO_S_FACTOR 1000000 #define R2 100 diff --git a/src/main.cpp b/src/main.cpp index 3c263a9..ad3ceb1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,7 +1,7 @@ #include "main.h" #include "NTPClient.h" -//#include "Effortless_SPIFFS.h" //#include "driver/" + #include #include #include @@ -9,6 +9,7 @@ #include #define STORAGE_NAMESPACE "storage" +#define _OPEN_SYS_ITOA_EXT #define RESTART 1 #define REFRESHMEMBOOT 0 #define RESTARTTIMES 2 @@ -34,7 +35,8 @@ WiFiUDP NtpUDP; * * @param 7200: jet lag europe time from France (2 * 3600 sec) */ -NTPClient TimeClient(NtpUDP, "europe.pool.ntp.org", 7200, 60000); +NTPClient TimeClient(NtpUDP, "europe.pool.ntp.org" , 7200 , 60000); +//NTPClient TimeClient(NtpUDP, "pool.ntp.org"); //-------------------- CONDITION --------------------// @@ -72,9 +74,38 @@ bool testTime (int hours, int minutes, bool restart){ } } } + // Not needed but carefully habits return false; } +// bool testTime (int hours, int minutes, bool restart){ +// // debug parts +// // Serial.println('\n'); +// // Serial.println((REFRESHTIMES * TIME_TO_SLEEP) / 3600,DEC); +// // Serial.println(((REFRESHTIMES * TIME_TO_SLEEP) % 3600) / 60,DEC); +// // Serial.println('\n'); + +// if (restart){ // restart parts +// if( hours >= 12 && minutes >= 0 ) return true; +// else{ +// if((hours < 12) /*&& (minutes <= ((RESTARTTIMES * TIME_TO_SLEEP) % 3600) / 60) */)return true; +// return false; +// } +// } else { // refresh parts +// if(hours >= 12){ +// if(hours <= 14 && minutes > 20 )return true; +// else{ +// if((hours = (REFRESHTIMES * TIME_TO_SLEEP) / 3600) && (minutes <= ((REFRESHTIMES * TIME_TO_SLEEP) % 3600) / 60))return true; +// else{ +// return false; +// } +// } +// } +// } +// // Not needed but carefully habits +// return false; +// } + //-------------------- FONCTIONS --------------------// //-------------- Connexion MQTT --------------// @@ -171,7 +202,11 @@ std::tuple getDate() synctime.tv_sec = rawtime; synctime.tv_usec = 0; if(settimeofday(&synctime,NULL) != 0) std::cout << "error\n" ; - setenv("TZ", "CEST+2", 1); + //setenv("TZ", "CEST+2", 1); + //tzset(); + + // set timezone to France + setenv("TZ", "CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00", 2); // set at 2 or 3 (Third parameter) tzset(); struct tm *ti; @@ -184,8 +219,15 @@ std::tuple getDate() // Function that gets current epoch time unsigned long getTime() { - time_t now; + time_t now = TimeClient.getEpochTime();; + struct timeval synctime; struct tm timeinfo; + + synctime.tv_sec = now; + synctime.tv_usec = 0; + if(settimeofday(&synctime,NULL) != 0) std::cout << "error\n" ; + TimeClient.forceUpdate(); + vTaskDelay(1000); if (!getLocalTime(&timeinfo)) { Serial.println("Failed to obtain time"); return(0); @@ -296,18 +338,19 @@ bool TestBoot(bool resOrRfsh) if (err != ESP_OK) return err; // Close nvs_close(my_handle); - Serial.println("not restart"); + Serial.println("Flag restart = 0 (not restarted)"); return true; } else { // Close nvs_close(my_handle); - Serial.println("already restart"); + Serial.println("Flag restart = 1 (already restart)"); return false; } /* Not needed but finish properly the function */ // Close + Serial.println("Maybe issue: last return"); nvs_close(my_handle); return false; } @@ -318,16 +361,18 @@ bool TestBoot(bool resOrRfsh) void setup() { Serial.begin(9600); - + Serial.println("-----------------Start---------------------"); + setupWIFI(SSID, PWD); setupMQTT(MQTT_ADDRESS, MQTT_PORT); initSensors(sensors, SENSORS_NUMBER); TimeClient.begin(); - TimeClient.forceUpdate(); - int rawtime = (TimeClient.getEpochTime()) % 86400; // 86400 = 60sec*60minutes*24heures + //int rawtime = (TimeClient.getEpochTime()) % 86400; // 86400 = 60sec*60minutes*24heures + unsigned long rawtime = getTime(); + int hours = rawtime / 3600, minutes = (rawtime % 3600) / 60 , secondes = rawtime % 60; if (nvs_flash_init() != ESP_OK){ @@ -337,12 +382,14 @@ void setup() * @brief restart the ESP if there is the time restart * */ - if(TestBoot(RESTART) && testTime(hours, minutes, RESTART)){ + if(testTime(hours, minutes, RESTART) && TestBoot(RESTART)){ + Serial.println("-----------------RESSSSTTTAAAART---------------------"); ESP.restart(); + delay(1000); } else if(testTime(hours, minutes, REFRESHMEMBOOT)){ TestBoot(REFRESHMEMBOOT); } - /* ######### test time part ######### */ + /* ######### test time part ######### Serial.println('\n'); Serial.println(hours,DEC); Serial.println(':'); @@ -350,7 +397,7 @@ void setup() Serial.println(':'); Serial.println(secondes,DEC); Serial.println('\n'); - + */ } @@ -361,9 +408,11 @@ void loop() { int year, month, day; int lenght; + unsigned long now; char time[30]; char date[30]; char msg[70]; + bool horoIssue = false; MqttClient.loop(); if (!MqttClient.connected()) @@ -377,13 +426,56 @@ void loop() TimeClient.update(); TimeClient.getFormattedTime().toCharArray(time, 30); - tie(year, month, day) = getDate(); - lenght = sprintf(date, "%d-%d-%d ", year, month, day); + + //tie(year, month, day) = getDate(); + /* debug print*/ + // Serial.println('\n'); + // Serial.println(year,DEC); + // Serial.println(':'); + // Serial.println(month,DEC); + // Serial.println(':'); + // Serial.println(day,DEC); + // Serial.println('\n'); + + + now = getTime(); + //TimeClient.update(); + //Serial.println(TimeClient.getFormattedTime()); + + //Solution to the issue generated by the Ntpclient for the horodatage midnight at two o'clock + // if (time[0] == '0' && (time[1] == '0' || time[1] == '1')){ + // if (day == 31){ + // if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){ + // day = 1; + // month++; + // if(month == 13){ + // month == 1; + // year++; + // } + // } + // }else if (day == 30){ + // if(month == 4 || month == 6 || month == 9 || month == 11){ + // day = 1; + // month++; + // } + // }else if(day == 29){ + // if(month == 2){ + // day = 1; + // month++; + // } + // }else{ + // day++; + // } + // } + + lenght = sprintf(date,"%s|", ultoa(now, date, 10) /* "|%d-%d-%d ", year, month, day */); sprintf(date + lenght, time); sprintf(date + strlen(date), msg); MqttClient.publish(TOPIC, date); - + + Serial.println("-----------------DeepSleep---------------------"); delay(2000); sleep(); + delay(1000); } \ No newline at end of file