From dc4aa951098032d01d5753687c620e24da265241 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20=C3=96ster?= Date: Sun, 31 Aug 2025 21:57:41 +0300 Subject: [PATCH] Remove broken NTP BMS reset functionality --- Software/Software.ino | 14 -- Software/USER_SETTINGS.cpp | 8 - Software/USER_SETTINGS.h | 2 - Software/src/devboard/utils/events.cpp | 7 - Software/src/devboard/utils/events.h | 204 +++++++++++------------ Software/src/devboard/utils/ntp_time.cpp | 64 ------- Software/src/devboard/utils/ntp_time.h | 12 -- 7 files changed, 101 insertions(+), 210 deletions(-) delete mode 100644 Software/src/devboard/utils/ntp_time.cpp delete mode 100644 Software/src/devboard/utils/ntp_time.h diff --git a/Software/Software.ino b/Software/Software.ino index 71cf186c..bfd3ceab 100644 --- a/Software/Software.ino +++ b/Software/Software.ino @@ -35,11 +35,6 @@ #error You must select a target hardware in the USER_SETTINGS.h file! #endif -#ifdef PERIODIC_BMS_RESET_AT -#include "src/devboard/utils/ntp_time.h" -#endif -volatile unsigned long long bmsResetTimeOffset = 0; - // The current software version, shown on webserver const char* version_number = "9.0.RC5experimental"; @@ -152,15 +147,6 @@ void setup() { xTaskCreatePinnedToCore((TaskFunction_t)&core_loop, "core_loop", 4096, NULL, TASK_CORE_PRIO, &main_loop_task, esp32hal->CORE_FUNCTION_CORE()); -#ifdef PERIODIC_BMS_RESET_AT - bmsResetTimeOffset = getTimeOffsetfromNowUntil(PERIODIC_BMS_RESET_AT); - if (bmsResetTimeOffset == 0) { - set_event(EVENT_PERIODIC_BMS_RESET_AT_INIT_FAILED, 0); - } else { - set_event(EVENT_PERIODIC_BMS_RESET_AT_INIT_SUCCESS, 0); - } -#endif - DEBUG_PRINTF("setup() complete\n"); } diff --git a/Software/USER_SETTINGS.cpp b/Software/USER_SETTINGS.cpp index edf41a9a..1bc74643 100644 --- a/Software/USER_SETTINGS.cpp +++ b/Software/USER_SETTINGS.cpp @@ -71,11 +71,3 @@ volatile float CHARGER_MIN_HV = 200; // Min permissible output (VDC) of cha volatile float CHARGER_MAX_POWER = 3300; // Max power capable of charger, as a ceiling for validating config volatile float CHARGER_MAX_A = 11.5; // Max current output (amps) of charger volatile float CHARGER_END_A = 1.0; // Current at which charging is considered complete - -#ifdef PERIODIC_BMS_RESET_AT -// A list of rules for your zone can be obtained from https://github.com/esp8266/Arduino/blob/master/cores/esp8266/TZ.h -const char* time_zone = - "GMT0BST,M3.5.0/1,M10.5.0"; // TimeZone rule for Europe/London including daylight adjustment rules (optional) -const char* ntpServer1 = "pool.ntp.org"; -const char* ntpServer2 = "time.nist.gov"; -#endif diff --git a/Software/USER_SETTINGS.h b/Software/USER_SETTINGS.h index 9a2a254d..bdef00da 100644 --- a/Software/USER_SETTINGS.h +++ b/Software/USER_SETTINGS.h @@ -90,8 +90,6 @@ //#define NC_CONTACTORS //Enable this line to control normally closed contactors. CONTACTOR_CONTROL must be enabled for this option. Extremely rare setting! //#define PERIODIC_BMS_RESET //Enable to have the emulator powercycle the connected battery every 24hours via GPIO. Useful for some batteries like Nissan LEAF //#define REMOTE_BMS_RESET //Enable to allow the emulator to remotely trigger a powercycle of the battery via MQTT. Useful for some batteries like Nissan LEAF -// PERIODIC_BMS_RESET_AT Uses NTP server, internet required. In 24 Hour format WITHOUT leading 0. e.g 0230 should be 230. Time Zone is set in USER_SETTINGS.cpp -//#define PERIODIC_BMS_RESET_AT 525 /* Shunt/Contactor settings (Optional) */ //#define BMW_SBOX // SBOX relay control & battery current/voltage measurement diff --git a/Software/src/devboard/utils/events.cpp b/Software/src/devboard/utils/events.cpp index 5085ff8a..19e877b3 100644 --- a/Software/src/devboard/utils/events.cpp +++ b/Software/src/devboard/utils/events.cpp @@ -125,8 +125,6 @@ void init_events(void) { events.entries[EVENT_EQUIPMENT_STOP].level = EVENT_LEVEL_ERROR; events.entries[EVENT_SD_INIT_FAILED].level = EVENT_LEVEL_WARNING; events.entries[EVENT_PERIODIC_BMS_RESET].level = EVENT_LEVEL_INFO; - events.entries[EVENT_PERIODIC_BMS_RESET_AT_INIT_SUCCESS].level = EVENT_LEVEL_INFO; - events.entries[EVENT_PERIODIC_BMS_RESET_AT_INIT_FAILED].level = EVENT_LEVEL_WARNING; events.entries[EVENT_BATTERY_TEMP_DEVIATION_HIGH].level = EVENT_LEVEL_WARNING; events.entries[EVENT_GPIO_CONFLICT].level = EVENT_LEVEL_ERROR; events.entries[EVENT_GPIO_NOT_DEFINED].level = EVENT_LEVEL_ERROR; @@ -365,11 +363,6 @@ String get_event_message_string(EVENTS_ENUM_TYPE event) { return "SD card initialization failed, check hardware. Power must be removed to reset the SD card."; case EVENT_PERIODIC_BMS_RESET: return "BMS Reset Event Completed."; - case EVENT_PERIODIC_BMS_RESET_AT_INIT_SUCCESS: - return "Successfully syncronised with the NTP Server. BMS will reset every 24 hours at defined time"; - case EVENT_PERIODIC_BMS_RESET_AT_INIT_FAILED: - return "Failed to syncronise with the NTP Server. BMS will reset every 24 hours from when the emulator was " - "powered on"; case EVENT_GPIO_CONFLICT: return "GPIO Pin Conflict: The pin used by '" + esp32hal->failed_allocator() + "' is already allocated by '" + esp32hal->conflicting_allocator() + "'. Please check your configuration and assign different pins."; diff --git a/Software/src/devboard/utils/events.h b/Software/src/devboard/utils/events.h index 6b90cf44..8f85b13b 100644 --- a/Software/src/devboard/utils/events.h +++ b/Software/src/devboard/utils/events.h @@ -9,109 +9,107 @@ #define GENERATE_ENUM(ENUM) ENUM, #define GENERATE_STRING(STRING) #STRING, -#define EVENTS_ENUM_TYPE(XX) \ - XX(EVENT_CANMCP2517FD_INIT_FAILURE) \ - XX(EVENT_CANMCP2515_INIT_FAILURE) \ - XX(EVENT_CANFD_BUFFER_FULL) \ - XX(EVENT_CAN_BUFFER_FULL) \ - XX(EVENT_CAN_CORRUPTED_WARNING) \ - XX(EVENT_CAN_BATTERY_MISSING) \ - XX(EVENT_CAN_BATTERY2_MISSING) \ - XX(EVENT_CAN_CHARGER_MISSING) \ - XX(EVENT_CAN_INVERTER_MISSING) \ - XX(EVENT_CAN_NATIVE_TX_FAILURE) \ - XX(EVENT_CHARGE_LIMIT_EXCEEDED) \ - XX(EVENT_CONTACTOR_WELDED) \ - XX(EVENT_CONTACTOR_OPEN) \ - XX(EVENT_CPU_OVERHEATING) \ - XX(EVENT_CPU_OVERHEATED) \ - XX(EVENT_DISCHARGE_LIMIT_EXCEEDED) \ - XX(EVENT_WATER_INGRESS) \ - XX(EVENT_12V_LOW) \ - XX(EVENT_SOC_PLAUSIBILITY_ERROR) \ - XX(EVENT_SOC_UNAVAILABLE) \ - XX(EVENT_STALE_VALUE) \ - XX(EVENT_KWH_PLAUSIBILITY_ERROR) \ - XX(EVENT_BALANCING_START) \ - XX(EVENT_BALANCING_END) \ - XX(EVENT_BATTERY_EMPTY) \ - XX(EVENT_BATTERY_FULL) \ - XX(EVENT_BATTERY_FUSE) \ - XX(EVENT_BATTERY_FROZEN) \ - XX(EVENT_BATTERY_CAUTION) \ - XX(EVENT_BATTERY_CHG_STOP_REQ) \ - XX(EVENT_BATTERY_DISCHG_STOP_REQ) \ - XX(EVENT_BATTERY_CHG_DISCHG_STOP_REQ) \ - XX(EVENT_BATTERY_OVERHEAT) \ - XX(EVENT_BATTERY_OVERVOLTAGE) \ - XX(EVENT_BATTERY_UNDERVOLTAGE) \ - XX(EVENT_BATTERY_VALUE_UNAVAILABLE) \ - XX(EVENT_BATTERY_ISOLATION) \ - XX(EVENT_BATTERY_REQUESTS_HEAT) \ - XX(EVENT_BATTERY_WARMED_UP) \ - XX(EVENT_VOLTAGE_DIFFERENCE) \ - XX(EVENT_SOH_DIFFERENCE) \ - XX(EVENT_SOH_LOW) \ - XX(EVENT_HVIL_FAILURE) \ - XX(EVENT_PRECHARGE_FAILURE) \ - XX(EVENT_INTERNAL_OPEN_FAULT) \ - XX(EVENT_INVERTER_OPEN_CONTACTOR) \ - XX(EVENT_INTERFACE_MISSING) \ - XX(EVENT_MODBUS_INVERTER_MISSING) \ - XX(EVENT_NO_ENABLE_DETECTED) \ - XX(EVENT_ERROR_OPEN_CONTACTOR) \ - XX(EVENT_CELL_CRITICAL_UNDER_VOLTAGE) \ - XX(EVENT_CELL_CRITICAL_OVER_VOLTAGE) \ - XX(EVENT_CELL_UNDER_VOLTAGE) \ - XX(EVENT_CELL_OVER_VOLTAGE) \ - XX(EVENT_CELL_DEVIATION_HIGH) \ - XX(EVENT_UNKNOWN_EVENT_SET) \ - XX(EVENT_OTA_UPDATE) \ - XX(EVENT_OTA_UPDATE_TIMEOUT) \ - XX(EVENT_DUMMY_INFO) \ - XX(EVENT_DUMMY_DEBUG) \ - XX(EVENT_DUMMY_WARNING) \ - XX(EVENT_DUMMY_ERROR) \ - XX(EVENT_PERSISTENT_SAVE_INFO) \ - XX(EVENT_SERIAL_RX_WARNING) \ - XX(EVENT_SERIAL_RX_FAILURE) \ - XX(EVENT_SERIAL_TX_FAILURE) \ - XX(EVENT_SERIAL_TRANSMITTER_FAILURE) \ - XX(EVENT_SMA_PAIRING) \ - XX(EVENT_TASK_OVERRUN) \ - XX(EVENT_RESET_UNKNOWN) \ - XX(EVENT_RESET_POWERON) \ - XX(EVENT_RESET_EXT) \ - XX(EVENT_RESET_SW) \ - XX(EVENT_RESET_PANIC) \ - XX(EVENT_RESET_INT_WDT) \ - XX(EVENT_RESET_TASK_WDT) \ - XX(EVENT_RESET_WDT) \ - XX(EVENT_RESET_DEEPSLEEP) \ - XX(EVENT_RESET_BROWNOUT) \ - XX(EVENT_RESET_SDIO) \ - XX(EVENT_RESET_USB) \ - XX(EVENT_RESET_JTAG) \ - XX(EVENT_RESET_EFUSE) \ - XX(EVENT_RESET_PWR_GLITCH) \ - XX(EVENT_RESET_CPU_LOCKUP) \ - XX(EVENT_RJXZS_LOG) \ - XX(EVENT_PAUSE_BEGIN) \ - XX(EVENT_PAUSE_END) \ - XX(EVENT_PID_FAILED) \ - XX(EVENT_WIFI_CONNECT) \ - XX(EVENT_WIFI_DISCONNECT) \ - XX(EVENT_MQTT_CONNECT) \ - XX(EVENT_MQTT_DISCONNECT) \ - XX(EVENT_EQUIPMENT_STOP) \ - XX(EVENT_AUTOMATIC_PRECHARGE_FAILURE) \ - XX(EVENT_SD_INIT_FAILED) \ - XX(EVENT_PERIODIC_BMS_RESET) \ - XX(EVENT_PERIODIC_BMS_RESET_AT_INIT_SUCCESS) \ - XX(EVENT_PERIODIC_BMS_RESET_AT_INIT_FAILED) \ - XX(EVENT_BATTERY_TEMP_DEVIATION_HIGH) \ - XX(EVENT_GPIO_NOT_DEFINED) \ - XX(EVENT_GPIO_CONFLICT) \ +#define EVENTS_ENUM_TYPE(XX) \ + XX(EVENT_CANMCP2517FD_INIT_FAILURE) \ + XX(EVENT_CANMCP2515_INIT_FAILURE) \ + XX(EVENT_CANFD_BUFFER_FULL) \ + XX(EVENT_CAN_BUFFER_FULL) \ + XX(EVENT_CAN_CORRUPTED_WARNING) \ + XX(EVENT_CAN_BATTERY_MISSING) \ + XX(EVENT_CAN_BATTERY2_MISSING) \ + XX(EVENT_CAN_CHARGER_MISSING) \ + XX(EVENT_CAN_INVERTER_MISSING) \ + XX(EVENT_CAN_NATIVE_TX_FAILURE) \ + XX(EVENT_CHARGE_LIMIT_EXCEEDED) \ + XX(EVENT_CONTACTOR_WELDED) \ + XX(EVENT_CONTACTOR_OPEN) \ + XX(EVENT_CPU_OVERHEATING) \ + XX(EVENT_CPU_OVERHEATED) \ + XX(EVENT_DISCHARGE_LIMIT_EXCEEDED) \ + XX(EVENT_WATER_INGRESS) \ + XX(EVENT_12V_LOW) \ + XX(EVENT_SOC_PLAUSIBILITY_ERROR) \ + XX(EVENT_SOC_UNAVAILABLE) \ + XX(EVENT_STALE_VALUE) \ + XX(EVENT_KWH_PLAUSIBILITY_ERROR) \ + XX(EVENT_BALANCING_START) \ + XX(EVENT_BALANCING_END) \ + XX(EVENT_BATTERY_EMPTY) \ + XX(EVENT_BATTERY_FULL) \ + XX(EVENT_BATTERY_FUSE) \ + XX(EVENT_BATTERY_FROZEN) \ + XX(EVENT_BATTERY_CAUTION) \ + XX(EVENT_BATTERY_CHG_STOP_REQ) \ + XX(EVENT_BATTERY_DISCHG_STOP_REQ) \ + XX(EVENT_BATTERY_CHG_DISCHG_STOP_REQ) \ + XX(EVENT_BATTERY_OVERHEAT) \ + XX(EVENT_BATTERY_OVERVOLTAGE) \ + XX(EVENT_BATTERY_UNDERVOLTAGE) \ + XX(EVENT_BATTERY_VALUE_UNAVAILABLE) \ + XX(EVENT_BATTERY_ISOLATION) \ + XX(EVENT_BATTERY_REQUESTS_HEAT) \ + XX(EVENT_BATTERY_WARMED_UP) \ + XX(EVENT_VOLTAGE_DIFFERENCE) \ + XX(EVENT_SOH_DIFFERENCE) \ + XX(EVENT_SOH_LOW) \ + XX(EVENT_HVIL_FAILURE) \ + XX(EVENT_PRECHARGE_FAILURE) \ + XX(EVENT_INTERNAL_OPEN_FAULT) \ + XX(EVENT_INVERTER_OPEN_CONTACTOR) \ + XX(EVENT_INTERFACE_MISSING) \ + XX(EVENT_MODBUS_INVERTER_MISSING) \ + XX(EVENT_NO_ENABLE_DETECTED) \ + XX(EVENT_ERROR_OPEN_CONTACTOR) \ + XX(EVENT_CELL_CRITICAL_UNDER_VOLTAGE) \ + XX(EVENT_CELL_CRITICAL_OVER_VOLTAGE) \ + XX(EVENT_CELL_UNDER_VOLTAGE) \ + XX(EVENT_CELL_OVER_VOLTAGE) \ + XX(EVENT_CELL_DEVIATION_HIGH) \ + XX(EVENT_UNKNOWN_EVENT_SET) \ + XX(EVENT_OTA_UPDATE) \ + XX(EVENT_OTA_UPDATE_TIMEOUT) \ + XX(EVENT_DUMMY_INFO) \ + XX(EVENT_DUMMY_DEBUG) \ + XX(EVENT_DUMMY_WARNING) \ + XX(EVENT_DUMMY_ERROR) \ + XX(EVENT_PERSISTENT_SAVE_INFO) \ + XX(EVENT_SERIAL_RX_WARNING) \ + XX(EVENT_SERIAL_RX_FAILURE) \ + XX(EVENT_SERIAL_TX_FAILURE) \ + XX(EVENT_SERIAL_TRANSMITTER_FAILURE) \ + XX(EVENT_SMA_PAIRING) \ + XX(EVENT_TASK_OVERRUN) \ + XX(EVENT_RESET_UNKNOWN) \ + XX(EVENT_RESET_POWERON) \ + XX(EVENT_RESET_EXT) \ + XX(EVENT_RESET_SW) \ + XX(EVENT_RESET_PANIC) \ + XX(EVENT_RESET_INT_WDT) \ + XX(EVENT_RESET_TASK_WDT) \ + XX(EVENT_RESET_WDT) \ + XX(EVENT_RESET_DEEPSLEEP) \ + XX(EVENT_RESET_BROWNOUT) \ + XX(EVENT_RESET_SDIO) \ + XX(EVENT_RESET_USB) \ + XX(EVENT_RESET_JTAG) \ + XX(EVENT_RESET_EFUSE) \ + XX(EVENT_RESET_PWR_GLITCH) \ + XX(EVENT_RESET_CPU_LOCKUP) \ + XX(EVENT_RJXZS_LOG) \ + XX(EVENT_PAUSE_BEGIN) \ + XX(EVENT_PAUSE_END) \ + XX(EVENT_PID_FAILED) \ + XX(EVENT_WIFI_CONNECT) \ + XX(EVENT_WIFI_DISCONNECT) \ + XX(EVENT_MQTT_CONNECT) \ + XX(EVENT_MQTT_DISCONNECT) \ + XX(EVENT_EQUIPMENT_STOP) \ + XX(EVENT_AUTOMATIC_PRECHARGE_FAILURE) \ + XX(EVENT_SD_INIT_FAILED) \ + XX(EVENT_PERIODIC_BMS_RESET) \ + XX(EVENT_BATTERY_TEMP_DEVIATION_HIGH) \ + XX(EVENT_GPIO_NOT_DEFINED) \ + XX(EVENT_GPIO_CONFLICT) \ XX(EVENT_NOF_EVENTS) typedef enum { EVENTS_ENUM_TYPE(GENERATE_ENUM) } EVENTS_ENUM_TYPE; diff --git a/Software/src/devboard/utils/ntp_time.cpp b/Software/src/devboard/utils/ntp_time.cpp deleted file mode 100644 index 5221a36a..00000000 --- a/Software/src/devboard/utils/ntp_time.cpp +++ /dev/null @@ -1,64 +0,0 @@ -#include "ntp_time.h" -#include -#include "../../devboard/utils/logging.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; - } - 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(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(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; -} diff --git a/Software/src/devboard/utils/ntp_time.h b/Software/src/devboard/utils/ntp_time.h deleted file mode 100644 index d4946104..00000000 --- a/Software/src/devboard/utils/ntp_time.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef __NTPTIME_H__ -#define __NTPTIME_H__ - -extern const char* ntpServer1; -extern const char* ntpServer2; -extern const char* time_zone; - -unsigned long long getNtpTimeInMillis(); -unsigned long long millisToNextTargetTime(unsigned long long currentMillis, int targetTime); -unsigned long long getTimeOffsetfromNowUntil(int targetTime); - -#endif