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