thermferm/server.c

changeset 390
daa435544ab1
parent 389
584d40bb4b09
child 397
00ca08f5a6f8
equal deleted inserted replaced
389:584d40bb4b09 390:daa435544ab1
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 }

mercurial