58 |
59 |
59 int bms_mysql_init(void) |
60 int bms_mysql_init(void) |
60 { |
61 { |
61 sys_node_list *node, *tmpp; |
62 sys_node_list *node, *tmpp; |
62 sys_fermenter_list *fermenter, *tmpf; |
63 sys_fermenter_list *fermenter, *tmpf; |
63 int ncnt = 0, fcnt = 0; |
64 sys_co2meter_list *co2meter, *tmpc; |
|
65 int ccnt = 0, ncnt = 0, fcnt = 0; |
64 |
66 |
65 con = mysql_init(NULL); |
67 con = mysql_init(NULL); |
66 if (con == NULL) { |
68 if (con == NULL) { |
67 syslog(LOG_NOTICE, "MySQL: mysql_init() failed"); |
69 syslog(LOG_NOTICE, "MySQL: mysql_init() failed"); |
68 return 1; |
70 return 1; |
224 } |
226 } |
225 mysql_free_result(res_set); |
227 mysql_free_result(res_set); |
226 } |
228 } |
227 } |
229 } |
228 |
230 |
229 syslog(LOG_NOTICE, "MySQL: loaded %d nodes, %d fermenters", ncnt, fcnt); |
231 if (mysql_query(con, "SELECT * FROM mon_co2meters")) { |
|
232 syslog(LOG_NOTICE, "MySQL: SELECT * FROM mon_co2meters error %u (%s))", mysql_errno(con), mysql_error(con)); |
|
233 } else { |
|
234 res_set = mysql_store_result(con); |
|
235 if (res_set == NULL) { |
|
236 syslog(LOG_NOTICE, "MySQL: mysq_store_result error %u (%s))", mysql_errno(con), mysql_error(con)); |
|
237 } else { |
|
238 while ((row = mysql_fetch_row(res_set)) != NULL) { |
|
239 co2meter = (sys_co2meter_list *)malloc(sizeof(sys_co2meter_list)); |
|
240 memset(co2meter, 0, sizeof(sys_co2meter_list)); |
|
241 co2meter->next = NULL; |
|
242 co2meter->uuid = xstrcpy(row[1]); |
|
243 co2meter->alias = xstrcpy(row[2]); |
|
244 co2meter->node = xstrcpy(row[3]); |
|
245 co2meter->online = 0; // Will be set later |
|
246 co2meter->beercode = xstrcpy(row[5]); |
|
247 co2meter->beername = xstrcpy(row[6]); |
|
248 co2meter->beeruuid = xstrcpy(row[7]); |
|
249 co2meter->mode = xstrcpy(row[8]); |
|
250 co2meter->temperature_state = xstrcpy(row[9]); |
|
251 co2meter->temperature_address = xstrcpy(row[10]); |
|
252 co2meter->temperature = atof(row[11]); |
|
253 co2meter->pressure_state = xstrcpy(row[12]); |
|
254 co2meter->pressure_channel = atoi(row[13]); |
|
255 co2meter->pressure_voltage = atof(row[14]); |
|
256 co2meter->pressure_zero = atof(row[15]); |
|
257 co2meter->pressure_bar = atof(row[16]); |
|
258 |
|
259 if (co2meters == NULL) { |
|
260 co2meters = co2meter; |
|
261 } else { |
|
262 for (tmpc = co2meters; tmpc; tmpc = tmpc->next) { |
|
263 if (tmpc->next == NULL) { |
|
264 tmpc->next = co2meter; |
|
265 break; |
|
266 } |
|
267 } |
|
268 } |
|
269 ccnt++; |
|
270 } |
|
271 mysql_free_result(res_set); |
|
272 } |
|
273 } |
|
274 |
|
275 syslog(LOG_NOTICE, "MySQL: loaded %d nodes, %d fermenters, %d co2meters", ncnt, fcnt, ccnt); |
230 return 0; |
276 return 0; |
231 } |
277 } |
232 |
278 |
233 |
279 |
234 |
280 |
235 void bms_mysql_end(void) |
281 void bms_mysql_end(void) |
236 { |
282 { |
|
283 sys_co2meter_list *tmpp, *oldtmpp; |
237 sys_fermenter_list *tmpf, *oldtmpf; |
284 sys_fermenter_list *tmpf, *oldtmpf; |
238 sys_node_list *tmpn, *oldtmpn; |
285 sys_node_list *tmpn, *oldtmpn; |
239 |
286 |
240 mysql_close(con); |
287 mysql_close(con); |
241 |
288 |
242 syslog(LOG_NOTICE, "MySQL: disconnected"); |
289 syslog(LOG_NOTICE, "MySQL: disconnected"); |
243 if (debug) |
290 if (debug) |
244 fprintf(stdout, "MySQL: disconnected\n"); |
291 fprintf(stdout, "MySQL: disconnected\n"); |
245 |
292 |
|
293 for (tmpp = co2meters; tmpp; tmpp = oldtmpp) { |
|
294 oldtmpp = tmpp->next; |
|
295 if (tmpp->uuid) |
|
296 free(tmpp->uuid); |
|
297 if (tmpp->alias) |
|
298 free(tmpp->alias); |
|
299 if (tmpp->node) |
|
300 free(tmpp->node); |
|
301 if (tmpp->beercode) |
|
302 free(tmpp->beercode); |
|
303 if (tmpp->beername) |
|
304 free(tmpp->beername); |
|
305 if (tmpp->beeruuid) |
|
306 free(tmpp->beeruuid); |
|
307 if (tmpp->temperature_address) |
|
308 free(tmpp->temperature_address); |
|
309 if (tmpp->temperature_state) |
|
310 free(tmpp->temperature_state); |
|
311 if (tmpp->pressure_state) |
|
312 free(tmpp->pressure_state); |
|
313 free(tmpp); |
|
314 } |
246 for (tmpf = fermenters; tmpf; tmpf = oldtmpf) { |
315 for (tmpf = fermenters; tmpf; tmpf = oldtmpf) { |
247 oldtmpf = tmpf->next; |
316 oldtmpf = tmpf->next; |
248 if (tmpf->uuid) |
317 if (tmpf->uuid) |
249 free(tmpf->uuid); |
318 free(tmpf->uuid); |
250 if (tmpf->alias) |
319 if (tmpf->alias) |
529 bms_mysql_query(query); |
598 bms_mysql_query(query); |
530 free(query); |
599 free(query); |
531 } |
600 } |
532 |
601 |
533 |
602 |
|
603 |
|
604 void co2meter_mysql_insert(sys_co2meter_list *co2meter) |
|
605 { |
|
606 char *query = malloc(2560); |
|
607 |
|
608 snprintf(query, 2559, |
|
609 "INSERT INTO mon_co2meters SET uuid='%s', alias='%s', node='%s', online='%d', mode='%s', " \ |
|
610 "temperature_address='%s', temperature_state='%s', temperature='%.3f', " \ |
|
611 "pressure_state='%s', pressure_channel='%d', pressure_voltage='%.3f', pressure_zero='%.3f', pressure_bar='%.3f'", |
|
612 co2meter->uuid, co2meter->alias, co2meter->node, co2meter->online ? 1:0, co2meter->mode, |
|
613 co2meter->temperature_address, co2meter->temperature_state, co2meter->temperature, |
|
614 co2meter->pressure_state, co2meter->pressure_channel, co2meter->pressure_voltage, co2meter->pressure_zero, co2meter->pressure_bar); |
|
615 |
|
616 if (bms_mysql_query(query) == 0) { |
|
617 syslog(LOG_NOTICE, "MySQL: insert new co2meter %s/%s", co2meter->node, co2meter->alias); |
|
618 } |
|
619 free(query); |
|
620 } |
|
621 |
|
622 |
|
623 |
|
624 void co2meter_mysql_update(sys_co2meter_list *co2meter) |
|
625 { |
|
626 char *query = malloc(2560); |
|
627 |
|
628 snprintf(query, 2559, |
|
629 "UPDATE mon_co2meters SET online='%d', mode='%s', " \ |
|
630 "temperature_address='%s', temperature_state='%s', temperature='%.3f', " \ |
|
631 "pressure_state='%s', pressure_channel='%d', pressure_voltage='%.3f', pressure_zero='%.3f', pressure_bar='%.3f' " \ |
|
632 "WHERE uuid='%s'", |
|
633 co2meter->online ? 1:0, co2meter->mode, |
|
634 co2meter->temperature_address, co2meter->temperature_state, co2meter->temperature, |
|
635 co2meter->pressure_state, co2meter->pressure_channel, co2meter->pressure_voltage, co2meter->pressure_zero, co2meter->pressure_bar, |
|
636 co2meter->uuid); |
|
637 |
|
638 bms_mysql_query(query); |
|
639 free(query); |
|
640 } |
|
641 |
|
642 |
|
643 |
|
644 void co2meter_mysql_death(char *node, char *alias) |
|
645 { |
|
646 char *query = malloc(512); |
|
647 |
|
648 if (alias) |
|
649 snprintf(query, 511, "UPDATE mon_co2meters SET online='0' WHERE node='%s' and alias='%s'", node, alias); |
|
650 else |
|
651 snprintf(query, 511, "UPDATE mon_co2meters SET online='0' WHERE node='%s'", node); |
|
652 |
|
653 bms_mysql_query(query); |
|
654 free(query); |
|
655 } |
|
656 |
|
657 |