Improved performance

This commit is contained in:
CommanderRedYT
2022-04-01 15:41:18 +02:00
parent f236d4bf03
commit 886a5f32e5
6 changed files with 44 additions and 20 deletions

View File

@ -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);
}
};

View File

@ -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

View File

@ -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;

View File

@ -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);
}

View File

@ -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());
}

View File

@ -11,3 +11,4 @@ void initTime();
void updateTime();
void time_set_now(espchrono::utc_clock::time_point now);
void calculate_sun();