diff -r e7ca120d93c7 -r d053ffbbf3e9 src/DetailFermenter.cpp --- a/src/DetailFermenter.cpp Thu Jun 30 21:01:50 2022 +0200 +++ b/src/DetailFermenter.cpp Thu Jun 30 21:05:30 2022 +0200 @@ -16,24 +16,54 @@ */ #include "DetailFermenter.h" #include "../ui/ui_DetailFermenter.h" +#include "global.h" #include "MainWindow.h" DetailFermenter::DetailFermenter(int id, QWidget *parent) : QDialog(parent), ui(new Ui::DetailFermenter) { + QSqlQuery query; + qDebug() << "DetailFermenter record:" << id; ui->setupUi(this); this->recno = id; + setWindowFlags(Qt::Window | Qt::WindowTitleHint | Qt::CustomizeWindowHint); + setWindowTitle(tr("BMSapp - Details Fermenter")); - WindowTitle(); + ui->airThermo->setMaximum(45.0); + ui->airThermo->setNominal(15.0); + ui->airThermo->setCritical(20.0); + ui->airThermo->setSuffix(QString("°C")); + + ui->beerThermo->setMaximum(45.0); + ui->beerThermo->setNominal(15.0); + ui->beerThermo->setCritical(20.0); + ui->beerThermo->setSuffix(QString("°C")); + + ui->modeEdit->addItem("OFF"); + ui->modeEdit->addItem("NONE"); + ui->modeEdit->addItem("FRIDGE"); + ui->modeEdit->addItem("BEER"); + ui->modeEdit->addItem("PROFILE"); - // srcMode = ['OFF', 'NONE', 'FRIDGE', 'BEER', 'PROFILE']; - // srcStage = ['PRIMARY', 'SECONDARY', 'TERTIARY', 'CARBONATION']; - // -// connect(ui->nameEdit, &QLineEdit::textChanged, this, &DetailFermenter::is_changed); -// connect(ui->unlimitedEdit, &QCheckBox::stateChanged, this, &DetailFermenter::is_changed); -// connect(ui->caEdit, &QDoubleSpinBox::textChanged, this, &DetailFermenter::water_changed); + ui->stageEdit->addItem("PRIMARY"); + ui->stageEdit->addItem("SECONDARY"); + ui->stageEdit->addItem("TERTIARY"); + ui->stageEdit->addItem("CARBONATION"); + ui->codePick->addItem("Free - Dummy"); // Will be replaced later + query.exec("SELECT code,name FROM products WHERE stage='1' OR stage='2' OR stage='3' OR stage='4' OR stage='5' OR stage='6' OR stage='7' ORDER BY code"); + while (query.next()) { + ui->codePick->addItem(query.value("code").toString()+" - "+query.value("name").toString()); + } + + connect(ui->loEdit, QOverload::of(&QDoubleSpinBox::valueChanged), this, &DetailFermenter::lo_changed); + connect(ui->hiEdit, QOverload::of(&QDoubleSpinBox::valueChanged), this, &DetailFermenter::hi_changed); + connect(ui->heatSwitch, SIGNAL(clicked()), this, SLOT(heat_switched())); + connect(ui->coolSwitch, SIGNAL(clicked()), this, SLOT(cool_switched())); + connect(ui->fanSwitch, SIGNAL(clicked()), this, SLOT(fan_switched())); + connect(ui->modeEdit, QOverload::of(&QComboBox::currentIndexChanged), this, &DetailFermenter::mode_changed); + connect(parent, SIGNAL(updateFermenter(QString)), this, SLOT(refreshFermenter(QString))); emit refreshTable(); } @@ -49,22 +79,104 @@ query.exec(); if (query.next()) { + const QSignalBlocker blocker1(ui->codePick); + const QSignalBlocker blocker2(ui->modeEdit); + + _node = query.value("node").toString(); + _alias = query.value("alias").toString(); + ui->uuidEdit->setText(query.value("uuid").toString()); - ui->systemEdit->setText(query.value("node").toString()+"/"+query.value("alias").toString()); + ui->systemEdit->setText(_node+"/"+_alias); + ui->codePick->setItemText(0, _alias.toUpper()+" - "+_alias); if (query.value("online").toInt()) { ui->statusEdit->setText(tr("Online")); - ui->codeEdit->setText(query.value("beercode").toString()+" - "+query.value("beername").toString()); + ui->codeEdit->setText(query.value("beercode").toString()+" - "+query.value("beername").toString()); + ui->airThermo->setNominal(query.value("yeast_lo").toDouble()); + ui->airThermo->setCritical(query.value("yeast_hi").toDouble()); + ui->beerThermo->setNominal(query.value("yeast_lo").toDouble()); + ui->beerThermo->setCritical(query.value("yeast_hi").toDouble()); + + if (query.value("mode").toString() == "OFF") + ui->modeEdit->setCurrentIndex(0); + else if (query.value("mode").toString() == "NONE") + ui->modeEdit->setCurrentIndex(1); + else if (query.value("mode").toString() == "FRIDGE") + ui->modeEdit->setCurrentIndex(2); + else if (query.value("mode").toString() == "BEER") + ui->modeEdit->setCurrentIndex(3); + else if (query.value("mode").toString() == "PROFILE") + ui->modeEdit->setCurrentIndex(4); + + if (query.value("stage").toString() == "PRIMARY") + ui->stageEdit->setCurrentIndex(0); + else if (query.value("stage").toString() == "SECONDARY") + ui->stageEdit->setCurrentIndex(1); + else if (query.value("stage").toString() == "TERTIARY") + ui->stageEdit->setCurrentIndex(2); + else if (query.value("stage").toString() == "CARBONATION") + ui->stageEdit->setCurrentIndex(3); + + if (query.value("door_address").toString() != "") { + ui->doorLED->show(); + ui->doorLabel->show(); + ui->doorLED->setChecked((query.value("door_state").toInt() != 0) ? true:false); + } else { + ui->doorLED->hide(); + ui->doorLabel->hide(); + } + + if (query.value("light_address").toString() != "") { + ui->lightLED->show(); + ui->lightLabel->show(); + ui->lightLED->setChecked((query.value("light_state").toInt() != 0) ? true:false); + } else { + ui->lightLED->hide(); + ui->lightLabel->hide(); + } if (query.value("mode").toString() == "OFF") { ui->powerLED->setChecked(false); - // disable dropdowns select beer. + ui->codePick->show(); } else { ui->powerLED->setChecked(true); - // enable beerslect + ui->codePick->hide(); } ui->alarmLED->setChecked((query.value("alarm").toInt() != 0) ? true:false); + ui->tempsetBox->show(); + if ((query.value("mode").toString() == "FRIDGE") || (query.value("mode").toString() == "BEER")) { + ui->loEdit->setReadOnly(false); + ui->loEdit->setButtonSymbols(QAbstractSpinBox::UpDownArrows); + ui->hiEdit->setReadOnly(false); + ui->hiEdit->setButtonSymbols(QAbstractSpinBox::UpDownArrows); + } else { + ui->loEdit->setReadOnly(true); + ui->loEdit->setButtonSymbols(QAbstractSpinBox::NoButtons); + ui->hiEdit->setReadOnly(true); + ui->hiEdit->setButtonSymbols(QAbstractSpinBox::NoButtons); + } + ui->loEdit->setValue(query.value("setpoint_low").toDouble()); + ui->hiEdit->setValue(query.value("setpoint_high").toDouble()); + + ui->switchBox->show(); + ui->heatLED->setChecked((query.value("heater_state").toInt() != 0) ? true:false); + ui->coolLED->setChecked((query.value("cooler_state").toInt() != 0) ? true:false); + ui->fanLED->setChecked((query.value("fan_state").toInt() != 0) ? true:false); + + if (query.value("mode").toString() == "NONE") { + ui->heatSwitch->show(); + ui->coolSwitch->show(); + ui->fanSwitch->show(); + } else { + ui->heatSwitch->hide(); + ui->coolSwitch->hide(); + ui->fanSwitch->hide(); + } + + //webSocket->sendTextMessage(QString("dd")); + + ui->thermoBox->show(); if (query.value("air_state").toString() == "OK") { ui->airThermo->setValue(query.value("air_temperature").toDouble()); } @@ -74,9 +186,15 @@ } else { /* Offline */ + ui->statusEdit->setText(tr("Offline")); ui->powerLED->setChecked(false); ui->alarmLED->setChecked(true); - + ui->codePick->hide(); + ui->modeEdit->hide(); + ui->stageEdit->hide(); + ui->thermoBox->hide(); + ui->tempsetBox->hide(); + ui->switchBox->hide(); } } @@ -92,14 +210,15 @@ /* - * Window header, mark any change with '**' + * Receive signals destined for all fermenters. + * Check if the signal is for us. */ -void DetailFermenter::WindowTitle() +void DetailFermenter::refreshFermenter(QString data) { - QString txt; - - txt = QString(tr("BMSapp - Edit brewing water %1").arg(this->recno)); - setWindowTitle(txt); + if (_node+"/"+_alias == data) { + qDebug() << "for us"; + emit refreshTable(); + } } @@ -108,3 +227,44 @@ this->close(); this->setResult(1); } + + +void DetailFermenter::lo_changed(double val) +{ + qDebug() << "lo_changed" << val; +} + + +void DetailFermenter::hi_changed(double val) +{ + qDebug() << "hi_changed" << val; +} + + +void DetailFermenter::heat_switched() +{ + qDebug() << "heat_switched" << heat_state; +} + + +void DetailFermenter::cool_switched() +{ + qDebug() << "cool_switched" << cool_state; +} + + +void DetailFermenter::fan_switched() +{ + qDebug() << "fan_switched" << fan_state; +} + + +void DetailFermenter::mode_changed(int val) +{ + qDebug() << "mode_changed" << val; + QStringList mode ({ "OFF", "NONE", "FRIDGE", "BEER", "PROFiLE" }); + QString msg = QString("{\"device\":\"fermenters\",\"node\":\"" + _node + "\",\"unit\":\"" + _alias + "\",\"mode\":\"" + mode[val] + "\"}"); + qDebug() << msg; + webSocket->sendTextMessage(msg); +} +