diff -r c1bb6b197763 -r fa946d12d937 src/DetailFermenter.cpp --- a/src/DetailFermenter.cpp Fri Jul 01 19:52:11 2022 +0200 +++ b/src/DetailFermenter.cpp Fri Jul 01 21:22:46 2022 +0200 @@ -36,16 +36,22 @@ setWindowFlags(Qt::Window | Qt::WindowTitleHint | Qt::CustomizeWindowHint); setWindowTitle(tr("BMSapp - Details Fermenter")); - ui->airThermo->setMaximum(45.0); + ui->airThermo->setMaximum(40.0); ui->airThermo->setNominal(15.0); ui->airThermo->setCritical(20.0); ui->airThermo->setSuffix(QString("°C")); - ui->beerThermo->setMaximum(45.0); + ui->beerThermo->setMaximum(40.0); ui->beerThermo->setNominal(15.0); ui->beerThermo->setCritical(20.0); ui->beerThermo->setSuffix(QString("°C")); + ui->chillerThermo->setMinimum(-15.0); + ui->chillerThermo->setMaximum(25.0); + ui->chillerThermo->setNominal(0.0); + ui->chillerThermo->setCritical(15.0); + ui->chillerThermo->setSuffix(QString("°C")); + ui->modeEdit->addItem("OFF"); ui->modeEdit->addItem("NONE"); ui->modeEdit->addItem("FRIDGE"); @@ -111,6 +117,8 @@ _node = query.value("node").toString(); _alias = query.value("alias").toString(); + _beercode = query.value("beercode").toString(); + _beername = query.value("beername").toString(); ui->uuidEdit->setText(query.value("uuid").toString()); ui->systemEdit->setText(_node+"/"+_alias); @@ -118,12 +126,13 @@ if (query.value("online").toInt()) { ui->statusEdit->setText(tr("Online")); - ui->codeEdit->setText(query.value("beercode").toString()+" - "+query.value("beername").toString()); + ui->codeEdit->setText(_beercode+" - "+_beername); 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()); + ui->modeEdit->show(); if (query.value("mode").toString() == "OFF") ui->modeEdit->setCurrentIndex(0); else if (query.value("mode").toString() == "NONE") @@ -135,6 +144,7 @@ else if (query.value("mode").toString() == "PROFILE") ui->modeEdit->setCurrentIndex(4); + ui->stageEdit->show(); if (query.value("stage").toString() == "PRIMARY") ui->stageEdit->setCurrentIndex(0); else if (query.value("stage").toString() == "SECONDARY") @@ -265,6 +275,12 @@ _profile = QString(""); } + if (query.value("webcam_url").toString() == "") { + ui->camButton->hide(); + } else { + ui->camButton->show(); + } + ui->thermoBox->show(); if (query.value("air_state").toString() == "OK") { ui->airThermo->setValue(query.value("air_temperature").toDouble()); @@ -272,6 +288,9 @@ if (query.value("beer_state").toString() == "OK") { ui->beerThermo->setValue(query.value("beer_temperature").toDouble()); } + if (query.value("chiller_state").toString() == "OK") { + ui->chillerThermo->setValue(query.value("chiller_temperature").toDouble()); + } } else { /* Offline */ @@ -284,6 +303,8 @@ ui->thermoBox->hide(); ui->tempsetBox->hide(); ui->switchBox->hide(); + ui->camButton->hide(); + ui->logButton->hide(); } } @@ -305,7 +326,6 @@ void DetailFermenter::refreshFermenter(QString data) { if (_node+"/"+_alias == data) { - qDebug() << "for us"; emit refreshTable(); } } @@ -348,7 +368,7 @@ { QString msg=QString("{\"device\":\"fermenters\",\"node\":\""+_node+"\",\"unit\":\""+_alias+"\",\"heater_state\":%1,\"cooler_state\":%2,\"fan_state\":%3}") .arg((heat_state)?100:0).arg((cool_state)?100:0).arg((fan_state)?100:0); - qDebug() << msg; + //qDebug() << msg; webSocket->sendTextMessage(msg); } @@ -387,7 +407,6 @@ } if ((_profile == "RUN") || (_profile == "PAUSE")) { - // use popup int rc = QMessageBox::warning(this, tr("Profile running"), tr("Profile is active, really abort?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No); if (rc == QMessageBox::Yes) { @@ -422,7 +441,7 @@ { QStringList mode ({ "OFF", "NONE", "FRIDGE", "BEER", "PROFILE" }); QString msg = QString("{\"device\":\"fermenters\",\"node\":\"" + _node + "\",\"unit\":\"" + _alias + "\",\"mode\":\"" + mode[val] + "\"}"); - qDebug() << "mode_changed" << val << msg; + //qDebug() << "mode_changed" << val << msg; webSocket->sendTextMessage(msg); } @@ -431,15 +450,58 @@ { QStringList stage ({ "PRIMARY", "SECONDARY", "TERTIARY", "CARBONATION" }); QString msg = QString("{\"device\":\"fermenters\",\"node\":\"" + _node + "\",\"unit\":\"" + _alias + "\",\"stage\":\"" + stage[val] + "\"}"); - qDebug() << "stage_changed" << val << msg; + //qDebug() << "stage_changed" << val << msg; webSocket->sendTextMessage(msg); } void DetailFermenter::code_changed(int val) { - QString msg = QString(""); + QJsonParseError parseError; + QSqlQuery query; + + QString msg = QString("{\"device\":\"fermenters\",\"node\":\"" + _node + "\",\"unit\":\"" + _alias + "\","); + if (val == 0) { + msg.append(QString("\"beeruuid\":\"66ecccbf-e942-4a35-af49-8b02314561a5\",")); + msg.append(QString("\"beercode\":\"") + _alias.toUpper() + "\","); + msg.append(QString("\"beername\":\"") + _alias + "\","); + msg.append(QString("\"yeast_lo\":12.0,")); + msg.append(QString("\"yeast_hi\":24.0}")); + + } else { + query.exec("SELECT code,name,uuid,stage,json_yeasts 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"); + for (int i = 0; i < val; i++) { + query.next(); + } + double yl = 0; + double yh = 40; + const auto& y_json = query.value("json_yeasts").toString(); + if (! y_json.trimmed().isEmpty()) { + const auto& formattedJson = QString("%1").arg(y_json); + QJsonDocument yeasts = QJsonDocument::fromJson(formattedJson.toUtf8(), &parseError); + if (parseError.error != QJsonParseError::NoError) { + qWarning() << "Parse error: " << parseError.errorString() << "at" << parseError.offset ; + } else if (yeasts.isArray()) { + for (int i = 0; i < yeasts.array().size(); i++) { + QJsonObject obj = yeasts.array().at(i).toObject(); + if (obj["y_use"].toInt() == 0) { // Primary yeast + if (obj["y_min_temperature"].toDouble() > yl) + yl = obj["y_min_temperature"].toDouble(); + if (obj["y_max_temperature"].toDouble() < yh) + yh = obj["y_max_temperature"].toDouble(); + } + } + } + } + msg.append(QString("\"beeruuid\":\"") + query.value("uuid").toString() + "\","); + msg.append(QString("\"beercode\":\"") + query.value("code").toString() + "\","); + msg.append(QString("\"beername\":\"") + query.value("name").toString() + "\","); + msg.append(QString("\"yeast_lo\":%1,").arg(yl)); + msg.append(QString("\"yeast_hi\":%1}").arg(yh)); + } + qDebug() << "code_changed" << val << msg; + webSocket->sendTextMessage(msg); }