Mon, 21 Jul 2014 22:19:24 +0200
Added LIST LOG command
thermferm/server.c | file | annotate | diff | comparison | revisions |
--- a/thermferm/server.c Mon Jul 21 19:31:28 2014 +0200 +++ b/thermferm/server.c Mon Jul 21 22:19:24 2014 +0200 @@ -192,16 +192,18 @@ /* * LIST * LIST BUS + * LIST LOG * LIST PROFILES * LIST UNIT */ int cmd_list(char *buf) { - char *opt; + char *opt, *filename, *p, q[2], buffer[256]; units_list *unit; profiles_list *profile; int i; DIR *fd; + FILE *fp; struct dirent *de; opt = strtok(buf, " \0"); @@ -251,6 +253,50 @@ return 1; } + } else if (strcmp(opt, (char *)"LOG") == 0) { + /* + * Get the logfile data and emit only one line per hour. + */ + if (current_unit == -1) { + srv_send((char *)"401 No fermenter unit selected"); + return 1; + } + + i = 0; + q[0] = q[1] = 'a'; + for (unit = Config.units; unit; unit = unit->next) { + i++; + if (i == current_unit) + break; + } + + srv_send((char *)"212 Logfile list follows:"); + if (getenv((char *)"USER") == NULL) { + filename = xstrcpy((char *)"/root"); + } else { + filename = xstrcpy(getenv((char *)"HOME")); + } + filename = xstrcat(filename, (char *)"/.thermferm/log/"); + filename = xstrcat(filename, unit->name); + filename = xstrcat(filename, (char *)".log"); + if ((fp = fopen(filename, "r"))) { + while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) { + buffer[strlen(buffer) -1] = '\0'; + p = buffer + 17; + if (strncmp(p, (char *)"Mode", 4)) { + if ((q[0] != buffer[11]) || (q[1] != buffer[12])) { + q[0] = buffer[11]; + q[1] = buffer[12]; + srv_send(buffer); + } + } + } + } + free(filename); + filename = NULL; + srv_send((char *)"."); + return 0; + } else if (strcmp(opt, (char *)"PROFILES") == 0) { /* * Fermenting profiles @@ -588,6 +634,7 @@ srv_send((char *)"LCD Get LCD screen (allways 4 rows of 20 characters)"); srv_send((char *)"LIST List all fermenter units"); srv_send((char *)"LIST BUS List 1-wire bus"); + srv_send((char *)"LIST LOG List logfile data in 1 hour lines"); srv_send((char *)"LIST PROFILES List available profiles"); srv_send((char *)"LIST UNIT List fermenter unit"); srv_send((char *)"MODE OFF|NONE|BEER|FRIDGE|PROFILE");