Improved performance
This commit is contained in:
@ -59,18 +59,11 @@ class SuntimeText : public virtual espgui::TextInterface
|
||||
public:
|
||||
std::string text() const override
|
||||
{
|
||||
SunSet sunSet;
|
||||
sunSet.setPosition(47.076668, 15.421371, 2); // Vienna
|
||||
sunSet.setTZOffset(2);
|
||||
const auto today = toDateTime(espchrono::utc_clock::now());
|
||||
sunSet.setCurrentDate(static_cast<int>(today.date.year()), static_cast<uint>(today.date.month()), static_cast<uint>(today.date.day()));
|
||||
const auto sunrise = static_cast<int>(sunSet.calcSunrise());
|
||||
const auto sunset = static_cast<int>(sunSet.calcSunset());
|
||||
const int sunriseHour = sunrise / 60;
|
||||
const int sunriseMinute = sunrise % 60;
|
||||
const int sunsetHour = sunset / 60;
|
||||
const int sunsetMinute = sunset % 60;
|
||||
return fmt::format("sunrise: {}:{:02d} sunset: {}:{:02d}", sunriseHour, sunriseMinute, sunsetHour, sunsetMinute);
|
||||
if (!sunrise && !sunset)
|
||||
{
|
||||
return "no sunrise/sunset";
|
||||
}
|
||||
return fmt::format("sunrise: {:02d}:{:02d} sunset: {:02d}:{:02d}", *sunrise / 60, *sunrise % 60, *sunset / 60, *sunset % 60);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -17,6 +17,10 @@ float avgSpeedKmh{};
|
||||
float sumCurrent{};
|
||||
bool isLocked{};
|
||||
|
||||
std::optional<int> sunrise;
|
||||
std::optional<int> sunset;
|
||||
std::optional<espchrono::DateTime> sunrise_dt;
|
||||
|
||||
#ifdef GLOBALS_SOURCE
|
||||
GLOBALS_SOURCE
|
||||
#endif
|
||||
|
@ -39,6 +39,10 @@ extern float gametrakY;
|
||||
extern float gametrakDist;
|
||||
#endif
|
||||
|
||||
extern std::optional<int> sunrise;
|
||||
extern std::optional<int> sunset;
|
||||
extern std::optional<espchrono::DateTime> sunrise_dt;
|
||||
|
||||
extern float avgSpeed;
|
||||
extern float avgSpeedKmh;
|
||||
extern float sumCurrent;
|
||||
|
@ -3,13 +3,13 @@
|
||||
// 3rdparty lib includes
|
||||
#include <cpputils.h>
|
||||
#include <espchrono.h>
|
||||
#include <sunset.h>
|
||||
|
||||
// local includes
|
||||
#include "globals.h"
|
||||
#include "ledstripdefines.h"
|
||||
#include "newsettings.h"
|
||||
#include "ota.h"
|
||||
#include "time_bobbycar.h"
|
||||
#include "utils.h"
|
||||
|
||||
using namespace std::chrono_literals;
|
||||
@ -359,14 +359,20 @@ void showCustomColor()
|
||||
|
||||
[[nodiscard]] bool activateAutomaticFrontLight()
|
||||
{
|
||||
using namespace std::chrono_literals;
|
||||
if (!configs.ledstrip.automaticLight.value)
|
||||
return false;
|
||||
SunSet sunSet;
|
||||
sunSet.setPosition(47.076668, 15.421371, 0); // Vienna
|
||||
sunSet.setTZOffset(0);
|
||||
const auto today = toDateTime(espchrono::utc_clock::now());
|
||||
sunSet.setCurrentDate(static_cast<int>(today.date.year()), static_cast<uint>(today.date.month()), static_cast<uint>(today.date.day()));
|
||||
const auto sunrise = static_cast<int>(sunSet.calcSunrise()) / 60;
|
||||
const auto sunset = static_cast<int>(sunSet.calcSunset()) / 60;
|
||||
return (today.hour >= sunrise && today.hour < sunset);
|
||||
|
||||
if (static_cast<int>(today.date.year()) < 2000)
|
||||
return false;
|
||||
|
||||
if (!sunrise_dt || (*sunrise_dt).date.day() != today.date.day())
|
||||
{
|
||||
sunrise_dt = today;
|
||||
calculate_sun();
|
||||
}
|
||||
|
||||
const int currentTimeInMinutes = today.hour * 60 + today.minute;
|
||||
return (currentTimeInMinutes <= sunrise || currentTimeInMinutes >= sunset);
|
||||
}
|
||||
|
@ -7,8 +7,11 @@
|
||||
|
||||
// 3rdparty lib includes
|
||||
#include <espstrutils.h>
|
||||
#include <espchrono.h>
|
||||
#include <sunset.h>
|
||||
|
||||
// local includes
|
||||
#include "globals.h"
|
||||
#include "newsettings.h"
|
||||
|
||||
espchrono::time_zone get_default_timezone() noexcept
|
||||
@ -124,3 +127,16 @@ void time_set_now(espchrono::utc_clock::time_point now)
|
||||
};
|
||||
settimeofday(&ts, &tz);
|
||||
}
|
||||
|
||||
void calculate_sun()
|
||||
{
|
||||
if (!sunrise_dt)
|
||||
return;
|
||||
|
||||
SunSet sunSet;
|
||||
sunSet.setPosition(47.076668, 15.421371, 0); // Vienna
|
||||
sunSet.setTZOffset(0);
|
||||
sunSet.setCurrentDate(static_cast<int>((*sunrise_dt).date.year()), static_cast<uint>((*sunrise_dt).date.month()), static_cast<uint>((*sunrise_dt).date.day()));
|
||||
sunrise = static_cast<int>(sunSet.calcSunrise());
|
||||
sunset = static_cast<int>(sunSet.calcSunset());
|
||||
}
|
||||
|
@ -11,3 +11,4 @@ void initTime();
|
||||
void updateTime();
|
||||
|
||||
void time_set_now(espchrono::utc_clock::time_point now);
|
||||
void calculate_sun();
|
||||
|
Reference in New Issue
Block a user