SkillAgentSearch skills...

NTPtime

NTPtime, UNIXtime and TimeFunc give you full control and more manipulation with time.

Install / Use

/learn @DenysChuhlib/NTPtime
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Foo PlatformIO Registry Foo

Foo Foo

NTPtime

Бібліотека часу з багатьма функціями:

  • Отримання точного часу за допомогою NTP сервера і використання
  • Використання UNIX часу і його декодування
  • Можливість використання UNIX64 для більш ширших розрахунків (можна і від'ємний час обробляти)
  • Альтернатива стандартній бібліотеці Time.h в оптимізації і простоті використання
  • Можливість робити таймер у рівний час, наприклад рівно о 12:00 і так щогодини, який займає лише один байт
  • Безліч інших зручних функцій

Сумісність усієї бібліотеки

Будь-які ардуіно сумісні плати

Сумісність синхронізації NTP

esp8266, esp32, Ethernet

Зміст

<a id="install"></a>

Установка

  • Бібліотеку можна знайти за назвою NTPtime та встановити через менеджер бібліотек у:
    • Arduino IDE v2.0 (рекомендовано)
    • Arduino IDE
  • Завантажити бібліотеку .zip архівом для ручної установки:
    • Розпакувати та покласти в Документи/Arduino/libraries/
    • (Arduino IDE) автоматичне встановлення з .zip: Скетч/Підключити бібліотеку/Додати .ZIP бібліотеку… та вказати завантажений архів

<a id="usage"></a>

Використання і особливості

Режим UNIX64 (v1.2)

Для ввімкнення режиму необхідно, перед підлкюченням любої частини бібліотеки (NTPTime.h/UNIXtime.h/TimeFunc.h), написати #define UNIX64.

PS: Якщо ядро вашої плати, а точніше бібліотека String.h не підтримує числа 64 біт, то буде помилка комбіляції. Можливо, в майб'тньому зроблю універсальніше =).

Типи данних (v1.2)

  • unix_t - тип для Unix часу. В звичайном режимі це uint32_t / якщо ввімкнений UNIX64 то int64_t
  • year_t - тип для року. В звичайном режимі це uint16_t / якщо ввімкнений UNIX64 то int64_t
  • DSTime - структира для зберігання данних які використовуються в обчисленні DST.

<a id="features"></a>

Особливості

NTPTime

  • tick(), DST(),DSTauto(), updateOnTime() працюють головному в циклі loop().
  • Чим більше потрібна точність часу тим меньше потрібен період в tick(prd). Якщо простий годинник, достатньо одного updateOnTime(0,0,10) і обновляти в нічий час, коли найкращий Інтернет.

UNIXtime

  • DST(),DSTauto() - працюють головному в циклі loop().
  • Мілісекунди зберігаються при зупинці відліку часу і відновлюються при запуску.

Для кращого розуміння, дивіться приклади testBlink.ino,Watch.ino,Timer.ino,Timer_with_Time.ino, RTC.ino та інші.

<a id="DSTime"></a>

DSTime

//Ініціалізація
DSTime();
DSTime(uint8_t month_start_, uint8_t week_start_, uint8_t dayWeek_start_, uint8_t h_start_,
    uint8_t month_end_, uint8_t week_end_, uint8_t dayWeek_end_, uint8_t h_end_, int8_t mode_ = 1);

// для зміни всих значень
void setDST(uint8_t month_start_, uint8_t week_start_, uint8_t dayWeek_start_, uint8_t h_start_,
    uint8_t month_end_, uint8_t week_end_, uint8_t dayWeek_end_, uint8_t h_end_, int8_t mode_ = 1);

//можна змінювати одне значення
//елементи з бітовими полями для ефективного зберігання в EEPROM. (займають лише 4 байта)
uint8_t month_start     : 4;
uint8_t week_start      : 3;
uint8_t dayWeek_start   : 3;
uint8_t h_start         : 5;
                      
uint8_t month_end       : 4;
uint8_t week_end        : 3;
uint8_t dayWeek_end     : 3;
uint8_t h_end           : 5;

// DST_WT   -1  //Winter time
// DST_OFF  0   //None
// DST_ON   1   //DST
int8_t mode             : 2;

<a id="NTPtime"></a>

NTPtime

//Ініціалізація
NTPtime Time;                               // параметри за замовчуванням (time zone 0, time zone minune)
NTPtime(time_zona, time_zonaM);             // часовий пояс у годинах і хвилинах

void setHost(const String& host);           // установити хост (за умовч. pool.ntp.org)
void setPort(uint16_t port);                // установити порт NTP сервера (за умовч. 123)
void setTimeout(uint16_t timeout);          // установити таймаут відповіді сервера (200 - 64000) (за умовч. 64000)

bool begin(uint16_t port);                  // запустити (вхідний порт за умовч. 123)
void end();                                 // зупинити

void asyncMode(bool _on_off);               // асинхронний режим (за умовч. ввімкнений, true)

void updateNow();                           // обновити зараз (ручний запуск оновлення)

bool updateOnTime(uint8_t h, uint8_t m, uint8_t s);     // функція `loop()` цикла яка оновлює час в Г, Х, С (працює в парі з tick())

// функція `loop()` цикла яка оновлює час по періоду (1 хв <= prd <= 1 доба), після ручного запуска або в певний час, підчас оновлення повертає true
bool tick(uint16_t prd);

int16_t ping();                     // отримати пінг сервера (при відсутньому з'єднанні повертає -1)

// отримати статус оновлення
/*
    NTP_OK                          0 - все ок
    NTP_NOT_STARTED                 1 - не запущений UDP
    NTP_NOT_CONNECTED_WIFI          2 - не підключений WiFi
    NTP_NOT_CONNECTED_TO_SERVER     3 - помилка підключення до сервера
    NTP_NOT_SENT_PACKET             4 - помилка отправки пакета
    NTP_WAITING_REPLY               5 - іде очікування відповіді
    NTP_TIMEOUT                     6 - таймаут відповіді сервера
    NTP_REPLY_ERROR                 7 - отримана некоректна відповідь сервера
*/
uint8_t NTPstatus(); 

<a id="UNIXtime&NTPtime"></a>

UNIXtime і NTPtime

В основі NTPtime лежить UNIXtime і він має такі функції:

//Ініціалізація
UNIXtime Timer;                     // таймер (запустити Timer.startTime();)

//unix час, часовий пояс, хвилини часового поясу, міліскекунди
UNIXtime(unix_t unix, int8_t tz, int8_t tzM, uint16_t ms);

// рік, місяць, день, години, хвилини, секунди, часовий пояс у хвилинах, мілісекунди
UNIXtime(year_t y, uint8_t m, uint8_t d, uint8_t h, uint8_t mn, uint8_t s, int16_t tzM, uint16_t ms);

void setUnixGMT(unix_t unix, uint16_t ms);      // встановити unix час відносно грінвіча

void setUnixGMTFromDate(year_t y, uint8_t m, uint8_t d, uint8_t h, uint8_t mn, uint8_t s, int16_t tzM = 0, uint16_t ms = 0);

void addUnix(unix_t unix, uint16_t ms = 0);
void subtractUnix(unix_t unix, uint16_t ms = 0);

void setTimeZone(int8_t tz, int8_t tzM);    // установити часовий пояс
int16_t getTimeZoneM();                     // дізнатись часовий пояс в хвилинах

void setDST (int8_t dst_wt);                // установити літній час 1 (за умовчуванням) та зимовий час -1 або стандартний час 0
void setSummerTime();                       // установити літній час

void setWinterTime();                       // установити зимовий час

void setStandardTime();                     // установити стандартний час

int8_t getDST();                // поверне якщо літній час 1 (DST_ON) та зимовий час -1 (DST_WT) або стандартний час 0 (DST_OFF)

void setDSTauto(DSTime * dst);  // передача адреси структури DSTime для втановки автоматичного перерахунки і перевірки DST
DSTime *getDSTauto();           // поверне покажчик збереженого DSTime
void delDSTauto();              // очистити покажчик на елемент стрктури DSTime
bool DSTauto();                 // функція ручного однократного запуска перерахунку DST за данними `всановленої` структури DSTime

bool DST (DSTime & dst);  // функція ручного однократного запуска перерахунку DST за данними `даної` структури DSTime

// функція ручного однократного запуска перерахунку DST за данними значеннями
void DST(uint8_t month_start, uint8_t week_start, uint8_t dayWeek_start, uint8_t h_start,
uint8_t month_end, uint8_t week_end, uint8_t dayWeek_end, uint8_t h_end, bool dst_or_wt); 

//month_start - місяць початку літнього/зимнього часу
//week_start  -  тиждень початку літнього/зимнього часу (якщо 0 то останній тиждень)
//dayWeek_start - день тижня початку літнього/зимнього часу
//h_start - година початку літнього/зимнього часу

//month_end - місяць кінця літнього/зимнього часу
//week_end - тиждень кінця літнього/зимнього часу (якщо 0 то останній тиждень)
//dayWeek_end - день тижня кінця літнього/зимнього часу
//h_end - година кінця літнього/зимнього часу

//dst_or_wt за умовчування 1 - літній час, якщо 0 то зимній
//DST(3, 0, 7, 3, 10, 0, 7, 4); //https://en.wikipedia.org/wiki/Eastern_European_Summer_Time

unix_t DSTstartInGMT (uint8_t month_start, uint8_t week_start, uint8_t dayWeek_start, uint8_t h_start);
unix_t DSTendInGMT (uint8_t month_end, uint8_t week_end, uint8_t dayWeek_end, uint8_t h_end, bool dst_or_wt = 1);


// отримати статус системи
/*
    UNIX_OK                 0 - все ок
    UNIX_NOT_SYNCHRONIZED   1 - не синхронізовано
    UNIX_NOT_STARTED        2 - зупинено
*/  
bool status();

bool isRunning();

void startTime();                   // почати відлік часу

void stopTime();                    // зупунити відлік часу

uint32_t msFromUpdate();            // мілісекунд з останнього оновлення

unix_t uni
View on GitHub
GitHub Stars4
CategoryDevelopment
Updated2mo ago
Forks2

Languages

C++

Security Score

90/100

Audited on Jan 19, 2026

No findings