// SPDX-License-Identifier: GPL-3.0-or-later /* * Qt mutizone MQTT thermostat * * Copyright (C) 2019 Richard Genoud * */ #include #include #include #include #include "mqttclient.h" #include "zoneitem.h" #include "settings.h" #include "mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { Settings *s = Settings::getInstance(); mqttclient = new MQTTSubcriber(QHostAddress("192.168.1.2"), 1883); for (int i = 0; i < NB_ZONES; i++) { m_zones[i] = new ZoneItem(s->m_rooms_names[i], this); } connect(mqttclient, SIGNAL(new_temperature(unsigned, double)), this, SLOT(temperature_slot(unsigned, double))); connect(mqttclient, SIGNAL(new_hygro(unsigned, double)), this, SLOT(hygro_slot(unsigned, double))); connect(mqttclient, SIGNAL(new_availability(unsigned, bool)), this, SLOT(availability_slot(unsigned, bool))); /* * Sensors-related layout */ QGridLayout *mainLayout = new QGridLayout; mainLayout->addWidget(m_zones[0], 0, 0); mainLayout->addWidget(m_zones[1], 0, 1); mainLayout->addWidget(new QPushButton(tr("Menu")), 0, 2); mainLayout->addWidget(m_zones[2], 1, 0); mainLayout->addWidget(m_zones[3], 1, 1); mainLayout->addWidget(new QPushButton(tr("Auto")), 1, 2); QWidget *mainWidget = new QWidget; mainWidget->setLayout(mainLayout); /* * Top widget */ setCentralWidget(mainWidget); setWindowTitle(tr("Sorico's thermostat")); m_backLoop.start(); mqttclient->connectToHost(); } MainWindow::~MainWindow() { } void MainWindow::temperature_slot(unsigned idx, double val) { qDebug() << "temperature idx:" << idx << " val: " << val << endl; if (idx < NB_ZONES) { m_zones[idx]->set_temperature_value(val); } } void MainWindow::hygro_slot(unsigned idx, double val) { qDebug() << "hygro idx:" << idx << " val: " << val << endl; if (idx < NB_ZONES) { m_zones[idx]->set_hygro_value(val); } } void MainWindow::availability_slot(unsigned idx, bool ok) { if ((idx < NB_ZONES) && !ok) { m_zones[idx]->set_hygro_value(0); m_zones[idx]->set_temperature_value(0); } } /* vim: set tabstop=8 shiftwidth=8 softtabstop=0 noexpandtab: */