|
|
- // SPDX-License-Identifier: GPL-3.0-or-later
- /*
- * Qt mutizone MQTT thermostat
- *
- * Copyright (C) 2019 Richard Genoud
- *
- */
-
- #include <QtWidgets>
- #include <QPushButton>
- #include <QTime>
- #include <QLocale>
- #include <QVector>
-
- #include "mqttclient.h"
- #include "zoneitem.h"
- #include "settings.h"
- #include "mainwindow.h"
-
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent)
- {
- ZoneItem *zone;
- Settings *s = Settings::getInstance();
- MQTTClient *mqttclient = MQTTClient::getInstance();
-
- for (int i = 0; i < s->nbZones(); i++) {
- zone = new ZoneItem(s->m_rooms.at(i).name, this);
- m_zones << zone;
- }
-
- connect(mqttclient, SIGNAL(new_temperature(int, double)),
- this, SLOT(temperature_slot(int, double)));
- connect(mqttclient, SIGNAL(new_hygro(int, double)),
- this, SLOT(hygro_slot(int, double)));
-
- connect(mqttclient, SIGNAL(new_availability(int, bool)),
- this, SLOT(availability_slot(int, bool)));
- /*
- * Sensors-related layout
- */
- QGridLayout *mainLayout = new QGridLayout;
-
- m_state_btn.setText(tr("Auto"));
-
- if (s->nbZones() < 4) {
- // TODO
- qDebug() << "bad configuration" ;
- } else {
- mainLayout->addWidget(m_zones.at(0), 0, 0);
- mainLayout->addWidget(m_zones.at(1), 0, 1);
- mainLayout->addWidget(new QPushButton(tr("Menu")), 0, 2);
- mainLayout->addWidget(m_zones.at(2), 1, 0);
- mainLayout->addWidget(m_zones.at(3), 1, 1);
- mainLayout->addWidget(&m_state_btn, 1, 2);
- }
- m_pwr_state = OFF;
- update_state_btn(m_pwr_state);
-
- QWidget *mainWidget = new QWidget;
- mainWidget->setLayout(mainLayout);
- /*
- * Top widget
- */
- setCentralWidget(mainWidget);
-
- setWindowTitle(tr("Sorico's thermostat"));
- m_backLoop.start();
-
- connect(&m_state_btn, SIGNAL(clicked()), this, SLOT(change_state()));
- }
-
- MainWindow::~MainWindow()
- {
- }
-
- void MainWindow::update_state_btn(enum power_states st)
- {
- switch (st) {
- case OFF:
- m_state_btn.setText(tr("Force off"));
- break;
- case ON:
- m_state_btn.setText(tr("Force on"));
- break;
- case AUTO:
- m_state_btn.setText(tr("Auto"));
- break;
- default:
- m_state_btn.setText(tr("Error"));
- break;
- }
- }
-
- void MainWindow::change_state(void)
- {
- switch (m_pwr_state) {
- case OFF:
- m_pwr_state = ON;
- break;
- case ON:
- m_pwr_state = AUTO;
- break;
- case AUTO:
- /* fall through */
- default:
- m_pwr_state = OFF;
- break;
- }
- update_state_btn(m_pwr_state);
- }
-
- void MainWindow::temperature_slot(int idx, double val)
- {
- Settings *s = Settings::getInstance();
-
- qDebug() << "temperature idx:" << idx << " val: " << val << endl;
- if (idx < s->nbZones()) {
- m_zones.at(idx)->set_temperature_value(val);
- }
- }
-
- void MainWindow::hygro_slot(int idx, double val)
- {
- Settings *s = Settings::getInstance();
-
- qDebug() << "hygro idx:" << idx << " val: " << val << endl;
- if (idx < s->nbZones()) {
- m_zones.at(idx)->set_hygro_value(val);
- }
- }
- void MainWindow::availability_slot(int idx, bool ok)
- {
- Settings *s = Settings::getInstance();
-
- if ((idx < s->nbZones()) && !ok) {
- m_zones.at(idx)->set_hygro_value(0);
- m_zones.at(idx)->set_temperature_value(0);
- }
- }
-
- /* vim: set tabstop=8 shiftwidth=8 softtabstop=0 noexpandtab: */
|