mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-05 10:49:42 +02:00
retrieves time from NTP and calculate ms between now and a given time in the next 24 hours
This commit is contained in:
parent
b9b14ded2f
commit
147173bddd
2 changed files with 78 additions and 0 deletions
64
Software/src/devboard/utils/ntp_time.cpp
Normal file
64
Software/src/devboard/utils/ntp_time.cpp
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
#include "ntp_time.h"
|
||||||
|
#include "../../include.h"
|
||||||
|
#include "time.h"
|
||||||
|
|
||||||
|
const unsigned long millisInADay = 24 * 60 * 60 * 1000; // 24 hours in milliseconds
|
||||||
|
|
||||||
|
unsigned long long getNtpTimeInMillis() {
|
||||||
|
configTzTime(time_zone, ntpServer1, ntpServer2);
|
||||||
|
struct tm timeinfo;
|
||||||
|
|
||||||
|
// Wait for time to be set
|
||||||
|
for (int i = 0; i < 5; i++) {
|
||||||
|
if (getLocalTime(&timeinfo)) {
|
||||||
|
logging.println("Time retrieved from NTP Server");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
delay(1000);
|
||||||
|
logging.println("Waiting for NTP time...");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!getLocalTime(&timeinfo)) {
|
||||||
|
logging.println("Failed to obtain time");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert to milliseconds
|
||||||
|
time_t epochTime = mktime(&timeinfo);
|
||||||
|
return static_cast<unsigned long long>(epochTime) * 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function to calculate the difference in milliseconds to the next target time
|
||||||
|
unsigned long long millisToNextTargetTime(unsigned long long currentMillis, int targetTime) {
|
||||||
|
int hour = targetTime / 100;
|
||||||
|
int minute = targetTime % 100;
|
||||||
|
|
||||||
|
time_t currentTime = currentMillis / 1000; // Convert milliseconds to seconds
|
||||||
|
struct tm* timeinfo = localtime(¤tTime);
|
||||||
|
|
||||||
|
// Set timeinfo to the target time on the next day
|
||||||
|
timeinfo->tm_hour = hour;
|
||||||
|
timeinfo->tm_min = minute;
|
||||||
|
timeinfo->tm_sec = 0;
|
||||||
|
|
||||||
|
// Increment day if the current time is past the target time
|
||||||
|
if (mktime(timeinfo) <= currentTime) {
|
||||||
|
timeinfo->tm_mday += 1;
|
||||||
|
}
|
||||||
|
time_t nextTargetTime = mktime(timeinfo);
|
||||||
|
unsigned long long nextTargetMillis = static_cast<unsigned long long>(nextTargetTime) * 1000;
|
||||||
|
return nextTargetMillis - currentMillis;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long long getTimeOffsetfromNowUntil(int targetTime) {
|
||||||
|
logging.println("Getting time offset from now until " + String(targetTime));
|
||||||
|
unsigned long long timeinMillis = getNtpTimeInMillis();
|
||||||
|
if (timeinMillis != 0) {
|
||||||
|
logging.println("Time in millis: " + String(timeinMillis));
|
||||||
|
unsigned long long timeOffsetUntilTargetTime = millisInADay - (millisToNextTargetTime(timeinMillis, targetTime));
|
||||||
|
logging.println("Time offset until target time: " + String(timeOffsetUntilTargetTime));
|
||||||
|
return timeOffsetUntilTargetTime;
|
||||||
|
} else
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
14
Software/src/devboard/utils/ntp_time.h
Normal file
14
Software/src/devboard/utils/ntp_time.h
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#ifndef __NTPTIME_H__
|
||||||
|
#define __NTPTIME_H__
|
||||||
|
|
||||||
|
extern const char* ntpServer1;
|
||||||
|
extern const char* ntpServer2;
|
||||||
|
extern const char* time_zone;
|
||||||
|
|
||||||
|
void init_mqtt(void);
|
||||||
|
void mqtt_loop(void);
|
||||||
|
unsigned long long getNtpTimeInMillis();
|
||||||
|
unsigned long long millisToNextTargetTime(unsigned long long currentMillis, int targetTime);
|
||||||
|
unsigned long long getTimeOffsetfromNowUntil(int targetTime);
|
||||||
|
|
||||||
|
#endif
|
Loading…
Add table
Add a link
Reference in a new issue