add node time changes, increased MQTT payload memory, ESP-NOW address to DBG

pull/142/head
Jeff Lehman 1 year ago
parent d9083d0d75
commit 506f0d0004

@ -23,3 +23,10 @@
#define LORA_TXPWR 17 // LoRa TX power in dBm (: +2dBm - +17dBm (for SX1276-7) +20dBm (for SX1278))
#define LORA_ACK // Request LoRa acknowledgment.
// Time settings
#define USDST
// #define EUDST
#define STD_OFFSET (-6) // Local standard time offset in hours from UTC - if unsure, check https://time.is
#define DST_OFFSET (STD_OFFSET + 1) // Local savings time offset in hours from UTC - if unsure, check https://time.is
#define TIME_PRINTTIME 10 // Time, in minutes, between printing local time to debug

@ -23,3 +23,10 @@
#define LORA_TXPWR 17 // LoRa TX power in dBm (: +2dBm - +17dBm (for SX1276-7) +20dBm (for SX1278))
#define LORA_ACK // Request LoRa acknowledgment.
// Time settings
#define USDST
// #define EUDST
#define STD_OFFSET (-6) // Local standard time offset in hours from UTC - if unsure, check https://time.is
#define DST_OFFSET (STD_OFFSET + 1) // Local savings time offset in hours from UTC - if unsure, check https://time.is
#define TIME_PRINTTIME 10 // Time, in minutes, between printing local time to debug

@ -21,3 +21,10 @@
#define LORA_TXPWR 17 // LoRa TX power in dBm (: +2dBm - +17dBm (for SX1276-7) +20dBm (for SX1278))
#define LORA_ACK // Request LoRa acknowledgment.
// Time settings
#define USDST
// #define EUDST
#define STD_OFFSET (-6) // Local standard time offset in hours from UTC - if unsure, check https://time.is
#define DST_OFFSET (STD_OFFSET + 1) // Local savings time offset in hours from UTC - if unsure, check https://time.is
#define TIME_PRINTTIME 10 // Time, in minutes, between printing local time to debug

@ -22,3 +22,10 @@
#define LORA_TXPWR 17 // LoRa TX power in dBm (: +2dBm - +17dBm (for SX1276-7) +20dBm (for SX1278))
#define LORA_ACK // Request LoRa acknowledgment.
// Time settings
#define USDST
// #define EUDST
#define STD_OFFSET (-6) // Local standard time offset in hours from UTC - if unsure, check https://time.is
#define DST_OFFSET (STD_OFFSET + 1) // Local savings time offset in hours from UTC - if unsure, check https://time.is
#define TIME_PRINTTIME 10 // Time, in minutes, between printing local time to debug

@ -27,4 +27,11 @@
//#define CUSTOM_SPI
#define LORA_SPI_SCK 5
#define LORA_SPI_MISO 19
#define LORA_SPI_MOSI 27
#define LORA_SPI_MOSI 27
// Time settings
#define USDST
// #define EUDST
#define STD_OFFSET (-6) // Local standard time offset in hours from UTC - if unsure, check https://time.is
#define DST_OFFSET (STD_OFFSET + 1) // Local savings time offset in hours from UTC - if unsure, check https://time.is
#define TIME_PRINTTIME 10 // Time, in minutes, between printing local time to debug

@ -19,3 +19,10 @@
#define LORA_TXPWR 17 // LoRa TX power in dBm (: +2dBm - +17dBm (for SX1276-7) +20dBm (for SX1278))
#define LORA_ACK // Request LoRa acknowledgment.
// Time settings
#define USDST
// #define EUDST
#define STD_OFFSET (-6) // Local standard time offset in hours from UTC - if unsure, check https://time.is
#define DST_OFFSET (STD_OFFSET + 1) // Local savings time offset in hours from UTC - if unsure, check https://time.is
#define TIME_PRINTTIME 10 // Time, in minutes, between printing local time to debug

@ -19,3 +19,10 @@
#define LORA_TXPWR 17 // LoRa TX power in dBm (: +2dBm - +17dBm (for SX1276-7) +20dBm (for SX1278))
#define LORA_ACK // Request LoRa acknowledgment.
// Time settings
#define USDST
// #define EUDST
#define STD_OFFSET (-6) // Local standard time offset in hours from UTC - if unsure, check https://time.is
#define DST_OFFSET (STD_OFFSET + 1) // Local savings time offset in hours from UTC - if unsure, check https://time.is
#define TIME_PRINTTIME 10 // Time, in minutes, between printing local time to debug

@ -19,3 +19,10 @@
#define LORA_TXPWR 17 // LoRa TX power in dBm (: +2dBm - +17dBm (for SX1276-7) +20dBm (for SX1278))
#define LORA_ACK // Request LoRa acknowledgment.
// Time settings
#define USDST
// #define EUDST
#define STD_OFFSET (-6) // Local standard time offset in hours from UTC - if unsure, check https://time.is
#define DST_OFFSET (STD_OFFSET + 1) // Local savings time offset in hours from UTC - if unsure, check https://time.is
#define TIME_PRINTTIME 10 // Time, in minutes, between printing local time to debug

@ -35,4 +35,11 @@
#define OLED_HEADER "FDRS"
#define OLED_SDA 4
#define OLED_SCL 15
#define OLED_RST 16
#define OLED_RST 16
// Time settings
#define USDST
// #define EUDST
#define STD_OFFSET (-6) // Local standard time offset in hours from UTC - if unsure, check https://time.is
#define DST_OFFSET (STD_OFFSET + 1) // Local savings time offset in hours from UTC - if unsure, check https://time.is
#define TIME_PRINTTIME 10 // Time, in minutes, between printing local time to debug

@ -19,3 +19,10 @@
#define LORA_TXPWR 17 // LoRa TX power in dBm (: +2dBm - +17dBm (for SX1276-7) +20dBm (for SX1278))
#define LORA_ACK // Request LoRa acknowledgment.
// Time settings
#define USDST
// #define EUDST
#define STD_OFFSET (-6) // Local standard time offset in hours from UTC - if unsure, check https://time.is
#define DST_OFFSET (STD_OFFSET + 1) // Local savings time offset in hours from UTC - if unsure, check https://time.is
#define TIME_PRINTTIME 10 // Time, in minutes, between printing local time to debug

@ -19,3 +19,10 @@
#define LORA_TXPWR 17 // LoRa TX power in dBm (: +2dBm - +17dBm (for SX1276-7) +20dBm (for SX1278))
#define LORA_ACK // Request LoRa acknowledgment.
// Time settings
#define USDST
// #define EUDST
#define STD_OFFSET (-6) // Local standard time offset in hours from UTC - if unsure, check https://time.is
#define DST_OFFSET (STD_OFFSET + 1) // Local savings time offset in hours from UTC - if unsure, check https://time.is
#define TIME_PRINTTIME 10 // Time, in minutes, between printing local time to debug

@ -19,3 +19,10 @@
#define LORA_TXPWR 17 // LoRa TX power in dBm (: +2dBm - +17dBm (for SX1276-7) +20dBm (for SX1278))
#define LORA_ACK // Request LoRa acknowledgment.
// Time settings
#define USDST
// #define EUDST
#define STD_OFFSET (-6) // Local standard time offset in hours from UTC - if unsure, check https://time.is
#define DST_OFFSET (STD_OFFSET + 1) // Local savings time offset in hours from UTC - if unsure, check https://time.is
#define TIME_PRINTTIME 10 // Time, in minutes, between printing local time to debug

@ -25,4 +25,11 @@
#define OLED_HEADER "FDRS"
#define OLED_SDA 4
#define OLED_SCL 15
#define OLED_RST 16
#define OLED_RST 16
// Time settings
#define USDST
// #define EUDST
#define STD_OFFSET (-6) // Local standard time offset in hours from UTC - if unsure, check https://time.is
#define DST_OFFSET (STD_OFFSET + 1) // Local savings time offset in hours from UTC - if unsure, check https://time.is
#define TIME_PRINTTIME 10 // Time, in minutes, between printing local time to debug

@ -19,3 +19,10 @@
#define LORA_TXPWR 17 // LoRa TX power in dBm (: +2dBm - +17dBm (for SX1276-7) +20dBm (for SX1278))
#define LORA_ACK // Request LoRa acknowledgment.
// Time settings
#define USDST
// #define EUDST
#define STD_OFFSET (-6) // Local standard time offset in hours from UTC - if unsure, check https://time.is
#define DST_OFFSET (STD_OFFSET + 1) // Local savings time offset in hours from UTC - if unsure, check https://time.is
#define TIME_PRINTTIME 10 // Time, in minutes, between printing local time to debug

@ -19,3 +19,10 @@
#define LORA_TXPWR 17 // LoRa TX power in dBm (: +2dBm - +17dBm (for SX1276-7) +20dBm (for SX1278))
#define LORA_ACK // Request LoRa acknowledgment.
// Time settings
#define USDST
// #define EUDST
#define STD_OFFSET (-6) // Local standard time offset in hours from UTC - if unsure, check https://time.is
#define DST_OFFSET (STD_OFFSET + 1) // Local savings time offset in hours from UTC - if unsure, check https://time.is
#define TIME_PRINTTIME 10 // Time, in minutes, between printing local time to debug

@ -19,3 +19,10 @@
#define LORA_TXPWR 17 // LoRa TX power in dBm (: +2dBm - +17dBm (for SX1276-7) +20dBm (for SX1278))
#define LORA_ACK // Request LoRa acknowledgment.
// Time settings
#define USDST
// #define EUDST
#define STD_OFFSET (-6) // Local standard time offset in hours from UTC - if unsure, check https://time.is
#define DST_OFFSET (STD_OFFSET + 1) // Local savings time offset in hours from UTC - if unsure, check https://time.is
#define TIME_PRINTTIME 10 // Time, in minutes, between printing local time to debug

@ -19,3 +19,10 @@
#define LORA_TXPWR 17 // LoRa TX power in dBm (: +2dBm - +17dBm (for SX1276-7) +20dBm (for SX1278))
#define LORA_ACK // Request LoRa acknowledgment.
// Time settings
#define USDST
// #define EUDST
#define STD_OFFSET (-6) // Local standard time offset in hours from UTC - if unsure, check https://time.is
#define DST_OFFSET (STD_OFFSET + 1) // Local savings time offset in hours from UTC - if unsure, check https://time.is
#define TIME_PRINTTIME 10 // Time, in minutes, between printing local time to debug

@ -20,3 +20,10 @@
#define LORA_TXPWR 17 // LoRa TX power in dBm (: +2dBm - +17dBm (for SX1276-7) +20dBm (for SX1278))
#define LORA_ACK // Request LoRa acknowledgment.
// Time settings
#define USDST
// #define EUDST
#define STD_OFFSET (-6) // Local standard time offset in hours from UTC - if unsure, check https://time.is
#define DST_OFFSET (STD_OFFSET + 1) // Local savings time offset in hours from UTC - if unsure, check https://time.is
#define TIME_PRINTTIME 10 // Time, in minutes, between printing local time to debug

@ -19,3 +19,10 @@
#define LORA_TXPWR 17 // LoRa TX power in dBm (: +2dBm - +17dBm (for SX1276-7) +20dBm (for SX1278))
#define LORA_ACK // Request LoRa acknowledgment.
// Time settings
#define USDST
// #define EUDST
#define STD_OFFSET (-6) // Local standard time offset in hours from UTC - if unsure, check https://time.is
#define DST_OFFSET (STD_OFFSET + 1) // Local savings time offset in hours from UTC - if unsure, check https://time.is
#define TIME_PRINTTIME 10 // Time, in minutes, between printing local time to debug

@ -19,3 +19,10 @@
#define LORA_TXPWR 17 // LoRa TX power in dBm (: +2dBm - +17dBm (for SX1276-7) +20dBm (for SX1278))
#define LORA_ACK // Request LoRa acknowledgment.
// Time settings
#define USDST
// #define EUDST
#define STD_OFFSET (-6) // Local standard time offset in hours from UTC - if unsure, check https://time.is
#define DST_OFFSET (STD_OFFSET + 1) // Local savings time offset in hours from UTC - if unsure, check https://time.is
#define TIME_PRINTTIME 10 // Time, in minutes, between printing local time to debug

@ -168,8 +168,8 @@ void beginFDRS()
#ifdef USE_WIFI
client.publish(TOPIC_STATUS, "FDRS initialized");
scheduleFDRS(fetchNtpTime,1000*60*FDRS_TIME_FETCHNTP);
scheduleFDRS(printTime,1000*60*FDRS_TIME_PRINTTIME);
#endif
scheduleFDRS(printTime,1000*60*FDRS_TIME_PRINTTIME);
}
void handleCommands()

@ -43,13 +43,13 @@ void OnDataRecv(const uint8_t *mac, const uint8_t *incomingData, int len)
memcpy(&incMAC, mac, sizeof(incMAC));
if (len < sizeof(DataReading))
{
DBG("Incoming ESP-NOW System Packet");
DBG("Incoming ESP-NOW System Packet from 0x" + String(incMAC[5], HEX));
memcpy(&theCmd, incomingData, sizeof(theCmd));
memcpy(&incMAC, mac, sizeof(incMAC));
return;
}
memcpy(&theData, incomingData, sizeof(theData));
DBG("Incoming ESP-NOW Data Reading");
DBG("Incoming ESP-NOW Data Reading from 0x" + String(incMAC[5], HEX));
ln = len / sizeof(DataReading);
if (memcmp(&incMAC, &ESPNOW1, 6) == 0)
{
@ -156,7 +156,7 @@ int getFDRSPeer(uint8_t *mac)
void add_espnow_peer()
{
DBG("Device requesting peer registration");
DBG("Device requesting peer registration: 0x" + String(incMAC[5], HEX));
int peer_num = getFDRSPeer(&incMAC[0]);
if (peer_num == -1) // if the device isn't registered
{
@ -187,7 +187,7 @@ void add_espnow_peer()
}
else
{
DBG("Refreshing existing peer registration");
DBG("Refreshing existing peer registration for 0x" + String(incMAC[5], HEX));
peer_list[peer_num].last_seen = millis();
SystemPacket sys_packet = {.cmd = cmd_add, .param = PEER_TIMEOUT};
@ -239,7 +239,7 @@ esp_err_t pingback_espnow()
SystemPacket sys_packet = { .cmd = cmd_ping, .param = 1 };
esp_err_t result;
DBG("ESP-NOW Ping back to sender");
DBG("ESP-NOW Ping back to sender 0x" + String(incMAC[5], HEX));
result = sendESPNow(incMAC, &sys_packet);
return result;
}
@ -341,14 +341,14 @@ esp_err_t sendESPNowNbr(uint8_t interface) {
{
case 1:
{ // These brackets are required!
DBG("Sending to ESP-NOW Neighbor #1");
DBG("Sending to ESP-NOW Neighbor #1: 0x" + String(ESPNOW_NEIGHBOR_1, HEX));
result = sendESPNow(ESPNOW1, theData);
esp_now_del_peer(ESPNOW1);
break;
}
case 2:
{ // These brackets are required!
DBG("Sending to ESP-NOW Neighbor #1");
DBG("Sending to ESP-NOW Neighbor #2: 0x" + String(ESPNOW_NEIGHBOR_2, HEX));
result = sendESPNow(ESPNOW2, theData);
esp_now_del_peer(ESPNOW2);
break;
@ -370,7 +370,7 @@ esp_err_t sendESPNowPeers() {
esp_err_t sendESPNowTempPeer(uint8_t *dest) {
esp_err_t result;
DBG("Sending ESP-NOW temp peer.");
DBG("Sending ESP-NOW temp peer: 0x" + String(*dest, HEX));
result = sendESPNow(dest, theData);
esp_now_del_peer(dest);
return result;
@ -378,5 +378,5 @@ esp_err_t sendESPNowTempPeer(uint8_t *dest) {
void recvTimeEspNow() {
setTime(theCmd.param);
DBG("Received time via ESP-NOW from 0x" + String(incMAC[5],HEX));
DBG("Received time via ESP-NOW from 0x" + String(incMAC[5], HEX));
}

@ -664,10 +664,15 @@ void sendTimeLoRa() {
DBG("Sending time via LoRa");
SystemPacket spTimeLoRa = {.cmd = cmd_time, .param = now};
transmitLoRa(&loraBroadcast, &spTimeLoRa, 1);
// Do not send to LoRa peers if their address is 0x..00
if((LoRa1 & 0x00FF) != 0x0000) {
spTimeLoRa.param = now;
// add LoRa neighbor 1
transmitLoRa(&LoRa1, &spTimeLoRa, 1);
}
if((LoRa2 & 0x00FF) != 0x0000) {
spTimeLoRa.param = now;
// add LoRa neighbor 2
transmitLoRa(&LoRa2, &spTimeLoRa, 1);
}
}

@ -40,6 +40,8 @@
#define FDRS_MQTT_AUTH
#endif // MQTT_AUTH
#define MQTT_MAX_BUFF_SIZE 1024
WiFiClient espClient;
PubSubClient client(espClient);
@ -139,6 +141,7 @@ void mqtt_callback(char *topic, byte *message, unsigned int length)
void begin_mqtt()
{
client.setServer(mqtt_server, mqtt_port);
client.setBufferSize(MQTT_MAX_BUFF_SIZE);
if (!client.connected())
{
reconnect_mqtt(5);

@ -27,20 +27,20 @@
// EU DST Start - last Sunday in March - 01:00 UTC
// EU DST End - last Sunday in October - 01:00 UTC
time_t now; // Current time in UTC- number of seconds since Jan 1 1970 (epoch)
time_t now; // Current time in UTC - number of seconds since Jan 1 1970 (epoch)
struct tm timeinfo; // Structure containing time elements
struct timeval tv;
char strftime_buf[64];
bool validTimeFlag = false; // Indicate whether we have reliable time
time_t lastNTPFetchSuccess = 0; // Last time that a successful NTP fetch was made
bool isDST; // Keeps track of Daylight Savings Time vs Standard Time
long slewSecs = 0; // When time is set this is the number of seconds the time changes
double stdOffset = (FDRS_STD_OFFSET * 60 * 60); // UTC -> Local time, in Seconds, offset from UTC in Standard Time
double dstOffset = (FDRS_DST_OFFSET * 60 * 60); // -1 hour for DST offset from standard time (in seconds)
time_t lastUpdate = 0;
time_t lastTimeSend = 0;
double stdOffset = (FDRS_STD_OFFSET * 60 * 60); // UTC -> Local time, in Seconds, offset from UTC in Standard Time
double dstOffset = (FDRS_DST_OFFSET * 60 * 60); // DST offset from standard time (in seconds)
time_t lastDstCheck = 0;
void sendTimeLoRa();
esp_err_t sendTimeESPNow();
@ -62,6 +62,7 @@ bool validTime() {
void printTime() {
if(validTime()) {
char strftime_buf[64];
// UTC Time
// // print Unix time:

@ -186,7 +186,7 @@ void fetchNtpTime() {
// subtract seventy years:
// now is epoch format - seconds since Jan 1 1970
now = secsSince1900 - seventyYears;
setTime(now); // time in UTC
setTime(now); // UTC time
}
else {
NTPFetchFail++;

@ -56,6 +56,7 @@ void (*callback_ptr)(DataReading);
uint16_t subscription_list[256] = {};
bool active_subs[256] = {};
time_t netTimeOffset=UINT32_MAX; // Offset network time by the 1/2 the amount of time a ping takes, if value not set then use max value
time_t lastPrintTime = 0;
#include "fdrs_debug.h"
#include "fdrs_node_time.h"
@ -275,7 +276,13 @@ void sleepFDRS(int sleep_time)
void loopFDRS()
{
#ifndef DEEP_SLEEP
updateTime();
if(millis() - lastPrintTime > (TIME_PRINTTIME * 60 * 1000)) {
lastPrintTime = millis();
printTime();
}
#endif
#ifdef USE_LORA
handleLoRa();
#endif

@ -57,9 +57,7 @@ void OnDataRecv(const uint8_t *mac, const uint8_t *incomingData, int len)
gtwy_timeout = command.param;
break;
case cmd_time:
time_t previousTime = now;
now = command.param;
setTime(previousTime);
setTime(command.param);
break;
}
}

@ -423,9 +423,7 @@ crcResult getLoRa()
}
}
else if (ln == 1 && receiveData[0].cmd == cmd_time) {
time_t previousTime = now;
now = receiveData[0].param;
setTime(previousTime);
setTime(receiveData[0].param);
DBG("Time rcv from LoRa 0x" + String(sourceMAC, HEX));
adjTimeforNetDelay(netTimeOffset);
}
@ -459,9 +457,7 @@ crcResult getLoRa()
}
}
else if (ln == 1 && receiveData[0].cmd == cmd_time) {
time_t previousTime = now;
now = receiveData[0].param;
setTime(previousTime);
setTime(receiveData[0].param);
DBG("Time rcv from LoRa 0x" + String(sourceMAC, HEX));
adjTimeforNetDelay(netTimeOffset);
}

@ -1,5 +1,12 @@
#include <sys/time.h>
// select Time, in minutes, between time printed configuration
#if defined(TIME_PRINTTIME)
#define FDRS_TIME_PRINTTIME TIME_PRINTTIME
#else
#define FDRS_TIME_PRINTTIME GLOBAL_TIME_PRINTTIME
#endif // TIME_PRINTTIME
// select Local Standard time Offset from UTC configuration
#if defined(STD_OFFSET)
#define FDRS_STD_OFFSET STD_OFFSET
@ -14,9 +21,11 @@
#define FDRS_DST_OFFSET GLOBAL_DST_OFFSET
#endif // DST_OFFSET
#define DSTSTART (timeinfo.tm_mon == 2 && timeinfo.tm_wday == 0 && timeinfo.tm_mday > 7 && timeinfo.tm_mday < 15 && timeinfo.tm_hour == 2)
#define DSTEND (timeinfo.tm_mon == 10 && timeinfo.tm_wday == 0 && timeinfo.tm_mday < 8 && timeinfo.tm_hour == 2)
// US DST Start - 2nd Sunday in March - 02:00 local time
// US DST End - 1st Sunday in November - 02:00 local time
// EU DST Start - last Sunday in March - 01:00 UTC
// EU DST End - last Sunday in October - 01:00 UTC
time_t now; // Current time - number of seconds since Jan 1 1970 (epoch)
struct tm timeinfo; // Structure containing time elements
@ -28,7 +37,9 @@ bool isDST;
time_t previousTime = 0;
long slewSecs = 0;
double stdOffset = (FDRS_STD_OFFSET * 60 * 60); // UTC -> Local time, in Seconds, offset from UTC in Standard Time
double dstOffset = (FDRS_DST_OFFSET * 60 * 60); // DST offset from standard time (in seconds)
double dstOffset = (FDRS_DST_OFFSET * 60 * 60); // -1 hour for DST offset from standard time (in seconds)
time_t lastUpdate = 0;
time_t lastTimeSend = 0;
time_t lastDstCheck = 0;
// Function prototypes
@ -71,14 +82,14 @@ void printTime() {
// Local time
time_t local = time(NULL) + (isDST?dstOffset:stdOffset);
localtime_r(&now, &timeinfo);
localtime_r(&local, &timeinfo);
strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo);
DBG("Local date/time: " + String(strftime_buf) + (isDST?" DST":" STD"));
DBG("Local date/time is: " + String(strftime_buf) + (isDST?" DST":" STD"));
}
// Checks for DST or STD and adjusts time if there is a change
void checkDST() {
if(validTime() && (time(NULL) - lastDstCheck > 5)) {
if(validTime() && (time(NULL) - lastDstCheck > 5)) {
lastDstCheck = time(NULL);
int dstFlag = -1;
localtime_r(&now, &timeinfo);
@ -86,16 +97,30 @@ void checkDST() {
struct tm dstBegin;
dstBegin.tm_year = timeinfo.tm_year;
dstBegin.tm_mon = 2;
#ifdef USDST
dstBegin.tm_mday = 8;
dstBegin.tm_hour = 2;
dstBegin.tm_min = 0;
dstBegin.tm_sec = 0;
mktime(&dstBegin); // calculate tm_dow
mktime(&dstBegin); // calculate tm_wday
dstBegin.tm_mday = dstBegin.tm_mday + ((7 - dstBegin.tm_wday) % 7);
// mktime(&dstBegin); // recalculate tm_dow
// mktime(&dstBegin); // recalculate tm_wday
// strftime(buf, sizeof(buf), "%c", &dstBegin);
// DBG("DST Begins: " + String(buf) + " local");
time_t tdstBegin = mktime(&dstBegin) - stdOffset;
#endif // USDST
#ifdef EUDST
dstBegin.tm_mday = 25;
dstBegin.tm_hour = 1;
dstBegin.tm_min = 0;
dstBegin.tm_sec = 0;
mktime(&dstBegin); // calculate tm_wday
dstBegin.tm_mday = dstBegin.tm_mday + ((7 - dstBegin.tm_wday) % 7);
// mktime(&dstBegin); // recalculate tm_wday
// strftime(buf, sizeof(buf), "%c", &dstBegin);
// DBG("DST Begins: " + String(buf) + " local");
time_t tdstBegin = mktime(&dstBegin);
#endif // EUDST
if(tdstBegin != -1 && (time(NULL) - tdstBegin >= 0) && isDST == false) { // STD -> DST
dstFlag = 1;
}
@ -103,7 +128,36 @@ void checkDST() {
dstFlag = 0;
}
}
else if(timeinfo.tm_mon == 9) {
#ifdef EUDST
struct tm dstEnd;
dstEnd.tm_year = timeinfo.tm_year;
dstEnd.tm_mon = 9;
dstEnd.tm_mday = 25;
dstEnd.tm_hour = 1;
dstEnd.tm_min = 0;
dstEnd.tm_sec = 0;
mktime(&dstEnd); // calculate tm_dow
dstEnd.tm_mday = dstEnd.tm_mday + ((7 - dstEnd.tm_wday) % 7);
// mktime(&dstEnd); // recalculate tm_dow
// strftime(buf, sizeof(buf), "%c", &dstEnd);
// DBG("DST Ends: " + String(buf) + " local");
time_t tdstEnd = mktime(&dstEnd);
if(tdstEnd != -1 && (time(NULL) - tdstEnd >= 0) && isDST == true) { // DST -> STD
dstFlag = 0;
}
else if(tdstEnd != -1 && (time(NULL) - tdstEnd < 0) && isDST == false) { // STD -> DST
dstFlag = 1;
}
#endif //EUDST
#ifdef USDST
if(isDST == false) {
dstFlag = 1;
}
#endif // USDST
}
else if(timeinfo.tm_mon == 10) {
#ifdef USDST
struct tm dstEnd;
dstEnd.tm_year = timeinfo.tm_year;
dstEnd.tm_mon = 10;
@ -123,11 +177,17 @@ void checkDST() {
else if(tdstEnd != -1 && (time(NULL) - tdstEnd < 0) && isDST == false) { // STD -> DST
dstFlag = 1;
}
#endif //USDST
#ifdef EUDST
if(isDST == true) {
dstFlag = 0;
}
#endif // EUDST
}
else if((timeinfo.tm_mon == 11 || timeinfo.tm_mon == 0 || timeinfo.tm_mon == 1) && isDST == true) {
dstFlag = 0;
}
else if(timeinfo.tm_mon >= 3 && timeinfo.tm_mon <= 9 && isDST == false) {
else if(timeinfo.tm_mon >= 3 && timeinfo.tm_mon <= 8 && isDST == false) {
dstFlag = 1;
}
if(dstFlag == 1) {
@ -138,7 +198,7 @@ void checkDST() {
isDST = false;
// Since we are potentially moving back an hour we need to prevent flip flopping back and forth
// 2AM -> 1AM, wait 70 minutes -> 2:10AM then start DST checks again.
lastDstCheck += ((65-timeinfo.tm_min) * 60); // skip checks until after the next hour
lastDstCheck += ((65-timeinfo.tm_min) * 60); // skip checks until after beginning of next hour
DBG("Time change from DST -> STD");
}
}
@ -147,10 +207,12 @@ void checkDST() {
// Sets the time and calculates time time difference, in seconds, of the time change
// Returns true if time is valid otherwise false
bool setTime(time_t previousTime) {
bool setTime(time_t currentTime) {
slewSecs = 0;
time_t previousTime = now;
if(previousTime != 0) {
if(currentTime != 0) {
now = currentTime;
slewSecs = now - previousTime;
DBG("Time adjust " + String(slewSecs) + " secs");
}
@ -168,7 +230,6 @@ bool setTime(time_t previousTime) {
// DO NOT CALL sendFDRS here. Will not work for some reason ?????????
if(validTime()) {
lastTimeSetEvent = millis();
printTime();
return true;
}
else {
@ -178,7 +239,6 @@ bool setTime(time_t previousTime) {
// Periodically updates the time "now" and time struct from the internal processor time clock
void updateTime() {
static time_t lastUpdate = 0;
if(millis() - lastUpdate > 500) {
time(&now);
localtime_r(&now, &timeinfo);

Loading…
Cancel
Save