src/MoniSpindels.cpp

changeset 537
48de0f61e5ea
parent 503
61c114afb0ee
--- a/src/MoniSpindels.cpp	Fri Jun 14 08:45:35 2024 +0200
+++ b/src/MoniSpindels.cpp	Sat Jun 22 11:28:14 2024 +0200
@@ -74,8 +74,9 @@
 void MoniSpindels::refreshTable()
 {
     QTableWidgetItem *item;
+    double	plato, poly[4];
 
-    QSqlQuery query("SELECT record,alias,node,online,mode,temperature,gravity,beercode,beername FROM mon_ispindels ORDER BY alias");
+    QSqlQuery query("SELECT record,alias,node,online,mode,temperature,gravity,angle,calibrate,beercode,beername FROM mon_ispindels ORDER BY alias");
     const QStringList labels({tr("Unit"), tr("Node"), tr("Status"), tr("Beer"), tr("Temperature"), tr("SG"), tr("Cal"), tr("Details")});
 
     this->tableiSpindels->setColumnCount(8);
@@ -114,10 +115,31 @@
 	}
 
 	if (query.value("online").toInt()) {
+	    /*
+	     * Try to use the calibrate poly to recalcultate the SG.
+	     */
+	    plato = query.value("gravity").toDouble();
+	    QJsonParseError parseError;
+            const auto& json = query.value("calibrate").toString();
+	    if (!json.trimmed().isEmpty()) {
+            	const auto& formattedJson = QString("%1").arg(json);
+            	QJsonDocument jsonResponse = QJsonDocument::fromJson(formattedJson.toUtf8(),  &parseError);
+		QJsonObject jsonObj = jsonResponse.object();
+                QJsonArray polyData = jsonObj.value("polyData").toArray();
+		if (polyData.size() == 4) {
+		    for (int i = 0; i < polyData.size(); i++) {
+		    	poly[i] = polyData.at(i).toDouble();
+		    }
+		    double angle = query.value("angle").toDouble();
+		    /* New plato from current polynomial */
+		    plato = (poly[0] * pow(angle, 3)) + (poly[1] * pow(angle, 2)) + (poly[2] * angle) + poly[3];
+		}
+	    }
+
 	    item = new QTableWidgetItem(QString("%1°C").arg(query.value("temperature").toDouble(), 4, 'f', 3, '0'));
 	    item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
 	    this->tableiSpindels->setItem(i, 4, item);
-	    double sg = Utils::plato_to_sg(query.value("gravity").toDouble());
+	    double sg = Utils::plato_to_sg(plato);
 	    item = new QTableWidgetItem(QString("%1").arg(sg, 5, 'f', 4, '0'));
 	    item->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter);
 	    this->tableiSpindels->setItem(i, 5, item);

mercurial