thermferm/server.c

changeset 299
d1c52fb43e30
parent 293
881b1ae75468
child 300
4ce46ff3e37d
equal deleted inserted replaced
298:b88c60e8369e 299:d1c52fb43e30
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 }

mercurial