LIST LOG also output lines on state changes

Sun, 24 Aug 2014 14:41:31 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Sun, 24 Aug 2014 14:41:31 +0200
changeset 264
91c358556ecf
parent 263
93c1f91adaa7
child 265
63a003914b72

LIST LOG also output lines on state changes

thermferm/server.c file | annotate | diff | comparison | revisions
thermferm/simulator.c file | annotate | diff | comparison | revisions
--- a/thermferm/server.c	Sat Aug 23 23:43:11 2014 +0200
+++ b/thermferm/server.c	Sun Aug 24 14:41:31 2014 +0200
@@ -585,7 +585,8 @@
  */
 int cmd_list(char *buf)
 {
-    char		*opt, *param, *filename, *p, q[2], buffer[256];
+    char		*opt, *param, *filename, q[2], buffer[256], *copy = NULL;
+    char		*mode_o = NULL, *mode_n, *target_o = NULL, *target_n, *heater_o = NULL, *heater_n, *cooler_o = NULL, *cooler_n;
     units_list		*unit;
     FILE		*fp;
 
@@ -629,14 +630,40 @@
 	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)) {
+		copy = xstrcpy(buffer);
+		mode_n = strtok(buffer, ",\0");
+		mode_n = strtok(NULL, ",\0");
+		target_n = strtok(NULL, ",\0");	/* skip air_temp	*/
+		target_n = strtok(NULL, ",\0");	/* skip beer temp	*/
+		target_n = strtok(NULL, ",\0");
+		heater_n = strtok(NULL, ",\0");
+		cooler_n = strtok(NULL, ",\0");
+
+		if (strncmp(mode_n, (char *)"Mode", 4)) {
 		    if ((q[0] != buffer[11]) || (q[1] != buffer[12])) {
 			q[0] = buffer[11];
 			q[1] = buffer[12];
-		    	srv_send(buffer);
+		    	srv_send(copy);
+		    } else if ((mode_o && strcmp(mode_o, mode_n)) || (target_o && strcmp(target_o, target_n)) ||
+			       (heater_o && strcmp(heater_o, heater_n)) || (cooler_o && strcmp(cooler_o, cooler_n))) {
+			srv_send(copy);
 		    }
 		}
+
+		free(copy);
+		copy = NULL;
+		if (mode_o)
+		    free(mode_o);
+		mode_o = xstrcpy(mode_n);
+		if (target_o)
+		    free(target_o);
+		target_o = xstrcpy(target_n);
+		if (heater_o)
+		    free(heater_o);
+		heater_o = xstrcpy(heater_n);
+		if (cooler_o)
+		    free(cooler_o);
+		cooler_o = xstrcpy(cooler_n);
 	    }
 	}
 	free(filename);
--- a/thermferm/simulator.c	Sat Aug 23 23:43:11 2014 +0200
+++ b/thermferm/simulator.c	Sun Aug 24 14:41:31 2014 +0200
@@ -41,7 +41,7 @@
     time_t		now, last = (time_t)0;
     int			seconds = 0;
     double		k_room_air, sqm_room_air, thick_room_air, heat_transfer;
-    double		t_change, vhc_air = 0.00121, vhc_water = 4.1796;
+    double		t_change, vhc_air = 1.21, vhc_water = 4179.6;
 
     syslog(LOG_NOTICE, "Thread my_simulator_loop started");
     if (debug)
@@ -67,10 +67,11 @@
 	    	 * the room temperature.
 	    	 */
 		sqm_room_air = (cbrtl(simulator->volume_air) * cbrtl(simulator->volume_air) * 6) / 100;	/* square meters all fridge sides */
-		thick_room_air = 0.02;	/* 4 cm walls	*/
+		thick_room_air = 0.04;	/* 4 cm walls	*/
 		k_room_air = 0.03;	/* Polystrene	*/
 		heat_transfer=(k_room_air * sqm_room_air * (simulator->room_temperature - simulator->air_temperature)) / thick_room_air;
 		if (heat_transfer != 0)
+//		    t_change = heat_transfer * vhc_air * (simulator->volume_air / 1000);
 		    t_change = vhc_air / (heat_transfer * (simulator->volume_air * 1000));
 		else
 		    t_change = 0.0;

mercurial