Browse Source

Thermostat: switch heaters on/off: WIP

master
rico rico 4 years ago
parent
commit
7fad97bd62
4 changed files with 58 additions and 9 deletions
  1. +13
    -0
      soft/thermostat/inc/backgroundloop.h
  2. +4
    -8
      soft/thermostat/inc/mainwindow.h
  3. +38
    -1
      soft/thermostat/src/backgroundloop.cpp
  4. +3
    -0
      soft/thermostat/src/mainwindow.cpp

+ 13
- 0
soft/thermostat/inc/backgroundloop.h View File

@ -11,6 +11,13 @@
#include <QThread>
enum power_states {
OFF,
ON,
AUTO,
MAX_POWER_STATES
};
class BackgroundLoop : public QThread
{
Q_OBJECT
@ -20,8 +27,14 @@ public:
BackgroundLoop();
~BackgroundLoop();
public slots:
void onNewPowerState(enum power_states state);
private:
void run() override;
void allHeatersOn(bool on);
enum power_states m_pwr_state;
};
#endif // BACKGROUNDLOOP_H


+ 4
- 8
soft/thermostat/inc/mainwindow.h View File

@ -14,18 +14,10 @@
#include <QtWidgets>
#include <QVector>
#include "mqttclient.h"
#include "zoneitem.h"
#include "backgroundloop.h"
#include "settings.h"
enum power_states {
OFF,
ON,
AUTO,
MAX_POWER_STATES
};
class MainWindow : public QMainWindow
{
Q_OBJECT
@ -46,6 +38,10 @@ private slots:
void hygro_slot(int idx, double val);
void availability_slot(int idx, bool ok);
void change_state(void);
signals:
void new_pwr_state(enum power_states state);
};
#endif // MAINWINDOW_H


+ 38
- 1
soft/thermostat/src/backgroundloop.cpp View File

@ -11,6 +11,8 @@
#define LOOP_SLEEP_TIME_S 5
#include "mqttclient.h"
#include "settings.h"
#include "backgroundloop.h"
@ -20,9 +22,44 @@ BackgroundLoop::BackgroundLoop() {
BackgroundLoop::~BackgroundLoop() {
}
void BackgroundLoop::onNewPowerState(enum power_states state)
{
m_pwr_state = state;
}
void BackgroundLoop::allHeatersOn(bool on) {
MQTTClient *mc = MQTTClient::getInstance();
Settings *s = Settings::getInstance();
QString payload = on ? QString("on") : QString("off");
for (int i = 0; i < s->nbZones(); i++) {
const struct Room *r = &(s->m_rooms.at(i));
for (int j = 0; j < r->heaters.count(); j++) {
const struct Heater *h = &(r->heaters.at(j));
mc->publish_msg(h->ctrl_topic, payload);
}
}
}
void BackgroundLoop::run()
{
while(!isInterruptionRequested()) {
while (!isInterruptionRequested()) {
switch (m_pwr_state) {
case ON:
allHeatersOn(true);
break;
case AUTO:
/* TODO */
break;
case OFF:
/* fall */
default:
allHeatersOn(false);
break;
}
this->sleep(LOOP_SLEEP_TIME_S);
}
}


+ 3
- 0
soft/thermostat/src/mainwindow.cpp View File

@ -67,6 +67,8 @@ MainWindow::MainWindow(QWidget *parent) :
setWindowTitle(tr("Sorico's thermostat"));
m_backLoop.start();
connect(this, SIGNAL(new_pwr_state(enum power_states)),
&m_backLoop, SLOT(onNewPowerState(enum power_states)));
connect(&m_state_btn, SIGNAL(clicked()), this, SLOT(change_state()));
}
@ -108,6 +110,7 @@ void MainWindow::change_state(void)
break;
}
update_state_btn(m_pwr_state);
emit new_pwr_state(m_pwr_state);
}
void MainWindow::temperature_slot(int idx, double val)


Loading…
Cancel
Save