Thermostat pour piloter jusqu'à 4 radiateurs avec fil pilote
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

78 lines
1.7 KiB

// SPDX-License-Identifier: GPL-3.0-or-later
/*
* Qt mutizone MQTT thermostat
*
* Copyright (C) 2019 Richard Genoud
*
*/
#include <QEventLoop>
#include <QLoggingCategory>
#include <QHostAddress>
#define LOOP_SLEEP_TIME_S 5
#include "mqttclient.h"
#include "settings.h"
#include "backgroundloop.h"
BackgroundLoop::BackgroundLoop() {
}
BackgroundLoop::~BackgroundLoop() {
}
void BackgroundLoop::onNewPowerState(enum power_states state)
{
m_pwr_state = state;
}
void BackgroundLoop::allHeatersOn(bool on) {
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));
/* TODO: check if connected */
m_mqtt->publish_msg(h->ctrl_topic, payload);
}
}
}
void BackgroundLoop::run()
{
Settings *s = Settings::getInstance();
m_mqtt = new MQTTClient(QHostAddress(s->m_broker.address), s->m_broker.port, NULL);
connect(m_mqtt, SIGNAL(new_temperature(int, double)), this, SIGNAL(new_temperature(int, double)));
connect(m_mqtt, SIGNAL(new_hygro(int, double)), this, SIGNAL(new_hygro(int, double)));
connect(m_mqtt, SIGNAL(new_battery(int, double)), this, SIGNAL(new_battery(int, double)));
connect(m_mqtt, SIGNAL(new_availability(int, bool)), this, SIGNAL(new_availability(int, bool)));
m_mqtt->connectToHost();
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);
}
}
/* vim: set tabstop=8 shiftwidth=8 softtabstop=0 noexpandtab: */