This commit is contained in:
Michael Zanetti 2021-12-07 23:48:23 +01:00
parent 2df41462ad
commit 2da2d9458b
3 changed files with 8 additions and 9 deletions

View File

@ -38,7 +38,7 @@ public:
virtual PowerBalanceLogEntries powerBalanceLogs(SampleRate sampleRate, const QDateTime &from = QDateTime(), const QDateTime &to = QDateTime()) const = 0; virtual PowerBalanceLogEntries powerBalanceLogs(SampleRate sampleRate, const QDateTime &from = QDateTime(), const QDateTime &to = QDateTime()) const = 0;
/*! Returns logs for the given sample rate for currentPower, totalEnergyConsumed and totalEnergyProduced for the given things. /*! Returns logs for the given sample rate for currentPower, totalEnergyConsumed and totalEnergyProduced for the given things.
* From and to may be given to limie results to a time span. * From and to may be given to limit results to a time span.
* If thingIds is empty, all things will be returned. * If thingIds is empty, all things will be returned.
*/ */
virtual ThingPowerLogEntries thingPowerLogs(SampleRate sampleRate, const QList<ThingId> &thingIds, const QDateTime &from = QDateTime(), const QDateTime &to = QDateTime()) const = 0; virtual ThingPowerLogEntries thingPowerLogs(SampleRate sampleRate, const QList<ThingId> &thingIds, const QDateTime &from = QDateTime(), const QDateTime &to = QDateTime()) const = 0;

View File

@ -488,7 +488,7 @@ void EnergyLogger::rectifySamples(SampleRate sampleRate, SampleRate baseSampleRa
// Normally we'd need to find the newest available sample of a series and catch up from there. // Normally we'd need to find the newest available sample of a series and catch up from there.
// However, it could happen a series does not have any samples at all yet. For example if we're logging since january, // However, it could happen a series does not have any samples at all yet. For example if we're logging since january,
// and at new years the system was off, we missed the new years yearly sample and don't have any earlier. For those cases // and at new years the system was off, we missed the new years yearly sample and don't have any earlier. For those cases
// we need to start resampling from the oldest timestamp we find in the DB at all (regardless of the sampleRate) // we need to start resampling from the oldest timestamp we find in the DB for the base sampleRate.
QDateTime oldestBaseSample = getOldestPowerBalanceSampleTimestamp(baseSampleRate); QDateTime oldestBaseSample = getOldestPowerBalanceSampleTimestamp(baseSampleRate);
QDateTime newestSample = getNewestPowerBalanceSampleTimestamp(sampleRate); QDateTime newestSample = getNewestPowerBalanceSampleTimestamp(sampleRate);
@ -577,8 +577,6 @@ bool EnergyLogger::samplePowerBalance(SampleRate sampleRate, SampleRate baseSamp
{ {
QDateTime sampleStart = sampleEnd.addMSecs(-sampleRate * 60 * 1000); QDateTime sampleStart = sampleEnd.addMSecs(-sampleRate * 60 * 1000);
// FIXME: If base samplerate does not contain a single entry in the given timeframe (e.g. system has been off for more than 15 mins) we seem to mess up totalConsumption
// Needs verifying that lower sample rates are always rectified first!
qCDebug(dcEnergyExperience()) << "Sampling power balance" << sampleRate << "from" << sampleStart << "to" << sampleEnd; qCDebug(dcEnergyExperience()) << "Sampling power balance" << sampleRate << "from" << sampleStart << "to" << sampleEnd;
double medianConsumption = 0; double medianConsumption = 0;

View File

@ -12,10 +12,11 @@ EnergyManagerImpl::EnergyManagerImpl(ThingManager *thingManager, QObject *parent
m_thingManager(thingManager), m_thingManager(thingManager),
m_logger(new EnergyLogger(this)) m_logger(new EnergyLogger(this))
{ {
// Most of the time we get a bunch of signals at the same time (root meter, producers, consumers etc) // Most of the time we get a bunch of state changes (currentPower, totals, for inverter, battery, rootmeter)
// In order to decrease some load on the system, we'll wait for wee bit until we actually update to // at the same time if they're implemented by the same plugin.
// accumulate those changes and calculate the change in one go. // In order to decrease some load on the system, we'll wait for the event loop pass to finish until we actually
m_balanceUpdateTimer.setInterval(50); // update to accumulate those changes and calculate the change in one go.
m_balanceUpdateTimer.setInterval(0);
m_balanceUpdateTimer.setSingleShot(true); m_balanceUpdateTimer.setSingleShot(true);
connect(&m_balanceUpdateTimer, &QTimer::timeout, this, &EnergyManagerImpl::updatePowerBalance); connect(&m_balanceUpdateTimer, &QTimer::timeout, this, &EnergyManagerImpl::updatePowerBalance);
@ -125,7 +126,7 @@ void EnergyManagerImpl::watchThing(Thing *thing)
qCDebug(dcEnergyExperience()) << "Wathing thing:" << thing->name(); qCDebug(dcEnergyExperience()) << "Wathing thing:" << thing->name();
// React on things that requie us updating the power balance // React on things that require us updating the power balance
if (thing->thingClass().interfaces().contains("energymeter") if (thing->thingClass().interfaces().contains("energymeter")
|| thing->thingClass().interfaces().contains("smartmeterproducer") || thing->thingClass().interfaces().contains("smartmeterproducer")
|| thing->thingClass().interfaces().contains("energystorage")) { || thing->thingClass().interfaces().contains("energystorage")) {