diff -r 3d327db12cef -r 48de0f61e5ea src/DetailiSpindel.cpp --- a/src/DetailiSpindel.cpp Fri Jun 14 08:45:35 2024 +0200 +++ b/src/DetailiSpindel.cpp Sat Jun 22 11:28:14 2024 +0200 @@ -64,6 +64,7 @@ void DetailiSpindel::refreshTable() { QSqlQuery query; + double angle, plato, sg, poly[4]; query.prepare("SELECT * FROM mon_ispindels WHERE record = :recno"); query.bindValue(":recno", this->recno); @@ -87,30 +88,50 @@ ui->systemEdit->setText(_node+"/"+_alias); ui->codePick->setItemText(0, _alias.toUpper()+" - "+_alias); ui->alarmLED->setChecked(alarm); + ui->lastEdit->setText(query.value("lastseen").toDateTime().toString("dd MMM HH:mm:ss")); + ui->codeEdit->setText(_beercode+" - "+_beername); + ui->powerLED->setChecked(mode); + ui->modeEdit->show(); + ui->modeEdit->setCurrentIndex(mode ? 1:0); if (online) { ui->statusEdit->setText(tr("Online")); ui->statusEdit->setStyleSheet(""); - ui->codeEdit->setText(_beercode+" - "+_beername); ui->thermoMeter->setNominal(query.value("yeast_lo").toDouble()); ui->thermoMeter->setCritical(query.value("yeast_hi").toDouble()); - - ui->powerLED->setChecked(mode); - ui->modeEdit->show(); + ui->modeEdit->setEnabled(true); if (mode) { - ui->modeEdit->setCurrentIndex(1); ui->codePick->hide(); } else { - ui->modeEdit->setCurrentIndex(0); ui->codePick->show(); } + plato = query.value("gravity").toDouble(); + angle = query.value("angle").toDouble(); + /* + * Try to use the calibrate poly to recalcultate the density. + */ + 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(); + } + /* New plato from current polynomial */ + plato = (poly[0] * pow(angle, 3)) + (poly[1] * pow(angle, 2)) + (poly[2] * angle) + poly[3]; + } + } + sg = Utils::plato_to_sg(plato); + ui->voltEdit->setText(QString("%1").arg(query.value("battery").toDouble(), 4, 'f', 3, '0')); - ui->tiltEdit->setText(QString("%1").arg(query.value("angle").toDouble(), 6, 'f', 5, '0')); - ui->platoEdit->setText(QString("%1").arg(query.value("gravity").toDouble(), 4, 'f', 3, '0')); - double sg = Utils::plato_to_sg(query.value("gravity").toDouble()); + ui->tiltEdit->setText(QString("%1").arg(angle, 6, 'f', 5, '0')); + ui->platoEdit->setText(QString("%1").arg(plato, 4, 'f', 3, '0')); ui->sgEdit->setText(QString("%1").arg(sg, 5, 'f', 4, '0')); - ui->lastEdit->setText(query.value("lastseen").toDateTime().toString("dd MMM HH:mm:ss")); if (query.value("gravity").toDouble()) { double o_plato = query.value("og_gravity").toDouble(); @@ -158,10 +179,9 @@ /* Offline */ ui->statusEdit->setText(tr("Offline")); ui->statusEdit->setStyleSheet("background-color: red"); - ui->powerLED->setChecked(false); ui->alarmLED->setChecked(true); ui->codePick->hide(); - ui->modeEdit->hide(); + ui->modeEdit->setEnabled(false); ui->thermoBox->hide(); ui->logButton->hide(); }