diff -r e6e696add0b3 -r 98bd22f6629b bmsd/fermenters.c --- 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 * - * 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(×tamp); 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 *)",");