diff -r 9c41e865144a -r a8a6901b5a99 bmsd/mysql.c --- a/bmsd/mysql.c Wed Oct 09 22:39:46 2019 +0200 +++ b/bmsd/mysql.c Thu Oct 10 20:42:39 2019 +0200 @@ -35,6 +35,7 @@ extern sys_config Config; extern sys_node_list *nodes; extern sys_fermenter_list *fermenters; +extern sys_co2meter_list *co2meters; extern int debug; @@ -60,7 +61,8 @@ { sys_node_list *node, *tmpp; sys_fermenter_list *fermenter, *tmpf; - int ncnt = 0, fcnt = 0; + sys_co2meter_list *co2meter, *tmpc; + int ccnt = 0, ncnt = 0, fcnt = 0; con = mysql_init(NULL); if (con == NULL) { @@ -226,7 +228,51 @@ } } - syslog(LOG_NOTICE, "MySQL: loaded %d nodes, %d fermenters", ncnt, fcnt); + if (mysql_query(con, "SELECT * FROM mon_co2meters")) { + syslog(LOG_NOTICE, "MySQL: SELECT * FROM mon_co2meters error %u (%s))", mysql_errno(con), mysql_error(con)); + } else { + res_set = mysql_store_result(con); + if (res_set == NULL) { + syslog(LOG_NOTICE, "MySQL: mysq_store_result error %u (%s))", mysql_errno(con), mysql_error(con)); + } else { + while ((row = mysql_fetch_row(res_set)) != NULL) { + co2meter = (sys_co2meter_list *)malloc(sizeof(sys_co2meter_list)); + memset(co2meter, 0, sizeof(sys_co2meter_list)); + co2meter->next = NULL; + co2meter->uuid = xstrcpy(row[1]); + co2meter->alias = xstrcpy(row[2]); + co2meter->node = xstrcpy(row[3]); + co2meter->online = 0; // Will be set later + co2meter->beercode = xstrcpy(row[5]); + co2meter->beername = xstrcpy(row[6]); + co2meter->beeruuid = xstrcpy(row[7]); + co2meter->mode = xstrcpy(row[8]); + co2meter->temperature_state = xstrcpy(row[9]); + co2meter->temperature_address = xstrcpy(row[10]); + co2meter->temperature = atof(row[11]); + co2meter->pressure_state = xstrcpy(row[12]); + co2meter->pressure_channel = atoi(row[13]); + co2meter->pressure_voltage = atof(row[14]); + co2meter->pressure_zero = atof(row[15]); + co2meter->pressure_bar = atof(row[16]); + + if (co2meters == NULL) { + co2meters = co2meter; + } else { + for (tmpc = co2meters; tmpc; tmpc = tmpc->next) { + if (tmpc->next == NULL) { + tmpc->next = co2meter; + break; + } + } + } + ccnt++; + } + mysql_free_result(res_set); + } + } + + syslog(LOG_NOTICE, "MySQL: loaded %d nodes, %d fermenters, %d co2meters", ncnt, fcnt, ccnt); return 0; } @@ -234,6 +280,7 @@ void bms_mysql_end(void) { + sys_co2meter_list *tmpp, *oldtmpp; sys_fermenter_list *tmpf, *oldtmpf; sys_node_list *tmpn, *oldtmpn; @@ -243,6 +290,28 @@ if (debug) fprintf(stdout, "MySQL: disconnected\n"); + for (tmpp = co2meters; tmpp; tmpp = oldtmpp) { + oldtmpp = tmpp->next; + if (tmpp->uuid) + free(tmpp->uuid); + if (tmpp->alias) + free(tmpp->alias); + if (tmpp->node) + free(tmpp->node); + if (tmpp->beercode) + free(tmpp->beercode); + if (tmpp->beername) + free(tmpp->beername); + if (tmpp->beeruuid) + free(tmpp->beeruuid); + if (tmpp->temperature_address) + free(tmpp->temperature_address); + if (tmpp->temperature_state) + free(tmpp->temperature_state); + if (tmpp->pressure_state) + free(tmpp->pressure_state); + free(tmpp); + } for (tmpf = fermenters; tmpf; tmpf = oldtmpf) { oldtmpf = tmpf->next; if (tmpf->uuid) @@ -531,3 +600,58 @@ } + +void co2meter_mysql_insert(sys_co2meter_list *co2meter) +{ + char *query = malloc(2560); + + snprintf(query, 2559, + "INSERT INTO mon_co2meters SET uuid='%s', alias='%s', node='%s', online='%d', mode='%s', " \ + "temperature_address='%s', temperature_state='%s', temperature='%.3f', " \ + "pressure_state='%s', pressure_channel='%d', pressure_voltage='%.3f', pressure_zero='%.3f', pressure_bar='%.3f'", + co2meter->uuid, co2meter->alias, co2meter->node, co2meter->online ? 1:0, co2meter->mode, + co2meter->temperature_address, co2meter->temperature_state, co2meter->temperature, + co2meter->pressure_state, co2meter->pressure_channel, co2meter->pressure_voltage, co2meter->pressure_zero, co2meter->pressure_bar); + + if (bms_mysql_query(query) == 0) { + syslog(LOG_NOTICE, "MySQL: insert new co2meter %s/%s", co2meter->node, co2meter->alias); + } + free(query); +} + + + +void co2meter_mysql_update(sys_co2meter_list *co2meter) +{ + char *query = malloc(2560); + + snprintf(query, 2559, + "UPDATE mon_co2meters SET online='%d', mode='%s', " \ + "temperature_address='%s', temperature_state='%s', temperature='%.3f', " \ + "pressure_state='%s', pressure_channel='%d', pressure_voltage='%.3f', pressure_zero='%.3f', pressure_bar='%.3f' " \ + "WHERE uuid='%s'", + co2meter->online ? 1:0, co2meter->mode, + co2meter->temperature_address, co2meter->temperature_state, co2meter->temperature, + co2meter->pressure_state, co2meter->pressure_channel, co2meter->pressure_voltage, co2meter->pressure_zero, co2meter->pressure_bar, + co2meter->uuid); + + bms_mysql_query(query); + free(query); +} + + + +void co2meter_mysql_death(char *node, char *alias) +{ + char *query = malloc(512); + + if (alias) + snprintf(query, 511, "UPDATE mon_co2meters SET online='0' WHERE node='%s' and alias='%s'", node, alias); + else + snprintf(query, 511, "UPDATE mon_co2meters SET online='0' WHERE node='%s'", node); + + bms_mysql_query(query); + free(query); +} + +