Fix: Day period is only calculated once

This commit is contained in:
Thomas Basler 2023-11-16 18:03:25 +01:00
parent 527c2eaf4a
commit 6f685a4ab5
2 changed files with 8 additions and 6 deletions

View File

@ -22,7 +22,6 @@ private:
bool getDoRecalc(); bool getDoRecalc();
SunSet _sun; SunSet _sun;
bool _isDayPeriod = true;
bool _isSunsetAvailable = true; bool _isSunsetAvailable = true;
uint32_t _sunriseMinutes = 0; uint32_t _sunriseMinutes = 0;
uint32_t _sunsetMinutes = 0; uint32_t _sunsetMinutes = 0;

View File

@ -26,7 +26,14 @@ void SunPositionClass::loop()
bool SunPositionClass::isDayPeriod() bool SunPositionClass::isDayPeriod()
{ {
return _isDayPeriod; if (!_isValidInfo) {
return true;
}
struct tm timeinfo;
getLocalTime(&timeinfo, 5);
uint32_t minutesPastMidnight = timeinfo.tm_hour * 60 + timeinfo.tm_min;
return (minutesPastMidnight >= _sunriseMinutes) && (minutesPastMidnight < _sunsetMinutes);
} }
bool SunPositionClass::isSunsetAvailable() bool SunPositionClass::isSunsetAvailable()
@ -73,7 +80,6 @@ void SunPositionClass::updateSunData()
setDoRecalc(false); setDoRecalc(false);
if (!gotLocalTime) { if (!gotLocalTime) {
_isDayPeriod = true;
_sunriseMinutes = 0; _sunriseMinutes = 0;
_sunsetMinutes = 0; _sunsetMinutes = 0;
_isValidInfo = false; _isValidInfo = false;
@ -108,7 +114,6 @@ void SunPositionClass::updateSunData()
// If no sunset/sunrise exists (e.g. astronomical calculation in summer) // If no sunset/sunrise exists (e.g. astronomical calculation in summer)
// assume it's day period // assume it's day period
if (std::isnan(sunriseRaw) || std::isnan(sunsetRaw)) { if (std::isnan(sunriseRaw) || std::isnan(sunsetRaw)) {
_isDayPeriod = true;
_isSunsetAvailable = false; _isSunsetAvailable = false;
_sunriseMinutes = 0; _sunriseMinutes = 0;
_sunsetMinutes = 0; _sunsetMinutes = 0;
@ -118,9 +123,7 @@ void SunPositionClass::updateSunData()
_sunriseMinutes = static_cast<int>(sunriseRaw); _sunriseMinutes = static_cast<int>(sunriseRaw);
_sunsetMinutes = static_cast<int>(sunsetRaw); _sunsetMinutes = static_cast<int>(sunsetRaw);
uint32_t minutesPastMidnight = timeinfo.tm_hour * 60 + timeinfo.tm_min;
_isDayPeriod = (minutesPastMidnight >= _sunriseMinutes) && (minutesPastMidnight < _sunsetMinutes);
_isSunsetAvailable = true; _isSunsetAvailable = true;
_isValidInfo = true; _isValidInfo = true;
} }