Fix: Day period is only calculated once
This commit is contained in:
parent
527c2eaf4a
commit
6f685a4ab5
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user