bmsd/ispindels.c

changeset 849
16079aef4c4c
parent 843
29e7223e37ae
child 850
26cc7ea0f790
--- 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);
     }
 }
 

mercurial