413 name = xstrcat(name, (char *)"/.thermferm/log/"); |
413 name = xstrcat(name, (char *)"/.thermferm/log/"); |
414 name = xstrcat(name, param); |
414 name = xstrcat(name, param); |
415 |
415 |
416 if ((fp = fopen(name, "r"))) { |
416 if ((fp = fopen(name, "r"))) { |
417 char buffer[256], outbuf[256], q[5]; |
417 char buffer[256], outbuf[256], q[5]; |
418 char *date_n, *mode_n, *air_n, *beer_n, *target_n, *heater_n, *cooler_n; |
418 char *date_n, *mode_n, *air_n, *beer_n, *target_n, *heater_n, *cooler_n, *room_n; |
419 char *heater_u, *cooler_u; |
419 char *heater_u, *cooler_u; |
420 int lines = 0, heater_l = 0, cooler_l = 0, h = 0, c = 0, heat_used = 0, cool_used = 0, graphstep = 0; |
420 int lines = 0, heater_l = 0, cooler_l = 0, h = 0, c = 0, heat_used = 0, cool_used = 0, graphstep = 0; |
|
421 float room_t = 0.0; |
421 |
422 |
422 srv_send((char *)"212 Logfile list follows:"); |
423 srv_send((char *)"212 Logfile list follows:"); |
423 while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) { |
424 while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) { |
424 lines++; |
425 lines++; |
425 } |
426 } |
437 } |
438 } |
438 syslog(LOG_NOTICE, "ARCHIVE LOG %s: lines=%d, interval=%d, graphstep=%d", param, lines, GRAPH_INTERVAL[graphstep], graphstep); |
439 syslog(LOG_NOTICE, "ARCHIVE LOG %s: lines=%d, interval=%d, graphstep=%d", param, lines, GRAPH_INTERVAL[graphstep], graphstep); |
439 |
440 |
440 while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) { |
441 while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) { |
441 /* |
442 /* |
442 * 2014-11-15 18:39,BEER,20.312,19.750,20.0,0,NA,NA,NA,78105,NA,NA |
443 * 2014-11-15 18:39,BEER,20.312,19.750,20.0,0,NA,NA,NA,78105,NA,NA,18.000 |
|
444 * | | | | | | | | | | | | | |
|
445 * date_n | | | | | | | | | | | | |
|
446 * mode_n ----------+ | | | | | | | | | | | |
|
447 * air_n -----------------+ | | | | | | | | | | |
|
448 * beer_n -----------------------+ | | | | | | | | | |
|
449 * target_n ---------------------------+ | | | | | | | | |
|
450 * heater_n -------------------------------+ | | | | | | | |
|
451 * cooler_n ---------------------------------+ | | | | | | |
|
452 * not used ------------------------------------+ | | | | | |
|
453 * not used ---------------------------------------+ | | | | |
|
454 * heater_u --------------------------------------------+ | | | |
|
455 * cooler_u ------------------------------------------------+ | | |
|
456 * not used ---------------------------------------------------+ | |
|
457 * room_n ----------------------------------------------------------+ |
443 */ |
458 */ |
444 q[0] = buffer[11]; |
459 q[0] = buffer[11]; |
445 q[1] = buffer[12]; |
460 q[1] = buffer[12]; |
446 q[2] = buffer[14]; |
461 q[2] = buffer[14]; |
447 q[3] = buffer[15]; |
462 q[3] = buffer[15]; |
455 cooler_n = strtok(NULL, ",\0"); /* current cooler state */ |
470 cooler_n = strtok(NULL, ",\0"); /* current cooler state */ |
456 heater_u = strtok(NULL, ",\0"); /* current fan state */ |
471 heater_u = strtok(NULL, ",\0"); /* current fan state */ |
457 heater_u = strtok(NULL, ",\0"); /* current door state */ |
472 heater_u = strtok(NULL, ",\0"); /* current door state */ |
458 heater_u = strtok(NULL, ",\0"); /* heater use counter */ |
473 heater_u = strtok(NULL, ",\0"); /* heater use counter */ |
459 cooler_u = strtok(NULL, ",\0"); /* cooler use counter */ |
474 cooler_u = strtok(NULL, ",\0"); /* cooler use counter */ |
|
475 room_n = strtok(NULL, ",\0"); /* fan use counter */ |
|
476 room_n = strtok(NULL, ",\0"); /* room temperature */ |
460 |
477 |
461 if (strncmp(mode_n, (char *)"Mode", 4)) { |
478 if (strncmp(mode_n, (char *)"Mode", 4)) { |
462 /* |
479 /* |
463 * Output a line at the right intervals |
480 * Output a line at the right intervals |
464 */ |
481 */ |
466 ((graphstep == 2) && (q[3] == '0' || q[3] == '5')) || |
483 ((graphstep == 2) && (q[3] == '0' || q[3] == '5')) || |
467 ((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'))) || |
484 ((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'))) || |
468 ((graphstep == 4) && ((q[2] == '0' && q[3] == '0') || (q[2] == '3' && q[3] == '0'))) || |
485 ((graphstep == 4) && ((q[2] == '0' && q[3] == '0') || (q[2] == '3' && q[3] == '0'))) || |
469 ((graphstep == 5) && (q[2] == '0' && q[3] == '0')) ) { |
486 ((graphstep == 5) && (q[2] == '0' && q[3] == '0')) ) { |
470 heat_used = cool_used = 0; |
487 heat_used = cool_used = 0; |
471 if (strcmp(heater_u, "NA") && (sscanf(heater_u, "%d", &h) == 1)) { |
488 if (heater_u && strcmp(heater_u, "NA") && (sscanf(heater_u, "%d", &h) == 1)) { |
472 if (h && heater_l) { |
489 if (h && heater_l) { |
473 heat_used = ((h - heater_l) * 100) / (GRAPH_INTERVAL[graphstep] * 60); |
490 heat_used = ((h - heater_l) * 100) / (GRAPH_INTERVAL[graphstep] * 60); |
474 } |
491 } |
475 } |
492 } |
476 if (strcmp(cooler_u, "NA") && (sscanf(cooler_u, "%d", &c) == 1)) { |
493 if (cooler_u && strcmp(cooler_u, "NA") && (sscanf(cooler_u, "%d", &c) == 1)) { |
477 if (c && cooler_l) { |
494 if (c && cooler_l) { |
478 cool_used = ((c - cooler_l) * 100) / (GRAPH_INTERVAL[graphstep] * 60); |
495 cool_used = ((c - cooler_l) * 100) / (GRAPH_INTERVAL[graphstep] * 60); |
479 } |
496 } |
480 } |
497 } |
481 snprintf(outbuf, 255, "%s,%s,%s,%s,%s,%s,%s,%d,%d", |
498 if (room_n) |
482 date_n, mode_n, air_n, beer_n, target_n, heater_n, cooler_n, heat_used, cool_used); |
499 sscanf(room_n, "%f", &room_t); |
|
500 snprintf(outbuf, 255, "%s,%s,%s,%s,%s,%s,%s,%d,%d,%.1f", |
|
501 date_n, mode_n, air_n, beer_n, target_n, heater_n, cooler_n, heat_used, cool_used, room_t); |
483 srv_send(outbuf); |
502 srv_send(outbuf); |
484 if (h && strcmp(heater_u, "NA")) |
503 if (heater_u && h && strcmp(heater_u, "NA")) |
485 heater_l = h; |
504 heater_l = h; |
486 if (c & strcmp(cooler_u, "NA")) |
505 if (cooler_u && c & strcmp(cooler_u, "NA")) |
487 cooler_l = c; |
506 cooler_l = c; |
488 } |
507 } |
489 } |
508 } |
490 } |
509 } |
491 |
510 |