Merge PR #4: Fix calculation of sample start for months and years

fix-occational-samples-reset
Jenkins nymea 2022-03-27 19:51:48 +02:00
commit 7debf18535
2 changed files with 16 additions and 4 deletions

View File

@ -377,8 +377,9 @@ void EnergyLogger::sample()
}
foreach (SampleRate sampleRate, m_configs.keys()) {
if (now >= m_nextSamples.value(sampleRate)) {
uint maxSamples = m_configs.value(sampleRate).maxSamples;
QDateTime sampleTime = m_nextSamples.value(sampleRate);
QDateTime oldestTimestamp = sampleTime.addMSecs(-(qint64)m_configs.value(sampleRate).maxSamples * sampleRate * 60 * 1000);
QDateTime oldestTimestamp = calculateSampleStart(sampleTime, sampleRate, maxSamples);
trimPowerBalance(sampleRate, oldestTimestamp);
foreach (const ThingId &thingId, m_thingsPowerLiveLogs.keys()) {
trimThingPower(thingId, sampleRate, oldestTimestamp);
@ -548,6 +549,16 @@ void EnergyLogger::scheduleNextSample(SampleRate sampleRate)
qCDebug(dcEnergyExperience()) << "Next sample for" << sampleRate << "scheduled at" << next.toString();
}
QDateTime EnergyLogger::calculateSampleStart(const QDateTime &sampleEnd, SampleRate sampleRate, int sampleCount)
{
if (sampleRate == SampleRate1Month) {
return sampleEnd.addMonths(-sampleCount);
} else if (sampleRate == SampleRate1Year) {
return sampleEnd.addYears(-sampleCount);
}
return sampleEnd.addMSecs(-(quint64)sampleCount * sampleRate * 60 * 1000);
}
void EnergyLogger::rectifySamples(SampleRate sampleRate, SampleRate baseSampleRate)
{
// Normally we'd need to find the newest available sample of a series and catch up from there.
@ -640,7 +651,7 @@ QDateTime EnergyLogger::nextSampleTimestamp(SampleRate sampleRate, const QDateTi
bool EnergyLogger::samplePowerBalance(SampleRate sampleRate, SampleRate baseSampleRate, const QDateTime &sampleEnd)
{
QDateTime sampleStart = sampleEnd.addMSecs(-sampleRate * 60 * 1000);
QDateTime sampleStart = calculateSampleStart(sampleEnd, sampleRate);
qCDebug(dcEnergyExperience()) << "Sampling power balance" << sampleRate << "from" << sampleStart << "to" << sampleEnd;
@ -746,7 +757,7 @@ bool EnergyLogger::sampleThingsPower(SampleRate sampleRate, SampleRate baseSampl
bool EnergyLogger::sampleThingPower(const ThingId &thingId, SampleRate sampleRate, SampleRate baseSampleRate, const QDateTime &sampleEnd)
{
QDateTime sampleStart = sampleEnd.addMSecs(-sampleRate * 60 * 1000);
QDateTime sampleStart = calculateSampleStart(sampleEnd, sampleRate);
qCDebug(dcEnergyExperience()) << "Sampling thing power for" << thingId.toString() << sampleRate << "from" << sampleStart.toString() << "to" << sampleEnd.toString();

View File

@ -49,6 +49,7 @@ private:
QDateTime nextSampleTimestamp(SampleRate sampleRate, const QDateTime &dateTime);
void scheduleNextSample(SampleRate sampleRate);
QDateTime calculateSampleStart(const QDateTime &sampleEnd, SampleRate sampleRate, int sampleCount = 1);
void rectifySamples(SampleRate sampleRate, EnergyLogger::SampleRate baseSampleRate);
@ -66,7 +67,7 @@ private:
private:
struct SampleConfig {
SampleRate baseSampleRate;
int maxSamples = 0;
uint maxSamples = 0;
};
PowerBalanceLogEntries m_balanceLiveLog;