diff -r 93c1f91adaa7 -r 91c358556ecf thermferm/server.c --- 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);