// SPDX-License-Identifier: GPL-3.0-or-later /* * Qt mutizone MQTT thermostat * * Copyright (C) 2019 Richard Genoud * */ #include #include #include #include #include #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: */