629 * LIST |
629 * LIST |
630 * LIST LOG |
630 * LIST LOG |
631 */ |
631 */ |
632 int cmd_list(char *buf) |
632 int cmd_list(char *buf) |
633 { |
633 { |
634 char *opt, *param, *filename, q[5], buffer[256], *copy = NULL; |
634 char *opt, *param, *filename, q[5], buffer[256], outbuf[256]; |
635 char *mode_o = NULL, *mode_n, *heater_o = NULL, *heater_n, *cooler_o = NULL, *cooler_n; |
635 char *date_n, *mode_n, *air_n, *beer_n, *target_n, *heater_n, *cooler_n; |
|
636 char *heater_u, *cooler_u; |
|
637 int heater_l = 0, cooler_l = 0, h = 0, c = 0, heat_used = 0, cool_used = 0; |
636 units_list *unit; |
638 units_list *unit; |
637 FILE *fp; |
639 FILE *fp; |
638 |
640 |
639 opt = strtok(buf, " \0"); |
641 opt = strtok(buf, " \0"); |
640 opt = strtok(NULL, " \0"); |
642 opt = strtok(NULL, " \0"); |
673 filename = xstrcat(filename, (char *)"/.thermferm/log/"); |
675 filename = xstrcat(filename, (char *)"/.thermferm/log/"); |
674 filename = xstrcat(filename, unit->name); |
676 filename = xstrcat(filename, unit->name); |
675 filename = xstrcat(filename, (char *)".log"); |
677 filename = xstrcat(filename, (char *)".log"); |
676 if ((fp = fopen(filename, "r"))) { |
678 if ((fp = fopen(filename, "r"))) { |
677 while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) { |
679 while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) { |
|
680 /* |
|
681 * 2014-11-15 18:39,BEER,20.312,19.750,20.0,0,NA,NA,NA,78105,NA,NA |
|
682 */ |
678 buffer[strlen(buffer) -1] = '\0'; |
683 buffer[strlen(buffer) -1] = '\0'; |
679 copy = xstrcpy(buffer); |
684 date_n = strtok(buffer, ",\0"); /* timestamp */ |
680 mode_n = strtok(buffer, ",\0"); |
685 mode_n = strtok(NULL, ",\0"); /* unit mode */ |
681 mode_n = strtok(NULL, ",\0"); |
686 air_n = strtok(NULL, ",\0"); /* air temp */ |
682 heater_n = strtok(NULL, ",\0"); /* skip air_temp */ |
687 beer_n = strtok(NULL, ",\0"); /* beer temp */ |
683 heater_n = strtok(NULL, ",\0"); /* skip beer temp */ |
688 target_n = strtok(NULL, ",\0"); /* target temp */ |
684 heater_n = strtok(NULL, ",\0"); /* skip target temp */ |
689 heater_n = strtok(NULL, ",\0"); /* current heater state */ |
685 heater_n = strtok(NULL, ",\0"); |
690 cooler_n = strtok(NULL, ",\0"); /* current cooler state */ |
686 cooler_n = strtok(NULL, ",\0"); |
691 heater_u = strtok(NULL, ",\0"); /* current fan state */ |
|
692 heater_u = strtok(NULL, ",\0"); /* current door state */ |
|
693 heater_u = strtok(NULL, ",\0"); /* heater use counter */ |
|
694 cooler_u = strtok(NULL, ",\0"); /* cooler use counter */ |
687 |
695 |
688 if (strncmp(mode_n, (char *)"Mode", 4)) { |
696 if (strncmp(mode_n, (char *)"Mode", 4)) { |
689 /* |
697 /* |
690 * Output a line each 10 minutes or if something changes. |
698 * Output a line each 30 minutes. |
691 */ |
699 */ |
692 if ((q[0] != buffer[11]) || (q[1] != buffer[12]) || (q[3] != buffer[14])) { |
700 if ((q[0] != buffer[11]) || (q[1] != buffer[12]) || (q[3] != buffer[14])) { |
693 q[0] = buffer[11]; |
701 q[0] = buffer[11]; |
694 q[1] = buffer[12]; |
702 q[1] = buffer[12]; |
695 q[2] = buffer[13]; |
703 q[2] = buffer[13]; |
696 q[3] = buffer[14]; |
704 q[3] = buffer[14]; |
697 if ((q[3] == '0') || (q[3] == '3')) |
705 if ((q[3] == '0') || (q[3] == '3')) { |
698 srv_send(copy); |
706 heat_used = cool_used = 0; |
699 } else if ((mode_o && strcmp(mode_o, mode_n)) || |
707 if (strcmp(heater_u, "NA") && (sscanf(heater_u, "%d", &h) == 1)) { |
700 (heater_o && strcmp(heater_o, heater_n)) || (cooler_o && strcmp(cooler_o, cooler_n))) { |
708 if (h && heater_l) { |
701 srv_send(copy); |
709 heat_used = ((h - heater_l) * 100) / 1800; |
|
710 } |
|
711 } |
|
712 if (strcmp(cooler_u, "NA") && (sscanf(cooler_u, "%d", &c) == 1)) { |
|
713 if (c && cooler_l) { |
|
714 cool_used = ((c - cooler_l) * 100) / 1800; |
|
715 } |
|
716 } |
|
717 snprintf(outbuf, 255, "%s,%s,%s,%s,%s,%s,%s,%d,%d", |
|
718 date_n, mode_n, air_n, beer_n, target_n, heater_n, cooler_n, heat_used, cool_used); |
|
719 srv_send(outbuf); |
|
720 if (h && strcmp(heater_u, "NA")) |
|
721 heater_l = h; |
|
722 if (c & strcmp(cooler_u, "NA")) |
|
723 cooler_l = c; |
|
724 } |
702 } |
725 } |
703 } |
726 } |
704 free(copy); |
727 } |
705 copy = NULL; |
728 } |
706 if (mode_o) |
|
707 free(mode_o); |
|
708 mode_o = xstrcpy(mode_n); |
|
709 if (heater_o) |
|
710 free(heater_o); |
|
711 heater_o = xstrcpy(heater_n); |
|
712 if (cooler_o) |
|
713 free(cooler_o); |
|
714 cooler_o = xstrcpy(cooler_n); |
|
715 } |
|
716 } |
|
717 if (mode_o) |
|
718 free(mode_o); |
|
719 mode_o = NULL; |
|
720 if (heater_o) |
|
721 free(heater_o); |
|
722 heater_o = NULL; |
|
723 if (cooler_o) |
|
724 free(cooler_o); |
|
725 cooler_o = NULL; |
|
726 free(filename); |
729 free(filename); |
727 filename = NULL; |
730 filename = NULL; |
728 srv_send((char *)"."); |
731 srv_send((char *)"."); |
729 return 1; |
732 return 1; |
730 } |
733 } |