Skip to content
Snippets Groups Projects
heatControl.h 3.42 KiB
Newer Older
  • Learn to ignore specific revisions
  • Peter Altenbernd's avatar
    Peter Altenbernd committed
    #ifndef HEATCONTROL_H
    #define HEATCONTROL_H
    
    #include <QObject>
    #include <QFile>
    
    #include <QDir>
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
    
    
    #include "shsensor.h"
    
    #include "shactuator.h"
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
    
    static const QTime startTimeDayDefault = QTime(7,15);
    static const QTime startTimeNightDefault = QTime(23,0);
    static const float autoTempMargin = 2.5;
    static const char sep = ';';
    
    static const QString CSVfileName = "SHcontrol.csv";
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
    
    class HeatControl : public QObject
    {
        Q_OBJECT
    
    public:
        constexpr static const float maxTempDayDefault = 24.0;
        constexpr static const float maxTempNightDefault = 18.5;
    
        enum class Mode {Off, Auto, Smart, Timed, On, RemoteOn, size}; // Namen in HeatControl::modeName()
    
        explicit HeatControl(SHsensor * temp, SHactuator * swtch,
                             float maxTempDay=maxTempDayDefault, float maxTempNight=maxTempNightDefault,
                             QTime startTimeDay=startTimeDayDefault, QTime startTimeNight=startTimeNightDefault,
                             QObject *parent = nullptr);
    
        virtual ~HeatControl();
    
        Mode mode() const;
        QString value() const; // mode als string
    
        virtual SHactuator::State state() const;
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
        bool suspended() const;
        QString susName() const;
        QString name() const;
        void grant(bool ON);
        void checkSusExpiration();
    
        void checkResetSus(bool supplyPossible);
        bool grantPossible(bool supplyPossible) const;
        void checkMaxTempSus(bool supplyPossible);
        void checkMinTempSus(bool supplyPossible);
    
    
        virtual QString output() const;
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
    
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
        friend class TestSHserver;
        SHsensor * m_temp;
        SHactuator * m_switch;
    
        Mode m_mode;
    
        Mode m_previousMode; // für Remote Control
        SHactuator::State m_previousState; // für Remote Control
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
    
        float m_maxTempDay;
        float m_maxTempNight;
    
        QTime m_startTimeDay; // Beginn Tag-Betrieb
        QTime m_startTimeNight; // Beginn Nacht-Betrieb
    
        int m_pos; // Hash-Adresse, zugleich ID
    
    
        bool m_granted; // für aktuelle Anzeige in solarControl
    
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
        enum class Suspension {NONE, MinTemp, MaxTemp};
        Suspension m_suspended; // eine zeitlang true, wenn Temperatur erreicht ist
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
    
    
        float minTemp() const;
        float temperature() const;
    
        void suspend(bool maxTemp);
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
        void processTimed();
        void process();
    
        // statics:
    public slots:
        static void processALL();
    public:
    
        virtual bool minReached() const;
        virtual bool maxReached() const;
    
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
        static void readCSV();
        static void writeCSV();
    
        static QString modeName(Mode m);
        static Mode toMode(const QString &m);
    
        static void setMode(int pos, const Mode &toMode);
        static QString getName(int nid, int sid);
    
        static Mode getMode(int nid, int sid);
        static float getMaxTempDay(int nid, int sid);
        static float getMaxTempNight(int nid, int sid);
        static QTime getStartTimeDay(int nid, int sid);
        static QTime getStartTimeNight(int nid, int sid);
    
    
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
        static void setMaxTempDay(int pos, float maxTempDay);
        static void setMaxTempNight(int pos, float maxTempNight);
        static void setStartTimeDay(int pos, const QTime &startTimeDay);
        static void setStartTimeNight(int pos, const QTime &startTimeNight);
        static void remoteOn(int pos);
        static void resumeMode(int pos);
    
    
        QDateTime expireTime() const;
    
    
    Peter Altenbernd's avatar
    Peter Altenbernd committed
    private:
        static HeatControl * C[SHNodeIdSize * SHSensorIdSize];
        static QFile m_file;
    
    
    };
    
    #endif // HEATCONTROL_H