diff -r 63a003914b72 -r 07819a7ad3c1 thermferm/server.c --- a/thermferm/server.c Sun Aug 24 23:01:32 2014 +0200 +++ b/thermferm/server.c Mon Aug 25 20:47:30 2014 +0200 @@ -585,8 +585,8 @@ */ int cmd_list(char *buf) { - 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; + char *opt, *param, *filename, q[5], buffer[256], *copy = NULL; + char *mode_o = NULL, *mode_n, *heater_o = NULL, *heater_n, *cooler_o = NULL, *cooler_n; units_list *unit; FILE *fp; @@ -612,7 +612,7 @@ return 1; } - q[0] = q[1] = 'a'; + q[0] = q[1] = q[2] = q[3] = q[4] = 'a'; for (unit = Config.units; unit; unit = unit->next) { if (strcmp(param, unit->uuid) == 0) break; @@ -633,31 +633,32 @@ 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"); /* skip air_temp */ + heater_n = strtok(NULL, ",\0"); /* skip beer temp */ + heater_n = strtok(NULL, ",\0"); /* skip target temp */ 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])) { + /* + * Output a line each 10 minutes or if something changes. + */ + if ((q[0] != buffer[11]) || (q[1] != buffer[12]) || (q[3] != buffer[14])) { q[0] = buffer[11]; q[1] = buffer[12]; + q[2] = buffer[13]; + q[3] = buffer[14]; srv_send(copy); - } else if ((mode_o && strcmp(mode_o, mode_n)) || (target_o && strcmp(target_o, target_n)) || + } else if ((mode_o && strcmp(mode_o, mode_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); @@ -666,6 +667,15 @@ cooler_o = xstrcpy(cooler_n); } } + if (mode_o) + free(mode_o); + mode_o = NULL; + if (heater_o) + free(heater_o); + heater_o = NULL; + if (cooler_o) + free(cooler_o); + cooler_o = NULL; free(filename); filename = NULL; srv_send((char *)".");