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