bmsd/mysql.c

changeset 502
a8a6901b5a99
parent 405
ef3f0274a1ea
child 505
c09b67fd8323
equal deleted inserted replaced
501:9c41e865144a 502:a8a6901b5a99
33 MYSQL_ROW row; 33 MYSQL_ROW row;
34 34
35 extern sys_config Config; 35 extern sys_config Config;
36 extern sys_node_list *nodes; 36 extern sys_node_list *nodes;
37 extern sys_fermenter_list *fermenters; 37 extern sys_fermenter_list *fermenters;
38 extern sys_co2meter_list *co2meters;
38 extern int debug; 39 extern int debug;
39 40
40 41
41 time_t datetime_to_time_t(char *dt_string) 42 time_t datetime_to_time_t(char *dt_string)
42 { 43 {
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

mercurial