Merge PR #7: Fix thingIds not being removed properly
commit
32c239ef44
|
|
@ -42,7 +42,7 @@ EnergyLogger::EnergyLogger(QObject *parent) : EnergyLogs(parent)
|
||||||
addConfig(SampleRate1Month, SampleRate1Day, 240); // 20 years
|
addConfig(SampleRate1Month, SampleRate1Day, 240); // 20 years
|
||||||
addConfig(SampleRate1Year, SampleRate1Month, 20); // 20 years
|
addConfig(SampleRate1Year, SampleRate1Month, 20); // 20 years
|
||||||
|
|
||||||
// Load last values from thingsPort logs so we have at least one base sample available for sampling, even if a thing might not produce any logs for a while.
|
// Load last values from thingsPower logs so we have at least one base sample available for sampling, even if a thing might not produce any logs for a while.
|
||||||
foreach (const ThingId &thingId, loggedThings()) {
|
foreach (const ThingId &thingId, loggedThings()) {
|
||||||
m_thingsPowerLiveLogs[thingId].append(latestLogEntry(SampleRate1Min, thingId));
|
m_thingsPowerLiveLogs[thingId].append(latestLogEntry(SampleRate1Min, thingId));
|
||||||
}
|
}
|
||||||
|
|
@ -60,7 +60,7 @@ EnergyLogger::EnergyLogger(QObject *parent) : EnergyLogs(parent)
|
||||||
foreach(SampleRate sampleRate, m_configs.keys()) {
|
foreach(SampleRate sampleRate, m_configs.keys()) {
|
||||||
rectifySamples(sampleRate, m_configs.value(sampleRate).baseSampleRate);
|
rectifySamples(sampleRate, m_configs.value(sampleRate).baseSampleRate);
|
||||||
}
|
}
|
||||||
qCDebug(dcEnergyExperience()) << "Resampled energy DB logs in" << startTime.msecsTo(QDateTime::currentDateTime()) << "ms.";
|
qCInfo(dcEnergyExperience()) << "Resampled energy DB logs in" << startTime.msecsTo(QDateTime::currentDateTime()) << "ms.";
|
||||||
|
|
||||||
// And start the sampler timer
|
// And start the sampler timer
|
||||||
connect(&m_sampleTimer, &QTimer::timeout, this, &EnergyLogger::sample);
|
connect(&m_sampleTimer, &QTimer::timeout, this, &EnergyLogger::sample);
|
||||||
|
|
@ -233,6 +233,8 @@ ThingPowerLogEntry EnergyLogger::latestLogEntry(SampleRate sampleRate, const Thi
|
||||||
|
|
||||||
void EnergyLogger::removeThingLogs(const ThingId &thingId)
|
void EnergyLogger::removeThingLogs(const ThingId &thingId)
|
||||||
{
|
{
|
||||||
|
m_thingsPowerLiveLogs.remove(thingId);
|
||||||
|
|
||||||
QSqlQuery query(m_db);
|
QSqlQuery query(m_db);
|
||||||
query.prepare("DELETE FROM thingPower WHERE thingId = ?;");
|
query.prepare("DELETE FROM thingPower WHERE thingId = ?;");
|
||||||
query.addBindValue(thingId);
|
query.addBindValue(thingId);
|
||||||
|
|
@ -570,10 +572,11 @@ void EnergyLogger::rectifySamples(SampleRate sampleRate, SampleRate baseSampleRa
|
||||||
QDateTime oldestBaseSample = getOldestPowerBalanceSampleTimestamp(baseSampleRate);
|
QDateTime oldestBaseSample = getOldestPowerBalanceSampleTimestamp(baseSampleRate);
|
||||||
QDateTime newestSample = getNewestPowerBalanceSampleTimestamp(sampleRate);
|
QDateTime newestSample = getNewestPowerBalanceSampleTimestamp(sampleRate);
|
||||||
|
|
||||||
qCDebug(dcEnergyExperience()) << "Checking for missing samples for" << sampleRate;
|
QDateTime startTime = QDateTime::currentDateTime();
|
||||||
// qCDebug(dcEnergyExperience()) << "Newest sample:" << newestSample.toString() << "Oldest base sample:" << oldestBaseSample.toString();
|
qCDebug(dcEnergyExperience()) << "Checking for missing power balance samples for" << sampleRate;
|
||||||
|
qCDebug(dcEnergyExperience()) << "Newest sample:" << newestSample.toString() << "Oldest base sample:" << oldestBaseSample.toString();
|
||||||
if (newestSample.isNull()) {
|
if (newestSample.isNull()) {
|
||||||
// qCDebug(dcEnergyExperience()) << "No sample at all so far. Using base as starting point.";
|
qCDebug(dcEnergyExperience()) << "No sample at all so far. Using base as starting point.";
|
||||||
newestSample = oldestBaseSample;
|
newestSample = oldestBaseSample;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -588,24 +591,34 @@ void EnergyLogger::rectifySamples(SampleRate sampleRate, SampleRate baseSampleRa
|
||||||
// Now retrieve the last sample and just carry over totals
|
// Now retrieve the last sample and just carry over totals
|
||||||
PowerBalanceLogEntry latest = latestLogEntry(sampleRate);
|
PowerBalanceLogEntry latest = latestLogEntry(sampleRate);
|
||||||
// We only need to rectify up to maxSamples, so don't bother with older ones
|
// We only need to rectify up to maxSamples, so don't bother with older ones
|
||||||
|
if (!newestSample.isNull()) {
|
||||||
newestSample = qMax(newestSample, calculateSampleStart(m_nextSamples[sampleRate], sampleRate, m_configs.value(sampleRate).maxSamples));
|
newestSample = qMax(newestSample, calculateSampleStart(m_nextSamples[sampleRate], sampleRate, m_configs.value(sampleRate).maxSamples));
|
||||||
|
}
|
||||||
|
|
||||||
m_db.transaction();
|
m_db.transaction();
|
||||||
|
int count = 0;
|
||||||
while (!newestSample.isNull() && nextSampleTimestamp(sampleRate, newestSample) < m_nextSamples[sampleRate]) {
|
while (!newestSample.isNull() && nextSampleTimestamp(sampleRate, newestSample) < m_nextSamples[sampleRate]) {
|
||||||
QDateTime nextSample = nextSampleTimestamp(sampleRate, newestSample.addMSecs(1000));
|
QDateTime nextSample = nextSampleTimestamp(sampleRate, newestSample.addMSecs(1000));
|
||||||
insertPowerBalance(nextSample, sampleRate, 0, 0, 0, 0, latest.totalConsumption(), latest.totalProduction(), latest.totalAcquisition(), latest.totalReturn());
|
insertPowerBalance(nextSample, sampleRate, 0, 0, 0, 0, latest.totalConsumption(), latest.totalProduction(), latest.totalAcquisition(), latest.totalReturn());
|
||||||
newestSample = nextSample;
|
newestSample = nextSample;
|
||||||
|
count++;
|
||||||
}
|
}
|
||||||
m_db.commit();
|
m_db.commit();
|
||||||
|
qCDebug(dcEnergyExperience()) << "Done rectifying" << count << "power balance samples for" << sampleRate << "in" << startTime.msecsTo(QDateTime::currentDateTime()) << "ms";
|
||||||
|
|
||||||
foreach (const ThingId &thingId, m_thingsPowerLiveLogs.keys()) {
|
foreach (const ThingId &thingId, m_thingsPowerLiveLogs.keys()) {
|
||||||
QDateTime oldestBaseSample = getOldestThingPowerSampleTimestamp(thingId, baseSampleRate);
|
QDateTime oldestBaseSample = getOldestThingPowerSampleTimestamp(thingId, baseSampleRate);
|
||||||
QDateTime newestSample = getNewestThingPowerSampleTimestamp(thingId, sampleRate);
|
QDateTime newestSample = getNewestThingPowerSampleTimestamp(thingId, sampleRate);
|
||||||
|
|
||||||
// qCDebug(dcEnergyExperience()) << "T Checking for missing samples for" << sampleRate;
|
QDateTime startTime = QDateTime::currentDateTime();
|
||||||
// qCDebug(dcEnergyExperience()) << "T Newest sample:" << newestSample.toString() << "Oldest base sample:" << oldestBaseSample.toString();
|
qCDebug(dcEnergyExperience()) << "Checking for missing thing samples for" << sampleRate << "for thing" << thingId;
|
||||||
|
qCDebug(dcEnergyExperience()) << "Newest sample:" << newestSample.toString() << "Oldest base sample:" << oldestBaseSample.toString();
|
||||||
if (newestSample.isNull()) {
|
if (newestSample.isNull()) {
|
||||||
// qCDebug(dcEnergyExperience()) << "T No sample at all so far. Using base as starting point.";
|
qCDebug(dcEnergyExperience()) << "No sample at all so far. Using base as starting point.";
|
||||||
|
if (oldestBaseSample.isNull()) {
|
||||||
|
qCDebug(dcEnergyExperience()) << "Base series doesn't have any samples either. Skipping resampling for" << sampleRate << "for" << thingId;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
newestSample = oldestBaseSample;
|
newestSample = oldestBaseSample;
|
||||||
}
|
}
|
||||||
// qCDebug(dcEnergyExperience()) << "T next sample after last in series:" << nextSampleTimestamp(sampleRate, newestSample).toString();
|
// qCDebug(dcEnergyExperience()) << "T next sample after last in series:" << nextSampleTimestamp(sampleRate, newestSample).toString();
|
||||||
|
|
@ -621,12 +634,15 @@ void EnergyLogger::rectifySamples(SampleRate sampleRate, SampleRate baseSampleRa
|
||||||
newestSample = qMax(newestSample, calculateSampleStart(m_nextSamples[sampleRate], sampleRate, m_configs.value(sampleRate).maxSamples));
|
newestSample = qMax(newestSample, calculateSampleStart(m_nextSamples[sampleRate], sampleRate, m_configs.value(sampleRate).maxSamples));
|
||||||
|
|
||||||
m_db.transaction();
|
m_db.transaction();
|
||||||
|
int count = 0;
|
||||||
while (!newestSample.isNull() && nextSampleTimestamp(sampleRate, newestSample) < m_nextSamples[sampleRate]) {
|
while (!newestSample.isNull() && nextSampleTimestamp(sampleRate, newestSample) < m_nextSamples[sampleRate]) {
|
||||||
QDateTime nextSample = nextSampleTimestamp(sampleRate, newestSample.addMSecs(1000));
|
QDateTime nextSample = nextSampleTimestamp(sampleRate, newestSample.addMSecs(1000));
|
||||||
insertThingPower(nextSample, sampleRate, thingId, 0, latest.totalConsumption(), latest.totalProduction());
|
insertThingPower(nextSample, sampleRate, thingId, 0, latest.totalConsumption(), latest.totalProduction());
|
||||||
newestSample = nextSample;
|
newestSample = nextSample;
|
||||||
|
count++;
|
||||||
}
|
}
|
||||||
m_db.commit();
|
m_db.commit();
|
||||||
|
qCDebug(dcEnergyExperience()) << "Done rectifying" << count << "thing power samples for" << sampleRate << " for" << thingId << "in" << startTime.msecsTo(QDateTime::currentDateTime()) << "ms";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue