Added LIST LOG command

Mon, 21 Jul 2014 22:19:24 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Mon, 21 Jul 2014 22:19:24 +0200
changeset 120
466c5cee0463
parent 119
a697f98cb757
child 121
03306c3bfd60

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");

mercurial