97 node = (sys_node_list *)malloc(sizeof(sys_node_list)); |
97 node = (sys_node_list *)malloc(sizeof(sys_node_list)); |
98 memset(node, 0, sizeof(sys_node_list)); |
98 memset(node, 0, sizeof(sys_node_list)); |
99 node->next = NULL; |
99 node->next = NULL; |
100 node->uuid = xstrcpy(row[1]); |
100 node->uuid = xstrcpy(row[1]); |
101 node->node = xstrcpy(row[2]); |
101 node->node = xstrcpy(row[2]); |
102 node->online = false; // Will be set using MQTT |
102 node->online = atoi(row[3]); |
103 node->group_id = xstrcpy(row[4]); |
103 node->group_id = xstrcpy(row[4]); |
104 node->hardwaremake = xstrcpy(row[5]); |
104 node->hardwaremake = xstrcpy(row[5]); |
105 node->hardwaremodel = xstrcpy(row[6]); |
105 node->hardwaremodel = xstrcpy(row[6]); |
106 node->os = xstrcpy(row[7]); |
106 node->os = xstrcpy(row[7]); |
107 node->os_version = xstrcpy(row[8]); |
107 node->os_version = xstrcpy(row[8]); |
147 memset(fermenter, 0, sizeof(sys_fermenter_list)); |
147 memset(fermenter, 0, sizeof(sys_fermenter_list)); |
148 fermenter->next = NULL; |
148 fermenter->next = NULL; |
149 fermenter->uuid = xstrcpy(row[1]); |
149 fermenter->uuid = xstrcpy(row[1]); |
150 fermenter->alias = xstrcpy(row[2]); |
150 fermenter->alias = xstrcpy(row[2]); |
151 fermenter->node = xstrcpy(row[3]); |
151 fermenter->node = xstrcpy(row[3]); |
152 fermenter->online = false; // Will be set later |
152 fermenter->online = atoi(row[4]); |
153 fermenter->beercode = xstrcpy(row[5]); |
153 fermenter->beercode = xstrcpy(row[5]); |
154 fermenter->beername = xstrcpy(row[6]); |
154 fermenter->beername = xstrcpy(row[6]); |
155 fermenter->beeruuid = xstrcpy(row[44]); |
155 fermenter->beeruuid = xstrcpy(row[44]); |
156 if (strlen(row[7])) { |
156 if (strlen(row[7])) { |
157 fermenter->air_address = xstrcpy(row[7]); |
157 fermenter->air_address = xstrcpy(row[7]); |
243 memset(co2meter, 0, sizeof(sys_co2meter_list)); |
243 memset(co2meter, 0, sizeof(sys_co2meter_list)); |
244 co2meter->next = NULL; |
244 co2meter->next = NULL; |
245 co2meter->uuid = xstrcpy(row[1]); |
245 co2meter->uuid = xstrcpy(row[1]); |
246 co2meter->alias = xstrcpy(row[2]); |
246 co2meter->alias = xstrcpy(row[2]); |
247 co2meter->node = xstrcpy(row[3]); |
247 co2meter->node = xstrcpy(row[3]); |
248 co2meter->online = 0; // Will be set later |
248 co2meter->online = atoi(row[4]); |
249 co2meter->beercode = xstrcpy(row[5]); |
249 co2meter->beercode = xstrcpy(row[5]); |
250 co2meter->beername = xstrcpy(row[6]); |
250 co2meter->beername = xstrcpy(row[6]); |
251 co2meter->beeruuid = xstrcpy(row[7]); |
251 co2meter->beeruuid = xstrcpy(row[7]); |
252 co2meter->mode = xstrcpy(row[8]); |
252 co2meter->mode = xstrcpy(row[8]); |
253 co2meter->temperature_state = xstrcpy(row[9]); |
253 co2meter->temperature_state = xstrcpy(row[9]); |
285 while ((row = mysql_fetch_row(res_set)) != NULL) { |
285 while ((row = mysql_fetch_row(res_set)) != NULL) { |
286 ispindel = (sys_ispindel_list *)malloc(sizeof(sys_ispindel_list)); |
286 ispindel = (sys_ispindel_list *)malloc(sizeof(sys_ispindel_list)); |
287 memset(ispindel, 0, sizeof(sys_ispindel_list)); |
287 memset(ispindel, 0, sizeof(sys_ispindel_list)); |
288 ispindel->next = NULL; |
288 ispindel->next = NULL; |
289 ispindel->node = xstrcpy(row[1]); |
289 ispindel->node = xstrcpy(row[1]); |
290 ispindel->online = 0; // Will be set later |
290 ispindel->online = atoi(row[2]); |
291 ispindel->alarm = atoi(row[3]); |
291 ispindel->alarm = atoi(row[3]); |
292 ispindel->beercode = xstrcpy(row[4]); |
292 ispindel->beercode = xstrcpy(row[4]); |
293 ispindel->beername = xstrcpy(row[5]); |
293 ispindel->beername = xstrcpy(row[5]); |
294 ispindel->beeruuid = xstrcpy(row[6]); |
294 ispindel->beeruuid = xstrcpy(row[6]); |
295 ispindel->tilt = atof(row[7]); |
295 ispindel->tilt = atof(row[7]); |
321 |
321 |
322 |
322 |
323 |
323 |
324 void bms_mysql_end(void) |
324 void bms_mysql_end(void) |
325 { |
325 { |
|
326 sys_ispindel_list *tmpi, *oldtmpi; |
326 sys_co2meter_list *tmpp, *oldtmpp; |
327 sys_co2meter_list *tmpp, *oldtmpp; |
327 sys_fermenter_list *tmpf, *oldtmpf; |
328 sys_fermenter_list *tmpf, *oldtmpf; |
328 sys_node_list *tmpn, *oldtmpn; |
329 sys_node_list *tmpn, *oldtmpn; |
329 |
330 |
330 mysql_close(con); |
331 mysql_close(con); |
331 |
332 |
332 syslog(LOG_NOTICE, "MySQL: disconnected"); |
333 syslog(LOG_NOTICE, "MySQL: disconnected"); |
333 if (debug) |
334 if (debug) |
334 fprintf(stdout, "MySQL: disconnected\n"); |
335 fprintf(stdout, "MySQL: disconnected\n"); |
|
336 |
|
337 for (tmpi = ispindels; tmpi; tmpi = oldtmpi) { |
|
338 oldtmpi = tmpi->next; |
|
339 if (tmpi->node) |
|
340 free(tmpi->node); |
|
341 if (tmpi->beercode) |
|
342 free(tmpi->beercode); |
|
343 if (tmpi->beername) |
|
344 free(tmpi->beername); |
|
345 if (tmpi->beeruuid) |
|
346 free(tmpi->beeruuid); |
|
347 free(tmpi); |
|
348 } |
335 |
349 |
336 for (tmpp = co2meters; tmpp; tmpp = oldtmpp) { |
350 for (tmpp = co2meters; tmpp; tmpp = oldtmpp) { |
337 oldtmpp = tmpp->next; |
351 oldtmpp = tmpp->next; |
338 if (tmpp->uuid) |
352 if (tmpp->uuid) |
339 free(tmpp->uuid); |
353 free(tmpp->uuid); |
488 mytime = localtime(&node->lastseen); |
502 mytime = localtime(&node->lastseen); |
489 snprintf(last, 72, "%04d-%02d-%02d %02d:%02d:%02d", |
503 snprintf(last, 72, "%04d-%02d-%02d %02d:%02d:%02d", |
490 mytime->tm_year + 1900, mytime->tm_mon + 1, mytime->tm_mday, mytime->tm_hour, mytime->tm_min, mytime->tm_sec); |
504 mytime->tm_year + 1900, mytime->tm_mon + 1, mytime->tm_mday, mytime->tm_hour, mytime->tm_min, mytime->tm_sec); |
491 |
505 |
492 snprintf(query, 1023, |
506 snprintf(query, 1023, |
493 "INSERT INTO mon_nodes SET uuid='%s', node='%s', online='%s', group_id='%s', " \ |
507 "INSERT INTO mon_nodes SET uuid='%s', node='%s', online='%d', group_id='%s', " \ |
494 "hardwaremake='%s', hardwaremodel='%s', os='%s', os_version='%s', firmware='%s', firstseen='%s', lastseen='%s', " \ |
508 "hardwaremake='%s', hardwaremodel='%s', os='%s', os_version='%s', firmware='%s', firstseen='%s', lastseen='%s', " \ |
495 "temperature='%.3f', humidity='%.3f', barometer='%.3f', gps_latitude='%.8f', gps_longitude='%.8f', gps_altitude='%.8f', " \ |
509 "temperature='%.3f', humidity='%.3f', barometer='%.3f', gps_latitude='%.8f', gps_longitude='%.8f', gps_altitude='%.8f', " \ |
496 "net_address='%s', net_ifname='%s', net_rssi='%d'", |
510 "net_address='%s', net_ifname='%s', net_rssi='%d'", |
497 node->uuid, node->node, node->online ?"Y":"N", node->group_id, |
511 node->uuid, node->node, node->online ?1:0, node->group_id, |
498 node->hardwaremake, node->hardwaremodel, node->os, node->os_version, node->firmware, first, last, |
512 node->hardwaremake, node->hardwaremodel, node->os, node->os_version, node->firmware, first, last, |
499 node->temperature, node->humidity, node->barometer, node->gps_latitude, node->gps_longitude, node->gps_altitude, |
513 node->temperature, node->humidity, node->barometer, node->gps_latitude, node->gps_longitude, node->gps_altitude, |
500 node->net_address, node->net_ifname, node->net_rssi); |
514 node->net_address, node->net_ifname, node->net_rssi); |
501 |
515 |
502 if (bms_mysql_query(query) == 0) { |
516 if (bms_mysql_query(query) == 0) { |
516 mytime = localtime(&node->lastseen); |
530 mytime = localtime(&node->lastseen); |
517 snprintf(last, 64, "%04d-%02d-%02d %02d:%02d:%02d", |
531 snprintf(last, 64, "%04d-%02d-%02d %02d:%02d:%02d", |
518 mytime->tm_year + 1900, mytime->tm_mon + 1, mytime->tm_mday, mytime->tm_hour, mytime->tm_min, mytime->tm_sec); |
532 mytime->tm_year + 1900, mytime->tm_mon + 1, mytime->tm_mday, mytime->tm_hour, mytime->tm_min, mytime->tm_sec); |
519 |
533 |
520 snprintf(query, 1023, |
534 snprintf(query, 1023, |
521 "UPDATE mon_nodes SET online='%s', hardwaremake='%s', hardwaremodel='%s', os='%s', os_version='%s', firmware='%s', lastseen='%s', " \ |
535 "UPDATE mon_nodes SET online='%d', hardwaremake='%s', hardwaremodel='%s', os='%s', os_version='%s', firmware='%s', lastseen='%s', " \ |
522 "temperature='%.3f', humidity='%.3f', barometer='%.3f', gps_latitude='%.8f', gps_longitude='%.8f', gps_altitude='%.8f', " \ |
536 "temperature='%.3f', humidity='%.3f', barometer='%.3f', gps_latitude='%.8f', gps_longitude='%.8f', gps_altitude='%.8f', " \ |
523 "net_address='%s', net_ifname='%s', net_rssi='%d' WHERE uuid='%s'", |
537 "net_address='%s', net_ifname='%s', net_rssi='%d' WHERE uuid='%s'", |
524 node->online ?"Y":"N", node->hardwaremake, node->hardwaremodel, node->os, node->os_version, node->firmware, last, |
538 node->online ? 1:0, node->hardwaremake, node->hardwaremodel, node->os, node->os_version, node->firmware, last, |
525 node->temperature, node->humidity, node->barometer, node->gps_latitude, node->gps_longitude, node->gps_altitude, |
539 node->temperature, node->humidity, node->barometer, node->gps_latitude, node->gps_longitude, node->gps_altitude, |
526 node->net_address, node->net_ifname, node->net_rssi, node->uuid); |
540 node->net_address, node->net_ifname, node->net_rssi, node->uuid); |
527 |
541 |
528 bms_mysql_query(query); |
542 bms_mysql_query(query); |
529 free(query); |
543 free(query); |
545 void fermenter_mysql_insert(sys_fermenter_list *fermenter) |
559 void fermenter_mysql_insert(sys_fermenter_list *fermenter) |
546 { |
560 { |
547 char *query = malloc(2560); |
561 char *query = malloc(2560); |
548 |
562 |
549 snprintf(query, 2559, |
563 snprintf(query, 2559, |
550 "INSERT INTO mon_fermenters SET uuid='%s', alias='%s', node='%s', online='%s', " \ |
564 "INSERT INTO mon_fermenters SET uuid='%s', alias='%s', node='%s', online='%d', " \ |
551 "beercode='%s', beername='%s', beeruuid='%s', " \ |
565 "beercode='%s', beername='%s', beeruuid='%s', " \ |
552 "air_address='%s', air_state='%s', air_temperature='%.3f', " \ |
566 "air_address='%s', air_state='%s', air_temperature='%.3f', " \ |
553 "beer_address='%s', beer_state='%s', beer_temperature='%.3f', " \ |
567 "beer_address='%s', beer_state='%s', beer_temperature='%.3f', " \ |
554 "chiller_address='%s', chiller_state='%s', chiller_temperature='%.3f', " \ |
568 "chiller_address='%s', chiller_state='%s', chiller_temperature='%.3f', " \ |
555 "heater_address='%s', heater_state='%d', heater_usage='%lu', " \ |
569 "heater_address='%s', heater_state='%d', heater_usage='%lu', " \ |
560 "psu_address='%s', psu_state='%d', " \ |
574 "psu_address='%s', psu_state='%d', " \ |
561 "mode='%s', alarm='%d', setpoint_high='%.3f', setpoint_low='%.3f', " \ |
575 "mode='%s', alarm='%d', setpoint_high='%.3f', setpoint_low='%.3f', " \ |
562 "profile_uuid='%s', profile_name='%s', profile_state='%s', profile_percent='%d', " \ |
576 "profile_uuid='%s', profile_name='%s', profile_state='%s', profile_percent='%d', " \ |
563 "profile_inittemp_high='%.3f', profile_inittemp_low='%.3f', profile_steps='%s', stage='%s', " \ |
577 "profile_inittemp_high='%.3f', profile_inittemp_low='%.3f', profile_steps='%s', stage='%s', " \ |
564 "yeast_lo='%.1f', yeast_hi='%.1f', webcam_url='%s', webcam_light='%d'", |
578 "yeast_lo='%.1f', yeast_hi='%.1f', webcam_url='%s', webcam_light='%d'", |
565 fermenter->uuid, fermenter->alias, fermenter->node, fermenter->online ? "Y":"N", |
579 fermenter->uuid, fermenter->alias, fermenter->node, fermenter->online ? 1:0, |
566 fermenter->beercode ? fermenter->beercode : "", fermenter->beername ? fermenter->beername : "", |
580 fermenter->beercode ? fermenter->beercode : "", fermenter->beername ? fermenter->beername : "", |
567 fermenter->beeruuid ? fermenter->beeruuid : "", |
581 fermenter->beeruuid ? fermenter->beeruuid : "", |
568 fermenter->air_address ? fermenter->air_address : "", fermenter->air_state ? fermenter->air_state : "", fermenter->air_temperature, |
582 fermenter->air_address ? fermenter->air_address : "", fermenter->air_state ? fermenter->air_state : "", fermenter->air_temperature, |
569 fermenter->beer_address ? fermenter->beer_address : "", fermenter->beer_state ? fermenter->beer_state : "", fermenter->beer_temperature, |
583 fermenter->beer_address ? fermenter->beer_address : "", fermenter->beer_state ? fermenter->beer_state : "", fermenter->beer_temperature, |
570 fermenter->chiller_address ? fermenter->chiller_address : "", fermenter->chiller_state ? fermenter->chiller_state : "", fermenter->chiller_temperature, |
584 fermenter->chiller_address ? fermenter->chiller_address : "", fermenter->chiller_state ? fermenter->chiller_state : "", fermenter->chiller_temperature, |
591 void fermenter_mysql_update(sys_fermenter_list *fermenter) |
605 void fermenter_mysql_update(sys_fermenter_list *fermenter) |
592 { |
606 { |
593 char *query = malloc(2560); |
607 char *query = malloc(2560); |
594 |
608 |
595 snprintf(query, 2559, |
609 snprintf(query, 2559, |
596 "UPDATE mon_fermenters SET online='%s', beercode='%s', beername='%s', beeruuid='%s', " \ |
610 "UPDATE mon_fermenters SET online='%d', beercode='%s', beername='%s', beeruuid='%s', " \ |
597 "air_address='%s', air_state='%s', air_temperature='%.3f', " \ |
611 "air_address='%s', air_state='%s', air_temperature='%.3f', " \ |
598 "beer_address='%s', beer_state='%s', beer_temperature='%.3f', " \ |
612 "beer_address='%s', beer_state='%s', beer_temperature='%.3f', " \ |
599 "chiller_address='%s', chiller_state='%s', chiller_temperature='%.3f', " \ |
613 "chiller_address='%s', chiller_state='%s', chiller_temperature='%.3f', " \ |
600 "heater_address='%s', heater_state='%d', heater_usage='%lu', " \ |
614 "heater_address='%s', heater_state='%d', heater_usage='%lu', " \ |
601 "cooler_address='%s', cooler_state='%d', cooler_usage='%lu', " \ |
615 "cooler_address='%s', cooler_state='%d', cooler_usage='%lu', " \ |
605 "psu_address='%s', psu_state='%d', " \ |
619 "psu_address='%s', psu_state='%d', " \ |
606 "mode='%s', alarm='%d', setpoint_high='%.3f', setpoint_low='%.3f', " \ |
620 "mode='%s', alarm='%d', setpoint_high='%.3f', setpoint_low='%.3f', " \ |
607 "profile_uuid='%s', profile_name='%s', profile_state='%s', profile_percent='%d', " \ |
621 "profile_uuid='%s', profile_name='%s', profile_state='%s', profile_percent='%d', " \ |
608 "profile_inittemp_high='%.3f', profile_inittemp_low='%.3f', profile_steps='%s', stage='%s', " \ |
622 "profile_inittemp_high='%.3f', profile_inittemp_low='%.3f', profile_steps='%s', stage='%s', " \ |
609 "yeast_lo='%.1f', yeast_hi='%.1f', webcam_url='%s', webcam_light='%d' WHERE uuid='%s'", |
623 "yeast_lo='%.1f', yeast_hi='%.1f', webcam_url='%s', webcam_light='%d' WHERE uuid='%s'", |
610 fermenter->online ? "Y":"N", fermenter->beercode ? fermenter->beercode : "", fermenter->beername ? fermenter->beername : "", |
624 fermenter->online ? 1:0, fermenter->beercode ? fermenter->beercode : "", fermenter->beername ? fermenter->beername : "", |
611 fermenter->beeruuid ? fermenter->beeruuid : "", |
625 fermenter->beeruuid ? fermenter->beeruuid : "", |
612 fermenter->air_address ? fermenter->air_address : "", fermenter->air_state ? fermenter->air_state : "", fermenter->air_temperature, |
626 fermenter->air_address ? fermenter->air_address : "", fermenter->air_state ? fermenter->air_state : "", fermenter->air_temperature, |
613 fermenter->beer_address ? fermenter->beer_address : "", fermenter->beer_state ? fermenter->beer_state : "", fermenter->beer_temperature, |
627 fermenter->beer_address ? fermenter->beer_address : "", fermenter->beer_state ? fermenter->beer_state : "", fermenter->beer_temperature, |
614 fermenter->chiller_address ? fermenter->chiller_address : "", fermenter->chiller_state ? fermenter->chiller_state : "", fermenter->chiller_temperature, |
628 fermenter->chiller_address ? fermenter->chiller_address : "", fermenter->chiller_state ? fermenter->chiller_state : "", fermenter->chiller_temperature, |
615 fermenter->heater_address ? fermenter->heater_address : "", fermenter->heater_state, fermenter->heater_usage, |
629 fermenter->heater_address ? fermenter->heater_address : "", fermenter->heater_state, fermenter->heater_usage, |
634 void fermenter_mysql_death(char *node, char *alias) |
648 void fermenter_mysql_death(char *node, char *alias) |
635 { |
649 { |
636 char *query = malloc(512); |
650 char *query = malloc(512); |
637 |
651 |
638 if (alias) |
652 if (alias) |
639 snprintf(query, 511, "UPDATE mon_fermenters SET online='N' WHERE node='%s' and alias='%s'", node, alias); |
653 snprintf(query, 511, "UPDATE mon_fermenters SET online='0' WHERE node='%s' and alias='%s'", node, alias); |
640 else |
654 else |
641 snprintf(query, 511, "UPDATE mon_fermenters SET online='N' WHERE node='%s'", node); |
655 snprintf(query, 511, "UPDATE mon_fermenters SET online='0' WHERE node='%s'", node); |
642 |
656 |
643 bms_mysql_query(query); |
657 bms_mysql_query(query); |
644 free(query); |
658 free(query); |
645 } |
659 } |
646 |
660 |
705 { |
719 { |
706 char *query = malloc(2560); |
720 char *query = malloc(2560); |
707 |
721 |
708 snprintf(query, 2559, |
722 snprintf(query, 2559, |
709 "INSERT INTO mon_ispindels SET node='%s', online='%d', alarm='%d', " \ |
723 "INSERT INTO mon_ispindels SET node='%s', online='%d', alarm='%d', " \ |
710 "tilt='%.3f', temperature='%.3f', battery='%.3f', gravity='%.3f', interval='%d', rssi='%d'", |
724 "tilt='%.6f', temperature='%.4f', battery='%.4f', gravity='%.6f', interval='%d', rssi='%d'", |
711 ispindel->node, ispindel->online ? 1:0, ispindel->alarm, |
725 ispindel->node, ispindel->online ? 1:0, ispindel->alarm, |
712 ispindel->tilt, ispindel->temperature, ispindel->battery, ispindel->gravity, ispindel->interval, ispindel->rssi); |
726 ispindel->tilt, ispindel->temperature, ispindel->battery, ispindel->gravity, ispindel->interval, ispindel->rssi); |
713 |
727 |
714 if (bms_mysql_query(query) == 0) { |
728 if (bms_mysql_query(query) == 0) { |
715 syslog(LOG_NOTICE, "MySQL: insert new ispindel %s", ispindel->node); |
729 syslog(LOG_NOTICE, "MySQL: insert new ispindel %s", ispindel->node); |