Ver código fonte

TimerManager interval calculation bug fixed

!!!RELEASE CANDITATE!!!
master
gituser 3 semanas atrás
pai
commit
bb3dd20d7f
4 arquivos alterados com 33 adições e 24 exclusões
  1. 14
    13
      LEDLamp.ino
  2. 17
    10
      TimerManager.cpp
  3. 1
    0
      TimerManager.h
  4. 1
    1
      sloeber.ino.cpp

+ 14
- 13
LEDLamp.ino Ver arquivo

return; return;
} }


// uint32_t now = millis();
// if (now - lastNtpCheck >= 5000) {
// lastNtpCheck = now;
// if (timerManager.isNowInTimeInterval()) {
// if (ledMngr.isOn()) {
// ledMngr.off();
// }
// } else {
// if (!ledMngr.isOn()) {
// ledMngr.on();
// }
// }
// }
uint32_t now = millis();
if (now - lastNtpCheck >= 5000) {
lastNtpCheck = now;
if (timerManager.isNowInTimeInterval()) {
if (ledMngr.isOn()) {
ledMngr.off();
}
} else {
if (!ledMngr.isOn()) {
ledMngr.on();
}
}
}


driveLEDStrip(); driveLEDStrip();
} }


configManager.loadConfig(); configManager.loadConfig();
ledMngr.begin(); ledMngr.begin();
timerManager.begin();


setState(STATE_BOOT); setState(STATE_BOOT);
connectStart = millis(); connectStart = millis();

+ 17
- 10
TimerManager.cpp Ver arquivo



WiFiUDP ntpUDP; WiFiUDP ntpUDP;


// Set up your base timezone offset in seconds (e.g., UTC+2 for Baar, Switzerland is 3600)
// Set up your base timezone offset in seconds (e.g., UTC+1 for Baar, Switzerland is 3600)
const long gmtOffset_sec = 3600; const long gmtOffset_sec = 3600;


// Set up DST offset in seconds (1 hour = 3600 seconds) // Set up DST offset in seconds (1 hour = 3600 seconds)
const long daylightOffset_sec = 3600; const long daylightOffset_sec = 3600;


TimerManager::TimerManager(ConfigManager &configManager) TimerManager::TimerManager(ConfigManager &configManager)
: configManager(configManager), ntpClient(ntpUDP, "pool.ntp.org", 3600) {
ntpClient.begin();
: configManager(configManager), ntpClient(ntpUDP, "pool.ntp.org", gmtOffset_sec) {
} }


TimerManager::~TimerManager() { TimerManager::~TimerManager() {
} }


void TimerManager::begin() {
ntpClient.begin();
}

void TimerManager::onTimerIntervalChange(String timerIntervalName, const char *timerInterval) { void TimerManager::onTimerIntervalChange(String timerIntervalName, const char *timerInterval) {
TimeInterval interval; TimeInterval interval;
parseTimeInterval(timerInterval, interval); parseTimeInterval(timerInterval, interval);


Config cfg = configManager.getConfig(); Config cfg = configManager.getConfig();
ntpClient.update(); ntpClient.update();
uint32_t epochTime = ntpClient.getEpochTime();
time_t localTime = epochTime + gmtOffset_sec;
if (isDST(month(localTime), day(localTime), weekday(localTime))) {
time_t localEpochTime = ntpClient.getEpochTime() + gmtOffset_sec;
time_t localTime = ntpClient.getHours() * 3600 + ntpClient.getMinutes() * 60 + ntpClient.getSeconds();
bool isDst = isDST(month(localEpochTime), day(localEpochTime), weekday(localEpochTime));
if (isDst) {
localTime += daylightOffset_sec; localTime += daylightOffset_sec;
} }


Serial.print("isDST: ");
Serial.println(isDst ? "true" : "false");
Serial.println(ntpClient.getFormattedTime());
Serial.print("localTime: "); Serial.print("localTime: ");
Serial.println(secondsToFormatedTime(localTime)); Serial.println(secondsToFormatedTime(localTime));


} }


String TimerManager::secondsToFormatedTime(uint32_t seconds) { String TimerManager::secondsToFormatedTime(uint32_t seconds) {

uint8_t hour = seconds / 3600; uint8_t hour = seconds / 3600;
uint8_t _seconds = seconds % 3600;
seconds %= 3600;


uint8_t minute = _seconds / 60;
uint8_t second = _seconds % 60;
uint8_t minute = seconds / 60;
uint8_t second = seconds % 60;


char buffer[9]; // "HH:mm:ss" + '\0' char buffer[9]; // "HH:mm:ss" + '\0'
snprintf(buffer, sizeof(buffer), "%02u:%02u:%02u", snprintf(buffer, sizeof(buffer), "%02u:%02u:%02u",

+ 1
- 0
TimerManager.h Ver arquivo

TimerManager(ConfigManager &configManager); TimerManager(ConfigManager &configManager);
virtual ~TimerManager(); virtual ~TimerManager();


void begin();
void onTimerIntervalChange(String timerIntervalName, const char *timerInterval); void onTimerIntervalChange(String timerIntervalName, const char *timerInterval);
void saveTimerInterval(String timerIntervalName, uint32_t start, uint32_t end); void saveTimerInterval(String timerIntervalName, uint32_t start, uint32_t end);
bool isNowInTimeInterval(); bool isNowInTimeInterval();

+ 1
- 1
sloeber.ino.cpp Ver arquivo

//This is a automatic generated file //This is a automatic generated file
//Please do not modify this file //Please do not modify this file
//If you touch this file your change will be overwritten during the next build //If you touch this file your change will be overwritten during the next build
//This file has been generated on 2026-07-14 11:10:18
//This file has been generated on 2026-07-14 11:48:58


#include "Arduino.h" #include "Arduino.h"
#include "Arduino.h" #include "Arduino.h"

Carregando…
Cancelar
Salvar