src/DetailFermenter.cpp

changeset 325
fa946d12d937
parent 324
c1bb6b197763
child 328
ee2c8b29f389
--- 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);
 }
 
 

mercurial