bmsd/fermenters.c

changeset 790
98bd22f6629b
parent 718
59b02b64131b
child 791
b7c7dc0a65c9
--- a/bmsd/fermenters.c	Thu Mar 24 15:46:36 2022 +0100
+++ b/bmsd/fermenters.c	Fri Jun 17 16:18:04 2022 +0200
@@ -3,7 +3,7 @@
  * @brief Handle fermenters status
  * @author Michiel Broek <mbroek at mbse dot eu>
  *
- * Copyright (C) 2018-2020
+ * Copyright (C) 2018-2022
  *
  * This file is part of the bms (Brewery Management System)
  *
@@ -818,12 +818,14 @@
 
 void fermenter_log(char *topic, char *payload)
 {
-    char                *edge_node, *alias, *line, buf[65], *logfile;
+    char                *edge_node, *alias, *line, buf[65], *logfile, *query = malloc(512);
     struct json_object  *jobj, *val, *metric, *metric2;
     fermentation_log	*log;
+    bool		trigger = false;
     struct tm		*mytime;
     time_t		timestamp;
     FILE		*fp;
+    static char		old_mode[17], old_stage[17];
 
     strtok(topic, "/"); // ignore namespace
     strtok(NULL, "/");	// group_id
@@ -844,6 +846,8 @@
     	mytime = localtime(&timestamp);
     	snprintf(log->datetime, 73, "%04d-%02d-%02d %02d:%02d:%02d",
 	    mytime->tm_year + 1900, mytime->tm_mon + 1, mytime->tm_mday, mytime->tm_hour, mytime->tm_min, mytime->tm_sec);
+	if ((mytime->tm_min % 10) == 0)
+	    trigger = true;
     }
 
     if (json_object_object_get_ex(jobj, "metric", &metric)) {
@@ -926,7 +930,30 @@
     json_object_put(jobj);
 
     /*
-     * Build csv log line
+     * Build MySQL log.
+     * Only log every 10 minutes or if something important changed.
+     */
+    if (strcmp(old_mode, log->mode) || strcmp(old_stage, log->stage) || (log->event && strlen(log->event)))
+	trigger = true;
+    if (trigger) {
+    	snprintf(query, 511,
+		"INSERT INTO log_fermenter SET code='%s', datetime='%s', mode='%s', stage='%s', " \
+		"temp_air='%.3f', temp_beer='%.3f', temp_chiller='%.3f', temp_room='%.3f', " \
+		"sp_low='%.3f', sp_high='%.3f', heater_power='%d', cooler_power='%d', " \
+		"event='%s', fermenter_uuid='%s'",
+		log->product_code, log->datetime, log->mode, log->stage, log->temperature_air,
+		log->temperature_beer, log->temperature_chiller, log->temperature_room,
+		log->setpoint_low, log->setpoint_high, log->heater_power, log->cooler_power,
+		(log->event) ? log->event:"", (log->fermenter_uuid) ? log->fermenter_uuid:"");
+        bms_mysql_query(query);
+	//syslog(LOG_NOTICE, "%s", query);
+    }
+    snprintf(old_mode, 16, "%s", log->mode);
+    snprintf(old_stage, 16, "%s", log->stage);
+    free(query);
+
+    /*
+     * Build csv log line. Used by the web client.
      */
     line = xstrcpy(log->datetime);
     line = xstrcat(line, (char *)",");

mercurial