mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-03 17:59:27 +02:00
Merge pull request #272 from dalathegreat/improvement/event-uptimestamp
Improvement/event uptimestamp
This commit is contained in:
commit
df17c49578
4 changed files with 25 additions and 8 deletions
|
@ -226,7 +226,6 @@ void core_loop(void* task_time_us) {
|
||||||
if (millis() - previousMillisUpdateVal >= intervalUpdateValues) // Every 5s normally
|
if (millis() - previousMillisUpdateVal >= intervalUpdateValues) // Every 5s normally
|
||||||
{
|
{
|
||||||
previousMillisUpdateVal = millis();
|
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_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.
|
update_values(); // Update values heading towards inverter. Prepare for sending on CAN, or write directly to Modbus.
|
||||||
if (DUMMY_EVENT_ENABLED) {
|
if (DUMMY_EVENT_ENABLED) {
|
||||||
|
|
|
@ -5,8 +5,14 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "../../../USER_SETTINGS.h"
|
#include "../../../USER_SETTINGS.h"
|
||||||
|
#include "../../lib/Uptime_Library/src/uptime.h"
|
||||||
#include "timer.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_NOF_EVENT_ENTRIES 30
|
||||||
#define EE_EVENT_ENTRY_SIZE sizeof(EVENT_LOG_ENTRY_TYPE)
|
#define EE_EVENT_ENTRY_SIZE sizeof(EVENT_LOG_ENTRY_TYPE)
|
||||||
#define EE_WRITE_PERIOD_MINUTES 10
|
#define EE_WRITE_PERIOD_MINUTES 10
|
||||||
|
@ -44,7 +50,7 @@ typedef struct {
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
EVENTS_STRUCT_TYPE entries[EVENT_NOF_EVENTS];
|
EVENTS_STRUCT_TYPE entries[EVENT_NOF_EVENTS];
|
||||||
uint32_t time_seconds;
|
unsigned long time_seconds;
|
||||||
MyTimer second_timer;
|
MyTimer second_timer;
|
||||||
MyTimer ee_timer;
|
MyTimer ee_timer;
|
||||||
MyTimer update_timer;
|
MyTimer update_timer;
|
||||||
|
@ -166,7 +172,7 @@ void init_events(void) {
|
||||||
|
|
||||||
events.entries[EVENT_EEPROM_WRITE].log = false; // Don't log the logger...
|
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)
|
// Write to EEPROM every X minutes (if an event has been set)
|
||||||
events.ee_timer.set_interval(EE_WRITE_PERIOD_MINUTES * 60 * 1000);
|
events.ee_timer.set_interval(EE_WRITE_PERIOD_MINUTES * 60 * 1000);
|
||||||
events.update_timer.set_interval(2000);
|
events.update_timer.set_interval(2000);
|
||||||
|
@ -356,11 +362,20 @@ static void update_event_level(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void update_event_time(void) {
|
static void update_event_time(void) {
|
||||||
|
// This should run roughly 2 times per second
|
||||||
if (events.second_timer.elapsed() == true) {
|
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::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) {
|
static void log_event(EVENTS_ENUM_TYPE event, uint8_t data) {
|
||||||
// Update head with wrap to 0
|
// Update head with wrap to 0
|
||||||
if (++events.event_log_head_index == EE_NOF_EVENT_ENTRIES) {
|
if (++events.event_log_head_index == EE_NOF_EVENT_ENTRIES) {
|
||||||
|
|
|
@ -99,6 +99,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_message_string(EVENTS_ENUM_TYPE event);
|
||||||
const char* get_event_level_string(EVENTS_ENUM_TYPE event);
|
const char* get_event_level_string(EVENTS_ENUM_TYPE event);
|
||||||
const char* get_event_type(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);
|
EVENTS_LEVEL_TYPE get_event_level(void);
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ const char EVENTS_HTML_END[] = R"=====(
|
||||||
</div></div>
|
</div></div>
|
||||||
<button onclick='home()'>Back to main page</button>
|
<button onclick='home()'>Back to main page</button>
|
||||||
<style>.event:nth-child(even){background-color:#455a64}.event:nth-child(odd){background-color:#394b52}</style>
|
<style>.event:nth-child(even){background-color:#455a64}.event:nth-child(odd){background-color:#394b52}</style>
|
||||||
<script>function showEvent(){document.querySelector(".event-log");var i=(new Date).getTime()/1e3;document.querySelectorAll(".event").forEach(function(e){var n=e.querySelector(".sec-ago"),t=e.querySelector(".timestamp");if(n&&t){var o=parseInt(n.innerText,10),a=parseFloat(t.innerText),r=new Date(1e3*(i-a+o)).toLocaleString();n.innerText=r}})}function home(){window.location.href="/"}window.onload=function(){showEvent()}</script>
|
<script>function showEvent(){document.querySelectorAll(".event").forEach(function(e){var n=e.querySelector(".sec-ago");n&&(n.innerText=new Date(new Date().getTime()-1e3*parseInt(n.innerText,10)).toLocaleString())})}function home(){window.location.href="/"}window.onload=function(){showEvent()}</script>
|
||||||
)=====";
|
)=====";
|
||||||
|
|
||||||
String events_processor(const String& var) {
|
String events_processor(const String& var) {
|
||||||
|
@ -19,6 +19,9 @@ String events_processor(const String& var) {
|
||||||
// Page format
|
// Page format
|
||||||
content.concat(FPSTR(EVENTS_HTML_START));
|
content.concat(FPSTR(EVENTS_HTML_START));
|
||||||
const EVENTS_STRUCT_TYPE* event_pointer;
|
const EVENTS_STRUCT_TYPE* event_pointer;
|
||||||
|
|
||||||
|
unsigned long timestamp_now = get_current_event_time_secs();
|
||||||
|
|
||||||
for (int i = 0; i < EVENT_NOF_EVENTS; i++) {
|
for (int i = 0; i < EVENT_NOF_EVENTS; i++) {
|
||||||
event_pointer = get_event_pointer((EVENTS_ENUM_TYPE)i);
|
event_pointer = get_event_pointer((EVENTS_ENUM_TYPE)i);
|
||||||
EVENTS_ENUM_TYPE event_handle = static_cast<EVENTS_ENUM_TYPE>(i);
|
EVENTS_ENUM_TYPE event_handle = static_cast<EVENTS_ENUM_TYPE>(i);
|
||||||
|
@ -32,11 +35,10 @@ String events_processor(const String& var) {
|
||||||
content.concat("<div class='event'>");
|
content.concat("<div class='event'>");
|
||||||
content.concat("<div>" + String(get_event_enum_string(event_handle)) + "</div>");
|
content.concat("<div>" + String(get_event_enum_string(event_handle)) + "</div>");
|
||||||
content.concat("<div>" + String(get_event_level_string(event_handle)) + "</div>");
|
content.concat("<div>" + String(get_event_level_string(event_handle)) + "</div>");
|
||||||
content.concat("<div class='sec-ago'>" + String(event_pointer->timestamp) + "</div>");
|
content.concat("<div class='sec-ago'>" + String(timestamp_now - event_pointer->timestamp) + "</div>");
|
||||||
content.concat("<div>" + String(event_pointer->occurences) + "</div>");
|
content.concat("<div>" + String(event_pointer->occurences) + "</div>");
|
||||||
content.concat("<div>" + String(event_pointer->data) + "</div>");
|
content.concat("<div>" + String(event_pointer->data) + "</div>");
|
||||||
content.concat("<div>" + String(get_event_message_string(event_handle)) + "</div>");
|
content.concat("<div>" + String(get_event_message_string(event_handle)) + "</div>");
|
||||||
content.concat("<div class='timestamp' style='display:none;'>" + String(millis() / 1000) + "</div>");
|
|
||||||
content.concat("</div>"); // End of event row
|
content.concat("</div>"); // End of event row
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue