thermferm/server.c

changeset 390
daa435544ab1
parent 389
584d40bb4b09
child 397
00ca08f5a6f8
--- a/thermferm/server.c	Thu Aug 20 14:32:56 2015 +0200
+++ b/thermferm/server.c	Thu Aug 20 15:58:32 2015 +0200
@@ -476,7 +476,7 @@
 	name = xstrcat(name, param);
 
 	if ((fp = fopen(name, "r"))) {
-	    char        buffer[256], outbuf[256], q[5];
+	    char        buffer[256], outbuf[256], q[5], hr[3];
 	    char	*date_n, *mode_n, *air_n, *beer_n, *target_n, *heater_n, *cooler_n, *room_n;
 	    char	*heater_u, *cooler_u;
 	    int		lines = 0, heater_l = 0, cooler_l = 0, h = 0, c = 0, heat_used = 0, cool_used = 0, graphstep = 0;
@@ -520,10 +520,11 @@
 		 *  not used ---------------------------------------------------+    |
 		 *  room_n ----------------------------------------------------------+
 		 */
-		q[0] = buffer[11];
-		q[1] = buffer[12];
+		hr[0] = q[0] = buffer[11];
+		hr[1] = q[1] = buffer[12];
 		q[2] = buffer[14];
 		q[3] = buffer[15];
+		hr[2] = '\0';
 		buffer[strlen(buffer) -1] = '\0';
 		date_n = strtok(buffer, ",\0"); /* timestamp            */
 		mode_n = strtok(NULL, ",\0");   /* unit mode            */
@@ -543,11 +544,15 @@
 		    /*
 		     * Output a line at the right intervals
 		     */
+		    int hour = atoi(hr);
 		    if (((graphstep == 1)) ||
 			((graphstep == 2) && (q[3] == '0' || q[3] == '5')) ||
 			((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'))) ||
 			((graphstep == 4) && ((q[2] == '0' && q[3] == '0') || (q[2] == '3' && q[3] == '0'))) ||
-			((graphstep == 5) && (q[2] == '0' && q[3] == '0')) ) {
+			((graphstep == 5) && (q[2] == '0' && q[3] == '0')) ||
+			((graphstep == 6) && (hour % 2 == 0) && (q[2] == '0' && q[3] == '0')) ||	/* 120 minutes	*/
+			((graphstep == 7) && (hour % 4 == 0) && (q[2] == '0' && q[3] == '0')) ||	/* 240 minutes	*/
+			((graphstep >= 8) && (hour % 8 == 0) && (q[2] == '0' && q[3] == '0')) ) {	/* 480 minutes	*/
 			heat_used = cool_used = 0;
 			if (heater_u && strcmp(heater_u, "NA") && (sscanf(heater_u, "%d", &h) == 1)) {
 			    if (h && heater_l) {
@@ -1098,7 +1103,7 @@
  */
 int cmd_list(char *buf)
 {
-    char		*opt, *param, *filename, q[5], buffer[256], outbuf[256];
+    char		*opt, *param, *filename, q[5], hr[3], buffer[256], outbuf[256];
     char		*date_n, *mode_n, *air_n, *beer_n, *target_n, *heater_n, *cooler_n, *room_n;
     char		*heater_u, *cooler_u;
     int			heater_l = 0, cooler_l = 0, h = 0, c = 0, heat_used = 0, cool_used = 0, lines = 0, graphstep = 0;
@@ -1172,16 +1177,19 @@
 		    break;
 		}
 	    }
+	    if (graphstep > MAX_INTERVALS)
+		graphstep = MAX_INTERVALS;
 	    syslog(LOG_NOTICE, "LIST LOG %s: lines=%d, interval=%d, graphstep=%d", unit->name, lines, GRAPH_INTERVAL[graphstep], graphstep);
 
 	    while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) {
 		/*
 		 * 2014-11-15 18:39,BEER,20.312,19.750,20.0,0,NA,NA,NA,78105,NA,NA
 		 */
-		q[0] = buffer[11];
-		q[1] = buffer[12];
+		hr[0] = q[0] = buffer[11];
+		hr[1] = q[1] = buffer[12];
 		q[2] = buffer[14];
 		q[3] = buffer[15];
+		hr[2] = '\0';
 		buffer[strlen(buffer) -1] = '\0';
 		date_n = strtok(buffer, ",\0");	/* timestamp		*/
 		mode_n = strtok(NULL, ",\0");	/* unit mode		*/
@@ -1201,11 +1209,15 @@
 		    /*
 		     * Output a line at the right intervals
 		     */
+		    int hour = atoi(hr);
 		    if (((graphstep == 1)) ||
 			((graphstep == 2) && (q[3] == '0' || q[3] == '5')) ||
 			((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'))) ||
 			((graphstep == 4) && ((q[2] == '0' && q[3] == '0') || (q[2] == '3' && q[3] == '0'))) ||
-			((graphstep == 5) && (q[2] == '0' && q[3] == '0')) ) {
+			((graphstep == 5) && (q[2] == '0' && q[3] == '0')) ||
+			((graphstep == 6) && (hour % 2 == 0) && (q[2] == '0' && q[3] == '0')) ||        /* 120 minutes  */
+			((graphstep == 7) && (hour % 4 == 0) && (q[2] == '0' && q[3] == '0')) ||        /* 240 minutes  */
+			((graphstep >= 8) && (hour % 8 == 0) && (q[2] == '0' && q[3] == '0')) ) {	/* 480 minutes	*/
 			heat_used = cool_used = 0;
 			if (strcmp(heater_u, "NA") && (sscanf(heater_u, "%d", &h) == 1)) {
 			    if (h && heater_l) {

mercurial