Skip to content

Commit

Permalink
v1.2.0
Browse files Browse the repository at this point in the history
- v1.2.0
	- Оптимізація
	- Оновлений алгоритм DST
	- Добавлене автоматичне оновлення DST, при визові будь-яких функцій пов'язаних з часом (не налаштування)
	- Добавлена повна підтримка UNIX64
	- Добавлені типи даних
		- `unix_t`
		- `year_t`
		- `DSTime`
	- Добавлені нові функції
		- UNIXtime і NTPTime:
			- `addUnix(unix_t unix, uint16_t ms = 0);`
			- `subtractUnix(unix_t unix, uint16_t ms = 0);`
			- `setDSTauto(DSTime *dst);`
			- `delDSTauto();`
			- `DSTauto();`
			- `DST(DSTime & dst);`
			- `DSTstartInGMT(uint8_t month_start, uint8_t week_start, uint8_t dayWeek_start, uint8_t h_start);`
			- `DSTendInGMT(uint8_t month_end, uint8_t week_end, uint8_t dayWeek_end, uint8_t h_end, bool dst_or_wt = 1);`
			- `isRunning();`
		- TimeFunc:
			- `nextDays(unix_t unix, unix_t n);`
			- `nextDay(unix_t unix);`
			- `prevDays(unix_t unix, unix_t n);`
			- `prevDay(unix_t unix);`
  • Loading branch information
DenysChuhlib committed Dec 27, 2022
1 parent 0bbca2f commit 32c3a22
Show file tree
Hide file tree
Showing 7 changed files with 588 additions and 395 deletions.
394 changes: 207 additions & 187 deletions README.md

Large diffs are not rendered by default.

34 changes: 32 additions & 2 deletions examples/Watch/Watch.ino
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

#include <NTPtime.h>
NTPtime Time(2); //UA in +2 time zone
DSTtime dst(2, 0, 7, 3, 10, 0, 7, 4); //https://en.wikipedia.org/wiki/Eastern_European_Summer_Time

void setup() {
Serial.begin(115200);
Expand All @@ -11,12 +12,41 @@ void setup() {
while (WiFi.status() != WL_CONNECTED) delay(10);
Serial.println("Connected");

Time.setDSTauto(&dst);
Time.begin();
}

void loop() {
Time.DST(2, 0, 7, 3, 10, 0, 7, 4); //https://en.wikipedia.org/wiki/Eastern_European_Summer_Time
//Time.DST(2, 0, 7, 3, 10, 0, 7, 4); //manually calculate DST
Time.updateOnTime(0,0,10);
Time.tick();
if(Time.everyMs(0,1000)) Serial.println(Time.timeString());

if(Time.everyMs(0,1000)) {
Serial.println(Time.timeString());
UNIXtime moment1 = Time; //save moment time and other settings

//тепер moment1 має час, таймзону і покажчик на структуру dst (з данним для автоматичного розрахунку)

//now moment1 has a time, a timezone and a pointer to the dst structure (with data for automatic calculation)
Serial.println(moment1.timeString());
Serial.println(String(F("Time Zone in minute")) + moment1.getTimeZoneM());
Serial.println(String(F("DST is")) + moment1.getDST());

//автоматичне обрахування DST відбуваэться якщо визиваються будьякі функції для отримання данних з часу (функції з найстройками не рахуються)
//але можна обрахувати і вручну

//automatic calculation of DST occurs if any functions are called to obtain time data (functions with settings are not counted)
//but you can also calculate manually
moment1.DSTauto();

//напочатку в Time об'єкту класу NTPtime завжи йде час
//а в UNIXtime ні і тому час там залишається на місці, але його можна запустити функцією startTime(); і він піде від збереженого моменту

//initially, time always passes in the Time object of the NTPtime class
//and in UNIXtime it is not, and therefore the time there remains in place, but it can be started with the function startTime(); and it will go from the saved moment
moment1.startTime();
delay(1000);
Serial.println(String(F("Time:"))Time.timeString());
Serial.println(String(F("moment1:"))moment1.timeString());
}
}
22 changes: 21 additions & 1 deletion keywords.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ Timer KEYWORD1

TimeFunc KEYWORD1

DSTime KEYWORD1

NTPtimeClockStrata_val KEYWORD1
NTPtimeEthernet KEYWORD1

Expand All @@ -40,6 +42,9 @@ NTPstatus KEYWORD2
setUnixGMT KEYWORD2
setUnixFromDate KEYWORD2

addUnix KEYWORD2
subtractUnix KEYWORD2

setTimeZone KEYWORD2
getTimeZoneM KEYWORD2

Expand All @@ -48,13 +53,21 @@ setSummerTime KEYWORD2
setWinterTime KEYWORD2
setStandardTime KEYWORD2
getDST KEYWORD2

setDSTauto KEYWORD2
delDSTauto KEYWORD2
DSTauto KEYWORD2
DST KEYWORD2
DSTstartInGMT KEYWORD2
DSTendInGMT KEYWORD2

status KEYWORD2

startTime KEYWORD2
stopTime KEYWORD2

isRunning KEYWORD2

msFromUpdate KEYWORD2
unix KEYWORD2
unixGMT KEYWORD2
Expand All @@ -73,6 +86,11 @@ isPM KEYWORD2

hourFormat12 KEYWORD2

nextDays KEYWORD2
nextDay KEYWORD2
prevDays KEYWORD2
prevDay KEYWORD2

onTime KEYWORD2
onDate KEYWORD2

Expand Down Expand Up @@ -117,13 +135,15 @@ dayWeekStringRU KEYWORD2
monthShortStringRU KEYWORD2
dayWeekShortStringRU KEYWORD2


unixGMTFromDate KEYWORD2

decodeUNIX KEYWORD2

#######################################
# Constants (LITERAL1)
#######################################
unix_t LITERAL1
year_t LITERAL1

NTP_OK LITERAL1
NTP_NOT_STARTED LITERAL1
Expand Down
2 changes: 1 addition & 1 deletion library.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name=NTPtime
version=1.1.2
version=1.2.0
author=Denys Chuhlib
maintainer=Denys Chuhlib
sentence=NTPtime, UNIXtime and TimeFunc give you full control and more manipulation with time.
Expand Down
58 changes: 27 additions & 31 deletions src/NTPtime.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,7 @@ class NTPtime : public UNIXtime {
public:
NTPtime(int8_t gmt = 0, int8_t gmtM = 0) {
setTimeZone(gmt, gmtM);
_time = true;
_time_stat = 1;
startTime();
}

~NTPtime() {
Expand Down Expand Up @@ -107,15 +106,15 @@ class NTPtime : public UNIXtime {
if (msFromUpdate() >= prd * 1000UL) setTimeStat(UNIX_NOT_SYNCHRONIZED);
} else msFromUpdate();// перевірка переповнення

if (_ntp_stat != NTP_NOT_STARTED && _time_stat == UNIX_NOT_SYNCHRONIZED) {
if (_ntp_stat != NTP_NOT_STARTED && status() == UNIX_NOT_SYNCHRONIZED) {
do {
_ntp_stat = requestTime(); // запит NTP

if (!_async) yield();
} while (!_async && _ntp_stat == NTP_WAITING_REPLY);

return 1;
} else if (_time_stat == UNIX_NOT_STARTED || _ntp_stat == NTP_NOT_STARTED) {
} else if (status() == UNIX_NOT_STARTED || _ntp_stat == NTP_NOT_STARTED) {
_send_pack = false;
}
return 0;
Expand Down Expand Up @@ -147,9 +146,7 @@ class NTPtime : public UNIXtime {
UNIX_NOT_SYNCHRONIZED 1 - не синхронізовано
UNIX_NOT_STARTED 2 - зупинено
*/
/*bool status() { //UNIXtime.h
return _time_stat;
}*/
/*bool status();*/ //UNIXtime.h

private:
// запитати і обновити час з сервера
Expand Down Expand Up @@ -180,26 +177,28 @@ class NTPtime : public UNIXtime {
}
} else {
udp.read(buf, 48); // читаємо
uint32_t got_time = millis(); // запам'ятали час оновлення
uint16_t serv_ms = ((buf[44] << 8) | buf[45]) * 1000L >> 16; // мс сервера
int16_t ser_del = (int16_t)serv_ms - (((buf[36] << 8) | buf[37]) * 1000L >> 16); // мс затримки сервера
if (ser_del < 0) ser_del += 1000; // перехід через секунду
_way = millis() - _way; // весь шлях пакета і затримка сервера (фактично це пінг, але пакет NTP більший ніж пакет ping і тому затримка сервера більша)
int16_t ping = _way - ser_del; // нинішній пінг (шлях пакета, або RTT)
_way = ping / 2; // середній шлях в одну сторону
got_time -= (serv_ms + _way); // затримка часу
uint32_t unix = (uint32_t)(buf[40] << 8 | buf[41]) << 16 | (buf[42] << 8 | buf[43]); // 1900
unix -= 2208988800UL; // переводимо в UNIX (1970)

if (unix < 1662757200ul) { // некоректний час
_send_pack = false;
_ping = -1;
return 7;
{
uint32_t got_time = millis(); // запам'ятали час оновлення
uint16_t serv_ms = ((buf[44] << 8) | buf[45]) * 1000L >> 16; // мс сервера
int16_t ser_del = (int16_t)serv_ms - (((buf[36] << 8) | buf[37]) * 1000L >> 16); // мс затримки сервера
if (ser_del < 0) ser_del += 1000; // перехід через секунду
_way = millis() - _way; // весь шлях пакета і затримка сервера (фактично це пінг, але пакет NTP більший ніж пакет ping і тому затримка сервера більша)
int16_t ping = _way - ser_del; // нинішній пінг (шлях пакета, або RTT)
_way = ping / 2; // середній шлях в одну сторону
got_time -= (serv_ms + _way); // затримка часу
unix_t unix = (uint32_t)(buf[40] << 8 | buf[41]) << 16 | (buf[42] << 8 | buf[43]); // 1900
unix -= 2208988800UL; // переводимо в UNIX (1970)

if (unix < 1662757200ul) { // некоректний час
_send_pack = false;
_ping = -1;
return 7;
}

_ping = ping;
_ms = got_time;
_unix = unix;
}

_ping = ping;
_last_upd = got_time;
_unix = unix;
_send_pack = false;
setTimeStat(UNIX_OK);
#ifdef NTPtimeClockStrata_val
Expand All @@ -226,10 +225,7 @@ class NTPtime : public UNIXtime {
uint32_t _way = 0;
int16_t _ping = -1;

//bool _time = 0;
//uint8_t _time_stat = 2;

//uint32_t _last_upd = 0;
//uint32_t _unix = 0;
//uint32_t _ms = 0;
//unix_t _unix = 0;
};
#endif
Loading

0 comments on commit 32c3a22

Please sign in to comment.