474 } |
474 } |
475 name = xstrcat(name, (char *)"/.thermferm/log/"); |
475 name = xstrcat(name, (char *)"/.thermferm/log/"); |
476 name = xstrcat(name, param); |
476 name = xstrcat(name, param); |
477 |
477 |
478 if ((fp = fopen(name, "r"))) { |
478 if ((fp = fopen(name, "r"))) { |
479 char buffer[256], outbuf[256], q[5]; |
479 char buffer[256], outbuf[256], q[5], hr[3]; |
480 char *date_n, *mode_n, *air_n, *beer_n, *target_n, *heater_n, *cooler_n, *room_n; |
480 char *date_n, *mode_n, *air_n, *beer_n, *target_n, *heater_n, *cooler_n, *room_n; |
481 char *heater_u, *cooler_u; |
481 char *heater_u, *cooler_u; |
482 int lines = 0, heater_l = 0, cooler_l = 0, h = 0, c = 0, heat_used = 0, cool_used = 0, graphstep = 0; |
482 int lines = 0, heater_l = 0, cooler_l = 0, h = 0, c = 0, heat_used = 0, cool_used = 0, graphstep = 0; |
483 float room_t = 0.0; |
483 float room_t = 0.0; |
484 |
484 |
518 * heater_u --------------------------------------------+ | | | |
518 * heater_u --------------------------------------------+ | | | |
519 * cooler_u ------------------------------------------------+ | | |
519 * cooler_u ------------------------------------------------+ | | |
520 * not used ---------------------------------------------------+ | |
520 * not used ---------------------------------------------------+ | |
521 * room_n ----------------------------------------------------------+ |
521 * room_n ----------------------------------------------------------+ |
522 */ |
522 */ |
523 q[0] = buffer[11]; |
523 hr[0] = q[0] = buffer[11]; |
524 q[1] = buffer[12]; |
524 hr[1] = q[1] = buffer[12]; |
525 q[2] = buffer[14]; |
525 q[2] = buffer[14]; |
526 q[3] = buffer[15]; |
526 q[3] = buffer[15]; |
|
527 hr[2] = '\0'; |
527 buffer[strlen(buffer) -1] = '\0'; |
528 buffer[strlen(buffer) -1] = '\0'; |
528 date_n = strtok(buffer, ",\0"); /* timestamp */ |
529 date_n = strtok(buffer, ",\0"); /* timestamp */ |
529 mode_n = strtok(NULL, ",\0"); /* unit mode */ |
530 mode_n = strtok(NULL, ",\0"); /* unit mode */ |
530 air_n = strtok(NULL, ",\0"); /* air temp */ |
531 air_n = strtok(NULL, ",\0"); /* air temp */ |
531 beer_n = strtok(NULL, ",\0"); /* beer temp */ |
532 beer_n = strtok(NULL, ",\0"); /* beer temp */ |
541 |
542 |
542 if (strncmp(mode_n, (char *)"Mode", 4)) { |
543 if (strncmp(mode_n, (char *)"Mode", 4)) { |
543 /* |
544 /* |
544 * Output a line at the right intervals |
545 * Output a line at the right intervals |
545 */ |
546 */ |
|
547 int hour = atoi(hr); |
546 if (((graphstep == 1)) || |
548 if (((graphstep == 1)) || |
547 ((graphstep == 2) && (q[3] == '0' || q[3] == '5')) || |
549 ((graphstep == 2) && (q[3] == '0' || q[3] == '5')) || |
548 ((graphstep == 3) && ((q[2] == '0' && q[3] == '0') || (q[2] == '1' && q[3] == '5') || (q[2] == '3' && q[3] == '0') || (q[2] == '4' && q[3] == '5'))) || |
550 ((graphstep == 3) && ((q[2] == '0' && q[3] == '0') || (q[2] == '1' && q[3] == '5') || (q[2] == '3' && q[3] == '0') || (q[2] == '4' && q[3] == '5'))) || |
549 ((graphstep == 4) && ((q[2] == '0' && q[3] == '0') || (q[2] == '3' && q[3] == '0'))) || |
551 ((graphstep == 4) && ((q[2] == '0' && q[3] == '0') || (q[2] == '3' && q[3] == '0'))) || |
550 ((graphstep == 5) && (q[2] == '0' && q[3] == '0')) ) { |
552 ((graphstep == 5) && (q[2] == '0' && q[3] == '0')) || |
|
553 ((graphstep == 6) && (hour % 2 == 0) && (q[2] == '0' && q[3] == '0')) || /* 120 minutes */ |
|
554 ((graphstep == 7) && (hour % 4 == 0) && (q[2] == '0' && q[3] == '0')) || /* 240 minutes */ |
|
555 ((graphstep >= 8) && (hour % 8 == 0) && (q[2] == '0' && q[3] == '0')) ) { /* 480 minutes */ |
551 heat_used = cool_used = 0; |
556 heat_used = cool_used = 0; |
552 if (heater_u && strcmp(heater_u, "NA") && (sscanf(heater_u, "%d", &h) == 1)) { |
557 if (heater_u && strcmp(heater_u, "NA") && (sscanf(heater_u, "%d", &h) == 1)) { |
553 if (h && heater_l) { |
558 if (h && heater_l) { |
554 heat_used = ((h - heater_l) * 100) / (GRAPH_INTERVAL[graphstep] * 60); |
559 heat_used = ((h - heater_l) * 100) / (GRAPH_INTERVAL[graphstep] * 60); |
555 } |
560 } |
1096 * LIST |
1101 * LIST |
1097 * LIST LOG |
1102 * LIST LOG |
1098 */ |
1103 */ |
1099 int cmd_list(char *buf) |
1104 int cmd_list(char *buf) |
1100 { |
1105 { |
1101 char *opt, *param, *filename, q[5], buffer[256], outbuf[256]; |
1106 char *opt, *param, *filename, q[5], hr[3], buffer[256], outbuf[256]; |
1102 char *date_n, *mode_n, *air_n, *beer_n, *target_n, *heater_n, *cooler_n, *room_n; |
1107 char *date_n, *mode_n, *air_n, *beer_n, *target_n, *heater_n, *cooler_n, *room_n; |
1103 char *heater_u, *cooler_u; |
1108 char *heater_u, *cooler_u; |
1104 int heater_l = 0, cooler_l = 0, h = 0, c = 0, heat_used = 0, cool_used = 0, lines = 0, graphstep = 0; |
1109 int heater_l = 0, cooler_l = 0, h = 0, c = 0, heat_used = 0, cool_used = 0, lines = 0, graphstep = 0; |
1105 units_list *unit; |
1110 units_list *unit; |
1106 FILE *fp; |
1111 FILE *fp; |
1170 for (graphstep = 1; graphstep <= MAX_INTERVALS; graphstep++) { |
1175 for (graphstep = 1; graphstep <= MAX_INTERVALS; graphstep++) { |
1171 if (lines < GRAPH_DATALINES[graphstep]) { |
1176 if (lines < GRAPH_DATALINES[graphstep]) { |
1172 break; |
1177 break; |
1173 } |
1178 } |
1174 } |
1179 } |
|
1180 if (graphstep > MAX_INTERVALS) |
|
1181 graphstep = MAX_INTERVALS; |
1175 syslog(LOG_NOTICE, "LIST LOG %s: lines=%d, interval=%d, graphstep=%d", unit->name, lines, GRAPH_INTERVAL[graphstep], graphstep); |
1182 syslog(LOG_NOTICE, "LIST LOG %s: lines=%d, interval=%d, graphstep=%d", unit->name, lines, GRAPH_INTERVAL[graphstep], graphstep); |
1176 |
1183 |
1177 while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) { |
1184 while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) { |
1178 /* |
1185 /* |
1179 * 2014-11-15 18:39,BEER,20.312,19.750,20.0,0,NA,NA,NA,78105,NA,NA |
1186 * 2014-11-15 18:39,BEER,20.312,19.750,20.0,0,NA,NA,NA,78105,NA,NA |
1180 */ |
1187 */ |
1181 q[0] = buffer[11]; |
1188 hr[0] = q[0] = buffer[11]; |
1182 q[1] = buffer[12]; |
1189 hr[1] = q[1] = buffer[12]; |
1183 q[2] = buffer[14]; |
1190 q[2] = buffer[14]; |
1184 q[3] = buffer[15]; |
1191 q[3] = buffer[15]; |
|
1192 hr[2] = '\0'; |
1185 buffer[strlen(buffer) -1] = '\0'; |
1193 buffer[strlen(buffer) -1] = '\0'; |
1186 date_n = strtok(buffer, ",\0"); /* timestamp */ |
1194 date_n = strtok(buffer, ",\0"); /* timestamp */ |
1187 mode_n = strtok(NULL, ",\0"); /* unit mode */ |
1195 mode_n = strtok(NULL, ",\0"); /* unit mode */ |
1188 air_n = strtok(NULL, ",\0"); /* air temp */ |
1196 air_n = strtok(NULL, ",\0"); /* air temp */ |
1189 beer_n = strtok(NULL, ",\0"); /* beer temp */ |
1197 beer_n = strtok(NULL, ",\0"); /* beer temp */ |
1199 |
1207 |
1200 if (strncmp(mode_n, (char *)"Mode", 4)) { |
1208 if (strncmp(mode_n, (char *)"Mode", 4)) { |
1201 /* |
1209 /* |
1202 * Output a line at the right intervals |
1210 * Output a line at the right intervals |
1203 */ |
1211 */ |
|
1212 int hour = atoi(hr); |
1204 if (((graphstep == 1)) || |
1213 if (((graphstep == 1)) || |
1205 ((graphstep == 2) && (q[3] == '0' || q[3] == '5')) || |
1214 ((graphstep == 2) && (q[3] == '0' || q[3] == '5')) || |
1206 ((graphstep == 3) && ((q[2] == '0' && q[3] == '0') || (q[2] == '1' && q[3] == '5') || (q[2] == '3' && q[3] == '0') || (q[2] == '4' && q[3] == '5'))) || |
1215 ((graphstep == 3) && ((q[2] == '0' && q[3] == '0') || (q[2] == '1' && q[3] == '5') || (q[2] == '3' && q[3] == '0') || (q[2] == '4' && q[3] == '5'))) || |
1207 ((graphstep == 4) && ((q[2] == '0' && q[3] == '0') || (q[2] == '3' && q[3] == '0'))) || |
1216 ((graphstep == 4) && ((q[2] == '0' && q[3] == '0') || (q[2] == '3' && q[3] == '0'))) || |
1208 ((graphstep == 5) && (q[2] == '0' && q[3] == '0')) ) { |
1217 ((graphstep == 5) && (q[2] == '0' && q[3] == '0')) || |
|
1218 ((graphstep == 6) && (hour % 2 == 0) && (q[2] == '0' && q[3] == '0')) || /* 120 minutes */ |
|
1219 ((graphstep == 7) && (hour % 4 == 0) && (q[2] == '0' && q[3] == '0')) || /* 240 minutes */ |
|
1220 ((graphstep >= 8) && (hour % 8 == 0) && (q[2] == '0' && q[3] == '0')) ) { /* 480 minutes */ |
1209 heat_used = cool_used = 0; |
1221 heat_used = cool_used = 0; |
1210 if (strcmp(heater_u, "NA") && (sscanf(heater_u, "%d", &h) == 1)) { |
1222 if (strcmp(heater_u, "NA") && (sscanf(heater_u, "%d", &h) == 1)) { |
1211 if (h && heater_l) { |
1223 if (h && heater_l) { |
1212 heat_used = ((h - heater_l) * 100) / (GRAPH_INTERVAL[graphstep] * 60); |
1224 heat_used = ((h - heater_l) * 100) / (GRAPH_INTERVAL[graphstep] * 60); |
1213 } |
1225 } |