From 69439639073224a1bc1884b94a357dd76ffe3972 Mon Sep 17 00:00:00 2001 From: Cabooman <81711263+Cabooman@users.noreply.github.com> Date: Fri, 26 Apr 2024 21:48:13 +0200 Subject: [PATCH 1/3] Move uptime update, use uptime for event timestamp --- Software/Software.ino | 1 - Software/src/devboard/utils/events.cpp | 7 +++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Software/Software.ino b/Software/Software.ino index 76d1780e..3f999981 100644 --- a/Software/Software.ino +++ b/Software/Software.ino @@ -226,7 +226,6 @@ void core_loop(void* task_time_us) { if (millis() - previousMillisUpdateVal >= intervalUpdateValues) // Every 5s normally { previousMillisUpdateVal = millis(); - uptime::calculateUptime(); // millis() overflows every 50 days, so update occasionally to adjust update_SOC(); // Check if real or calculated SOC% value should be sent update_values(); // Update values heading towards inverter. Prepare for sending on CAN, or write directly to Modbus. if (DUMMY_EVENT_ENABLED) { diff --git a/Software/src/devboard/utils/events.cpp b/Software/src/devboard/utils/events.cpp index 72556a61..a86ec8f8 100644 --- a/Software/src/devboard/utils/events.cpp +++ b/Software/src/devboard/utils/events.cpp @@ -6,6 +6,7 @@ #include "../../../USER_SETTINGS.h" #include "timer.h" +#include "../../lib/Uptime_Library/src/uptime.h" #define EE_NOF_EVENT_ENTRIES 30 #define EE_EVENT_ENTRY_SIZE sizeof(EVENT_LOG_ENTRY_TYPE) @@ -165,7 +166,7 @@ void init_events(void) { events.entries[EVENT_EEPROM_WRITE].log = false; // Don't log the logger... - events.second_timer.set_interval(1000); + events.second_timer.set_interval(600); // Write to EEPROM every X minutes (if an event has been set) events.ee_timer.set_interval(EE_WRITE_PERIOD_MINUTES * 60 * 1000); events.update_timer.set_interval(2000); @@ -352,8 +353,10 @@ static void update_event_level(void) { } static void update_event_time(void) { + // This should run roughly 2 times per second if (events.second_timer.elapsed() == true) { - events.time_seconds++; + uptime::calculateUptime(); // millis() overflows every 50 days, so update occasionally to adjust + events.time_seconds = uptime::getSeconds(); } } From cee1e11bfffac9dcf31834d14703e917aef9025d Mon Sep 17 00:00:00 2001 From: Cabooman <81711263+Cabooman@users.noreply.github.com> Date: Fri, 26 Apr 2024 21:53:16 +0200 Subject: [PATCH 2/3] Pre-commit --- Software/Software.ino | 2 +- Software/src/devboard/utils/events.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Software/Software.ino b/Software/Software.ino index 3f999981..edb3e8a1 100644 --- a/Software/Software.ino +++ b/Software/Software.ino @@ -226,7 +226,7 @@ void core_loop(void* task_time_us) { if (millis() - previousMillisUpdateVal >= intervalUpdateValues) // Every 5s normally { previousMillisUpdateVal = millis(); - update_SOC(); // Check if real or calculated SOC% value should be sent + update_SOC(); // Check if real or calculated SOC% value should be sent update_values(); // Update values heading towards inverter. Prepare for sending on CAN, or write directly to Modbus. if (DUMMY_EVENT_ENABLED) { set_event(EVENT_DUMMY_ERROR, (uint8_t)millis()); diff --git a/Software/src/devboard/utils/events.cpp b/Software/src/devboard/utils/events.cpp index a86ec8f8..d49ba030 100644 --- a/Software/src/devboard/utils/events.cpp +++ b/Software/src/devboard/utils/events.cpp @@ -5,8 +5,8 @@ #endif #include "../../../USER_SETTINGS.h" -#include "timer.h" #include "../../lib/Uptime_Library/src/uptime.h" +#include "timer.h" #define EE_NOF_EVENT_ENTRIES 30 #define EE_EVENT_ENTRY_SIZE sizeof(EVENT_LOG_ENTRY_TYPE) From 7d11a7d4ed0522f8bb9884f1ba9269642076d814 Mon Sep 17 00:00:00 2001 From: Cabooman <81711263+Cabooman@users.noreply.github.com> Date: Fri, 26 Apr 2024 23:07:33 +0200 Subject: [PATCH 3/3] Getting comfy with uptime, new event timestamp done and tested --- Software/src/devboard/utils/events.cpp | 16 ++++++++++++++-- Software/src/devboard/utils/events.h | 1 + Software/src/devboard/webserver/events_html.cpp | 8 +++++--- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/Software/src/devboard/utils/events.cpp b/Software/src/devboard/utils/events.cpp index d49ba030..6b07fca7 100644 --- a/Software/src/devboard/utils/events.cpp +++ b/Software/src/devboard/utils/events.cpp @@ -8,6 +8,11 @@ #include "../../lib/Uptime_Library/src/uptime.h" #include "timer.h" +// Time conversion macros +#define DAYS_TO_SECS 86400 // 24 * 60 * 60 +#define HOURS_TO_SECS 3600 // 60 * 60 +#define MINUTES_TO_SECS 60 + #define EE_NOF_EVENT_ENTRIES 30 #define EE_EVENT_ENTRY_SIZE sizeof(EVENT_LOG_ENTRY_TYPE) #define EE_WRITE_PERIOD_MINUTES 10 @@ -45,7 +50,7 @@ typedef struct { typedef struct { EVENTS_STRUCT_TYPE entries[EVENT_NOF_EVENTS]; - uint32_t time_seconds; + unsigned long time_seconds; MyTimer second_timer; MyTimer ee_timer; MyTimer update_timer; @@ -356,10 +361,17 @@ static void update_event_time(void) { // This should run roughly 2 times per second if (events.second_timer.elapsed() == true) { uptime::calculateUptime(); // millis() overflows every 50 days, so update occasionally to adjust - events.time_seconds = uptime::getSeconds(); + events.time_seconds = uptime::getDays() * DAYS_TO_SECS; + events.time_seconds += uptime::getHours() * HOURS_TO_SECS; + events.time_seconds += uptime::getMinutes() * MINUTES_TO_SECS; + events.time_seconds += uptime::getSeconds(); } } +unsigned long get_current_event_time_secs(void) { + return events.time_seconds; +} + static void log_event(EVENTS_ENUM_TYPE event, uint8_t data) { // Update head with wrap to 0 if (++events.event_log_head_index == EE_NOF_EVENT_ENTRIES) { diff --git a/Software/src/devboard/utils/events.h b/Software/src/devboard/utils/events.h index 638f3b5e..5262acc2 100644 --- a/Software/src/devboard/utils/events.h +++ b/Software/src/devboard/utils/events.h @@ -98,6 +98,7 @@ const char* get_event_enum_string(EVENTS_ENUM_TYPE event); const char* get_event_message_string(EVENTS_ENUM_TYPE event); const char* get_event_level_string(EVENTS_ENUM_TYPE event); const char* get_event_type(EVENTS_ENUM_TYPE event); +unsigned long get_current_event_time_secs(void); EVENTS_LEVEL_TYPE get_event_level(void); diff --git a/Software/src/devboard/webserver/events_html.cpp b/Software/src/devboard/webserver/events_html.cpp index ad3b045d..fc3ebdf1 100644 --- a/Software/src/devboard/webserver/events_html.cpp +++ b/Software/src/devboard/webserver/events_html.cpp @@ -9,7 +9,7 @@ const char EVENTS_HTML_END[] = R"=====( - + )====="; String events_processor(const String& var) { @@ -19,6 +19,9 @@ String events_processor(const String& var) { // Page format content.concat(FPSTR(EVENTS_HTML_START)); const EVENTS_STRUCT_TYPE* event_pointer; + + unsigned long timestamp_now = get_current_event_time_secs(); + for (int i = 0; i < EVENT_NOF_EVENTS; i++) { event_pointer = get_event_pointer((EVENTS_ENUM_TYPE)i); EVENTS_ENUM_TYPE event_handle = static_cast(i); @@ -32,11 +35,10 @@ String events_processor(const String& var) { content.concat("
"); content.concat("
" + String(get_event_enum_string(event_handle)) + "
"); content.concat("
" + String(get_event_level_string(event_handle)) + "
"); - content.concat("
" + String(event_pointer->timestamp) + "
"); + content.concat("
" + String(timestamp_now - event_pointer->timestamp) + "
"); content.concat("
" + String(event_pointer->occurences) + "
"); content.concat("
" + String(event_pointer->data) + "
"); content.concat("
" + String(get_event_message_string(event_handle)) + "
"); - content.concat(""); content.concat("
"); // End of event row } }