This repository has been archived on 2026-05-31. You can view files and clone it, but cannot push or open issues or pull requests.
powersync-app/libnymea-app/energy/powerbalancelogs.h
2021-11-24 19:59:09 +01:00

98 lines
2.9 KiB
C++

#ifndef POWERBALANCELOGS_H
#define POWERBALANCELOGS_H
#include <QObject>
#include <QAbstractListModel>
#include <QDateTime>
#include <QSortFilterProxyModel>
#include "energylogs.h"
class PowerBalanceLogEntry: public EnergyLogEntry
{
Q_OBJECT
Q_PROPERTY(double consumption READ consumption CONSTANT)
Q_PROPERTY(double production READ production CONSTANT)
Q_PROPERTY(double acquisition READ acquisition CONSTANT)
Q_PROPERTY(double storage READ storage CONSTANT)
Q_PROPERTY(double totalConsumption READ totalConsumption CONSTANT)
Q_PROPERTY(double totalProduction READ totalProduction CONSTANT)
Q_PROPERTY(double totalAcquisition READ totalAcquisition CONSTANT)
Q_PROPERTY(double totalReturn READ totalReturn CONSTANT)
public:
PowerBalanceLogEntry(QObject *parent = nullptr);
PowerBalanceLogEntry(const QDateTime &timestamp, double consumption, double production, double acquisition, double storage, double totalConsumption, double totalProduction, double totalAcquisition, double totalReturn, QObject *parent);
double consumption() const;
double production() const;
double acquisition() const;
double storage() const;
double totalConsumption() const;
double totalProduction() const;
double totalAcquisition() const;
double totalReturn() const;
private:
QDateTime m_timestamp;
double m_consumption = 0;
double m_production = 0;
double m_acquisition = 0;
double m_storage = 0;
double m_totalConsumption = 0;
double m_totalProduction = 0;
double m_totalAcquisition = 0;
double m_totalReturn = 0;
};
class PowerBalanceLogs : public EnergyLogs
{
Q_OBJECT
Q_PROPERTY(double minValue READ minValue NOTIFY minValueChanged)
Q_PROPERTY(double maxValue READ maxValue NOTIFY maxValueChanged)
public:
explicit PowerBalanceLogs(QObject *parent = nullptr);
double minValue() const;
double maxValue() const;
Q_INVOKABLE EnergyLogEntry* find(const QDateTime &timestamp) const;
signals:
void minValueChanged();
void maxValueChanged();
protected:
QString logsName() const override;
void logEntriesReceived(const QVariantMap &params) override;
void notificationReceived(const QVariantMap &data) override;
private:
void addEntry(PowerBalanceLogEntry *entry);
double m_minValue = 0;
double m_maxValue = 0;
};
class PowerBalanceLogsProxy: public QSortFilterProxyModel
{
Q_OBJECT
Q_PROPERTY(PowerBalanceLogs* powerBalanceLogs READ powerBalanceLogs WRITE setPowerBalanceLogs NOTIFY powerBalanceLogsChanged)
Q_PROPERTY(int count READ rowCount NOTIFY countChanged)
public:
PowerBalanceLogsProxy(QObject *parent);
PowerBalanceLogs *powerBalanceLogs() const;
void setPowerBalanceLogs(PowerBalanceLogs *powerBalanceLogs);
signals:
void countChanged();
void powerBalanceLogsChanged();
private:
PowerBalanceLogs *m_powerBalanceLogs = nullptr;
};
#endif // POWERBALANCELOGS_H