Workaround for the thermometer scale ranges. Added chiller thermometer settings. Added beer select.

Fri, 01 Jul 2022 21:22:46 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Fri, 01 Jul 2022 21:22:46 +0200
changeset 325
fa946d12d937
parent 324
c1bb6b197763
child 326
6728b4c29cb4

Workaround for the thermometer scale ranges. Added chiller thermometer settings. Added beer select.

src/DetailFermenter.cpp file | annotate | diff | comparison | revisions
src/DetailFermenter.h file | annotate | diff | comparison | revisions
ui/DetailFermenter.ui file | annotate | diff | comparison | revisions
--- 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);
 }
 
 
--- a/src/DetailFermenter.h	Fri Jul 01 19:52:11 2022 +0200
+++ b/src/DetailFermenter.h	Fri Jul 01 21:22:46 2022 +0200
@@ -45,7 +45,7 @@
 
 private:
     Ui::DetailFermenter *ui;
-    QString _node, _alias, _profile;
+    QString _node, _alias, _profile, _beercode, _beername;
     int recno;
     double lo_set = 0, hi_set = 0;
     bool heat_state = false;
--- a/ui/DetailFermenter.ui	Fri Jul 01 19:52:11 2022 +0200
+++ b/ui/DetailFermenter.ui	Fri Jul 01 21:22:46 2022 +0200
@@ -352,7 +352,7 @@
         <rect>
          <x>560</x>
          <y>70</y>
-         <width>101</width>
+         <width>141</width>
          <height>23</height>
         </rect>
        </property>
@@ -933,6 +933,10 @@
        <property name="text">
         <string>Log</string>
        </property>
+       <property name="icon">
+        <iconset resource="../../../../../../home/mbroek/MyProjects/bmsapp/resources/icons.qrc">
+         <normaloff>:/icons/silk/chart_line.png</normaloff>:/icons/silk/chart_line.png</iconset>
+       </property>
       </widget>
       <widget class="QPushButton" name="camButton">
        <property name="geometry">
@@ -946,6 +950,10 @@
        <property name="text">
         <string>Camera</string>
        </property>
+       <property name="icon">
+        <iconset resource="../../../../../../home/mbroek/MyProjects/bmsapp/resources/icons.qrc">
+         <normaloff>:/icons/silk/webcam.png</normaloff>:/icons/silk/webcam.png</iconset>
+       </property>
       </widget>
      </widget>
     </widget>

mercurial