--- a/bmsd/ispindels.c Wed Aug 23 10:30:09 2023 +0200 +++ b/bmsd/ispindels.c Thu Oct 12 14:19:46 2023 +0200 @@ -40,6 +40,14 @@ extern MYSQL_ROW row; + +double plato_to_sg(double plato) +{ + return 1.00001 + (0.0038661 * plato) + (1.3488e-5 * pow(plato, 2)) + (4.3074e-8 * pow(plato, 3)); +} + + + void ispindel_ws_send(sys_ispindel_list *ispindel) { char *msg = NULL, buf[65]; @@ -225,7 +233,7 @@ time_t timestamp; FILE *fp; - // syslog(LOG_NOTICE, "ispindel_set: %s %s", node, payload); + syslog(LOG_NOTICE, "ispindel_set: %s %s", node, payload); /* * Search ispindel record in the memory array and use it if found. @@ -265,6 +273,7 @@ jobj = json_tokener_parse(payload); if (json_object_object_get_ex(jobj, "unit", &metric)) { + ispindel->lastseen = time(NULL); if (json_object_object_get_ex(metric, "uuid", &val)) { if (ispindel->uuid) free(ispindel->uuid); @@ -285,16 +294,15 @@ ispindel->temperature = json_object_get_double(val); if (json_object_object_get_ex(metric, "battery", &val)) ispindel->battery = json_object_get_double(val); - if (json_object_object_get_ex(metric, "gravity", &val)) { + if (json_object_object_get_ex(metric, "gravity", &val)) ispindel->gravity = json_object_get_double(val); - if (ispindel->gravity > ispindel->og_gravity) - ispindel->og_gravity = ispindel->gravity; - } } -// ispindel_dump(ispindel); + //ispindel_dump(ispindel); - + /* + * If a new iSpindel, insert record. + */ if (new_ispindel) { if (ispindels == NULL) { ispindels = ispindel; @@ -307,9 +315,16 @@ } } ispindel_mysql_insert(ispindel); - } else { - ispindel_mysql_update(ispindel); } + + /* + * Calculate Plato using the calibration data. + * Then update again and make it available. + */ + ispindel->gravity = ispindel_mysql_plato(ispindel->uuid, ispindel->angle); + if (ispindel->gravity > ispindel->og_gravity) + ispindel->og_gravity = ispindel->gravity; + ispindel_mysql_update(ispindel); ispindel_ws_send(ispindel); /* @@ -331,8 +346,7 @@ snprintf(buf, 64, "%.5f", ispindel->gravity); line = xstrcat(line, buf); line = xstrcat(line, (char *)","); - snprintf(buf, 64, "%.5f", 1.00001 + (0.0038661 * ispindel->gravity) + (1.3488e-5 * ispindel->gravity * ispindel->gravity) + - (4.3074e-8 * ispindel->gravity * ispindel->gravity * ispindel->gravity)); + snprintf(buf, 64, "%.5f", plato_to_sg(ispindel->gravity)); line = xstrcat(line, buf); line = xstrcat(line, (char *)","); snprintf(buf, 64, "%.6f", ispindel->battery); @@ -349,9 +363,7 @@ snprintf(query, 511, "INSERT IGNORE INTO log_ispindel SET code='%s', datetime='%s', " \ "temperature='%.4f', plato='%.5f', sg='%.5f', battery='%.6f', " \ "angle='%.5f', refresh='%d', uuid='%s'", - ispindel->beercode, datetime, ispindel->temperature, ispindel->gravity, - 1.00001 + (0.0038661 * ispindel->gravity) + (1.3488e-5 * ispindel->gravity * ispindel->gravity) + - (4.3074e-8 * ispindel->gravity * ispindel->gravity * ispindel->gravity), + ispindel->beercode, datetime, ispindel->temperature, ispindel->gravity, plato_to_sg(ispindel->gravity), ispindel->battery, ispindel->angle, ispindel->interval, ispindel->uuid); //syslog(LOG_NOTICE, "%s", query); bms_mysql_query(query); @@ -416,8 +428,12 @@ printf("temperature %.4f\n", ispindel->temperature); printf("battery %.6f\n", ispindel->battery); printf("gravity %.5f\n", ispindel->gravity); + printf("last seen %ld\n", ispindel->lastseen); printf("interval %d\n", ispindel->interval); printf("og_gravity %.5f\n", ispindel->og_gravity); + printf("yeast_lo %.1f\n", ispindel->yeast_lo); + printf("yeast_hi %.1f\n", ispindel->yeast_hi); + printf("calibrate %s\n", ispindel->calibrate); } }