Version 0.6.0. The MQTT data messages are now allways the same length so that openhab will function with the message updates.

Fri, 19 May 2017 16:34:21 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Fri, 19 May 2017 16:34:21 +0200
changeset 510
2da3d3340403
parent 509
b5ae9017194f
child 511
2d1d43c3a2c2

Version 0.6.0. The MQTT data messages are now allways the same length so that openhab will function with the message updates.

configure file | annotate | diff | comparison | revisions
configure.ac file | annotate | diff | comparison | revisions
thermferm/mqtt.c file | annotate | diff | comparison | revisions
thermferm/server.c file | annotate | diff | comparison | revisions
thermferm/thermferm.c file | annotate | diff | comparison | revisions
thermferm/thermferm.h file | annotate | diff | comparison | revisions
--- a/configure	Mon May 08 20:54:51 2017 +0200
+++ b/configure	Fri May 19 16:34:21 2017 +0200
@@ -2035,7 +2035,7 @@
 
 
 PACKAGE="mbsePi-apps"
-VERSION="0.5.9"
+VERSION="0.6.0"
 COPYRIGHT="Copyright (C) 2014-2017 Michiel Broek, All Rights Reserved"
 CYEARS="2014-2017"
 
--- a/configure.ac	Mon May 08 20:54:51 2017 +0200
+++ b/configure.ac	Fri May 19 16:34:21 2017 +0200
@@ -8,7 +8,7 @@
 dnl General settings
 dnl After changeing the version number, run autoconf!
 PACKAGE="mbsePi-apps"
-VERSION="0.5.9"
+VERSION="0.6.0"
 COPYRIGHT="Copyright (C) 2014-2017 Michiel Broek, All Rights Reserved"
 CYEARS="2014-2017"
 AC_SUBST(PACKAGE)
--- a/thermferm/mqtt.c	Mon May 08 20:54:51 2017 +0200
+++ b/thermferm/mqtt.c	Fri May 19 16:34:21 2017 +0200
@@ -187,219 +187,168 @@
     prof_step           *pstep;
 
     payload = xstrcat(payload, (char *)"{");
-    if (birth || unit->mqtt_flag & MQTT_FLAG_MODE) {
-	// Also send these on mode change
+    if (birth) {
     	payload = xstrcat(payload, (char *)"\"uuid\":\"");
     	payload = xstrcat(payload, unit->uuid);
     	payload = xstrcat(payload, (char *)"\",\"alias\":\"");
     	payload = xstrcat(payload, unit->alias);
-    	payload = xstrcat(payload, (char *)"\",\"name\":\"");
-    	payload = xstrcat(payload, unit->name);
-    	payload = xstrcat(payload, (char *)"\"");
-	comma = true;
+	payload = xstrcat(payload, (char *)"\",");
     }
-    if (birth || unit->mqtt_flag & MQTT_FLAG_AIR) {
-	if (comma)
-	    payload = xstrcat(payload, (char *)",");
-     	if (unit->air_address) {
-	    payload = xstrcat(payload, (char *)"\"air\":{\"address\":\"");
-	    payload = xstrcat(payload, unit->air_address);
-	    payload = xstrcat(payload, (char *)"\",\"state\":\"");
-	    payload = xstrcat(payload, (char *)TEMPSTATE[unit->air_state]);
-            payload = xstrcat(payload, (char *)"\",\"temperature\":");
-            sprintf(buf, "%.3f", unit->air_temperature / 1000.0);
-            payload = xstrcat(payload, buf);
-	    payload = xstrcat(payload, (char *)"}");
-    	} else {
-	    payload = xstrcat(payload, (char *)"\"air\":null");
-    	}
-	comma = true;
+
+    payload = xstrcat(payload, (char *)"\"name\":\"");
+    payload = xstrcat(payload, unit->name);
+    if (unit->air_address) {
+	payload = xstrcat(payload, (char *)"\",\"air\":{\"address\":\"");
+	payload = xstrcat(payload, unit->air_address);
+	payload = xstrcat(payload, (char *)"\",\"state\":\"");
+	payload = xstrcat(payload, (char *)TEMPSTATE[unit->air_state]);
+        payload = xstrcat(payload, (char *)"\",\"temperature\":");
+        sprintf(buf, "%.3f", unit->air_temperature / 1000.0);
+        payload = xstrcat(payload, buf);
+	payload = xstrcat(payload, (char *)"}");
+    } else {
+	payload = xstrcat(payload, (char *)"\",\"air\":null");
     }
-    if (birth || unit->mqtt_flag & MQTT_FLAG_BEER) {
-	if (comma)
-	    payload = xstrcat(payload, (char *)",");
-    	if (unit->beer_address) {
-	    payload = xstrcat(payload, (char *)"\"beer\":{\"address\":\"");
-	    payload = xstrcat(payload, unit->beer_address);
-	    payload = xstrcat(payload, (char *)"\",\"state\":\"");
-	    payload = xstrcat(payload, (char *)TEMPSTATE[unit->beer_state]);
-            payload = xstrcat(payload, (char *)"\",\"temperature\":");
-            sprintf(buf, "%.3f", unit->beer_temperature / 1000.0);
-            payload = xstrcat(payload, buf);
-	    payload = xstrcat(payload, (char *)"}");
-    	} else {
-	    payload = xstrcat(payload, (char *)"\"beer\":null");
-    	}
-	comma = true;
+
+    if (unit->beer_address) {
+	payload = xstrcat(payload, (char *)",\"beer\":{\"address\":\"");
+	payload = xstrcat(payload, unit->beer_address);
+	payload = xstrcat(payload, (char *)"\",\"state\":\"");
+	payload = xstrcat(payload, (char *)TEMPSTATE[unit->beer_state]);
+        payload = xstrcat(payload, (char *)"\",\"temperature\":");
+        sprintf(buf, "%.3f", unit->beer_temperature / 1000.0);
+        payload = xstrcat(payload, buf);
+	payload = xstrcat(payload, (char *)"}");
+    } else {
+	payload = xstrcat(payload, (char *)",\"beer\":null");
     }
-    if (birth || unit->mqtt_flag & MQTT_FLAG_HEATER) {
-	if (comma)
-	    payload = xstrcat(payload, (char *)",");
-    	if (unit->heater_address) {
-	    payload = xstrcat(payload, (char *)"\"heater\":{\"address\":\"");
-	    payload = xstrcat(payload, unit->heater_address);
-	    payload = xstrcat(payload, (char *)"\",\"state\":");
-	    sprintf(buf, "%d", unit->heater_state);
-	    payload = xstrcat(payload, buf);
-	    payload = xstrcat(payload, (char *)"}");
-    	} else {
-	    payload = xstrcat(payload, (char *)"\"heater\":null");
-    	}
-	comma = true;
+
+    if (unit->heater_address) {
+	payload = xstrcat(payload, (char *)",\"heater\":{\"address\":\"");
+	payload = xstrcat(payload, unit->heater_address);
+	payload = xstrcat(payload, (char *)"\",\"state\":");
+	sprintf(buf, "%d", unit->heater_state);
+	payload = xstrcat(payload, buf);
+	payload = xstrcat(payload, (char *)"}");
+    } else {
+	payload = xstrcat(payload, (char *)",\"heater\":null");
     }
-    if (birth || unit->mqtt_flag & MQTT_FLAG_COOLER) {
-	if (comma)
-	    payload = xstrcat(payload, (char *)",");
-    	if (unit->cooler_address) {
-	    payload = xstrcat(payload, (char *)"\"cooler\":{\"address\":\"");
- 	    payload = xstrcat(payload, unit->cooler_address);
-	    payload = xstrcat(payload, (char *)"\",\"state\":");
-	    sprintf(buf, "%d", unit->cooler_state);
-	    payload = xstrcat(payload, buf);
-	    payload = xstrcat(payload, (char *)"}");
-    	} else {
-	    payload = xstrcat(payload, (char *)"\"cooler\":null");
-    	}
-	comma = true;
+    
+    if (unit->cooler_address) {
+	payload = xstrcat(payload, (char *)",\"cooler\":{\"address\":\"");
+ 	payload = xstrcat(payload, unit->cooler_address);
+	payload = xstrcat(payload, (char *)"\",\"state\":");
+	sprintf(buf, "%d", unit->cooler_state);
+	payload = xstrcat(payload, buf);
+	payload = xstrcat(payload, (char *)"}");
+    } else {
+	payload = xstrcat(payload, (char *)",\"cooler\":null");
     }
-    if (birth || unit->mqtt_flag & MQTT_FLAG_FAN) {
-	if (comma)
-	    payload = xstrcat(payload, (char *)",");
-    	if (unit->fan_address) {
-	    payload = xstrcat(payload, (char *)"\"fan\":{\"address\":\"");
-	    payload = xstrcat(payload, unit->fan_address);
-	    payload = xstrcat(payload, (char *)"\",\"state\":");
-	    sprintf(buf, "%d", unit->fan_state);
-	    payload = xstrcat(payload, buf);
-	    payload = xstrcat(payload, (char *)"}");
-    	} else {
-	    payload = xstrcat(payload, (char *)"\"fan\":null");
-    	}
-	comma = true;
+
+    if (unit->fan_address) {
+	payload = xstrcat(payload, (char *)",\"fan\":{\"address\":\"");
+	payload = xstrcat(payload, unit->fan_address);
+	payload = xstrcat(payload, (char *)"\",\"state\":");
+	sprintf(buf, "%d", unit->fan_state);
+	payload = xstrcat(payload, buf);
+	payload = xstrcat(payload, (char *)"}");
+    } else {
+	payload = xstrcat(payload, (char *)",\"fan\":null");
     }
-    if (birth || unit->mqtt_flag & MQTT_FLAG_DOOR) {
-	if (comma)
-	    payload = xstrcat(payload, (char *)",");
-    	if (unit->door_address) {
-	    payload = xstrcat(payload, (char *)"\"door\":{\"address\":\"");
-	    payload = xstrcat(payload, unit->door_address);
-	    payload = xstrcat(payload, (char *)"\",\"state\":");
-	    sprintf(buf, "%d", unit->door_state);
-	    payload = xstrcat(payload, buf);
-	    payload = xstrcat(payload, (char *)"}");
-    	} else {
-	    payload = xstrcat(payload, (char *)"\"door\":null");
-    	}
-	comma = true;
+
+    if (unit->door_address) {
+	payload = xstrcat(payload, (char *)",\"door\":{\"address\":\"");
+	payload = xstrcat(payload, unit->door_address);
+	payload = xstrcat(payload, (char *)"\",\"state\":");
+	sprintf(buf, "%d", unit->door_state);
+	payload = xstrcat(payload, buf);
+	payload = xstrcat(payload, (char *)"}");
+    } else {
+	payload = xstrcat(payload, (char *)",\"door\":null");
     }
-    if (birth || unit->mqtt_flag & MQTT_FLAG_LIGHT) {
-	if (comma)
-	    payload = xstrcat(payload, (char *)",");
-    	if (unit->light_address) {
-	    payload = xstrcat(payload, (char *)"\"light\":{\"address\":\"");
-	    payload = xstrcat(payload, unit->light_address);
-	    payload = xstrcat(payload, (char *)"\",\"state\":");
-	    sprintf(buf, "%d", unit->light_state);
-	    payload = xstrcat(payload, buf);
-	    payload = xstrcat(payload, (char *)"}");
-    	} else {
-	    payload = xstrcat(payload, (char *)"\"light\":null");
-    	}
-	comma = true;
+
+    if (unit->light_address) {
+	payload = xstrcat(payload, (char *)",\"light\":{\"address\":\"");
+	payload = xstrcat(payload, unit->light_address);
+	payload = xstrcat(payload, (char *)"\",\"state\":");
+	sprintf(buf, "%d", unit->light_state);
+	payload = xstrcat(payload, buf);
+	payload = xstrcat(payload, (char *)"}");
+    } else {
+	payload = xstrcat(payload, (char *)",\"light\":null");
     }
-    if (birth || unit->mqtt_flag & MQTT_FLAG_PSU) {
-	if (comma)
-	    payload = xstrcat(payload, (char *)",");
-    	if (unit->psu_address) {
-	    payload = xstrcat(payload, (char *)"\"psu\":{\"address\":\"");
-	    payload = xstrcat(payload, unit->psu_address);
-	    payload = xstrcat(payload, (char *)"\",\"state\":");
-	    sprintf(buf, "%d", unit->psu_state);
-	    payload = xstrcat(payload, buf);
-	    payload = xstrcat(payload, (char *)"}");
-    	} else {
-	    payload = xstrcat(payload, (char *)"\"psu\":null");
-    	}
-	comma = true;
-    }
-    if (birth || unit->mqtt_flag & MQTT_FLAG_MODE) {
-	if (comma)
-	    payload = xstrcat(payload, (char *)",");
-    	payload = xstrcat(payload, (char *)"\"mode\":\"");
-    	payload = xstrcat(payload, (char *)UNITMODE[unit->mode]);
-    	payload = xstrcat(payload, (char *)"\"");
-	comma = true;
-    }
-    if (birth || unit->mqtt_flag & MQTT_FLAG_SP) {
-    	if (unit->mode != UNITMODE_OFF) {
-	    if (comma)
-		payload = xstrcat(payload, (char *)",");
-	    payload = xstrcat(payload, (char *)"\"setpoint\":{\"low\":");
-            sprintf(buf, "%.1f", unit->PID_heat->SetP);
-            payload = xstrcat(payload, buf);
-            payload = xstrcat(payload, (char *)",\"high\":");
-            sprintf(buf, "%.1f", unit->PID_cool->SetP);
-            payload = xstrcat(payload, buf);
-	    payload = xstrcat(payload, (char *)"}");
-	    comma = true;
-    	}
+
+    if (unit->psu_address) {
+	payload = xstrcat(payload, (char *)",\"psu\":{\"address\":\"");
+	payload = xstrcat(payload, unit->psu_address);
+	payload = xstrcat(payload, (char *)"\",\"state\":");
+	sprintf(buf, "%d", unit->psu_state);
+	payload = xstrcat(payload, buf);
+	payload = xstrcat(payload, (char *)"}");
+    } else {
+	payload = xstrcat(payload, (char *)",\"psu\":null");
     }
-    if (birth || unit->mqtt_flag & MQTT_FLAG_PROFILE || unit->mqtt_flag & MQTT_FLAG_PERCENT) {
-    	if (unit->mode == UNITMODE_PROFILE && unit->profile) {
-	    for (profile = Config.profiles; profile; profile = profile->next) {
-	    	if (strcmp(unit->profile, profile->uuid) == 0) {
-		    if (comma)
-			payload = xstrcat(payload, (char *)",");
-		    payload = xstrcat(payload, (char *)"\"profile\":{\"uuid\":\"");
-		    payload = xstrcat(payload, unit->profile);
-		    payload = xstrcat(payload, (char *)",\"name\":\"");
-		    payload = xstrcat(payload, profile->name);
-		    payload = xstrcat(payload, (char *)"\",\"inittemp\":{\"low\":");
-		    sprintf(buf, "%.1f", profile->inittemp_lo);
-		    payload = xstrcat(payload, buf);
-		    payload = xstrcat(payload, (char *)",\"high\":");
-		    sprintf(buf, "%.1f", profile->inittemp_hi);
-		    payload = xstrcat(payload, buf);
-		    payload = xstrcat(payload, (char *)"},\"fridgemode\":");
-		    sprintf(buf, "%d", profile->fridge_mode);
-		    payload = xstrcat(payload, buf);
-		    comma = false;
-		    if (profile->steps) {
-		        payload = xstrcat(payload, (char *)",\"steps\":[");
-		        for (pstep = profile->steps; pstep; pstep = pstep->next) {
-			    if (comma)
-			    	payload = xstrcat(payload, (char *)",");
-			    payload = xstrcat(payload, (char *)"{\"resttime\":");
-			    sprintf(buf, "%d", pstep->resttime);
-			    payload = xstrcat(payload, buf);
-			    payload = xstrcat(payload, (char *)",\"steptime\":");
-			    sprintf(buf, "%d", pstep->steptime);
-			    payload = xstrcat(payload, buf);
-			    payload = xstrcat(payload, (char *)",\"target\":{\"low\":");
-			    sprintf(buf, "%.1f", pstep->target_lo);
-			    payload = xstrcat(payload, buf);
-			    payload = xstrcat(payload, (char *)",\"high\":");
-			    sprintf(buf, "%.1f", pstep->target_hi);
-			    payload = xstrcat(payload, buf);
-			    payload = xstrcat(payload, (char *)"},\"fridgemode\":");
-			    sprintf(buf, "%d", pstep->fridge_mode);
-			    payload = xstrcat(payload, buf);
-			    payload = xstrcat(payload, (char *)"}");
-			    comma = true;
-		    	}
-		    	payload = xstrcat(payload, (char *)"]");
-		    } else {
-		    	payload = xstrcat(payload, (char *)",\"steps\":null");
+
+    payload = xstrcat(payload, (char *)",\"mode\":\"");
+    payload = xstrcat(payload, (char *)UNITMODE[unit->mode]);
+    payload = xstrcat(payload, (char *)"\",\"setpoint\":{\"low\":");
+    sprintf(buf, "%.1f", unit->PID_heat->SetP);
+    payload = xstrcat(payload, buf);
+    payload = xstrcat(payload, (char *)",\"high\":");
+    sprintf(buf, "%.1f", unit->PID_cool->SetP);
+    payload = xstrcat(payload, buf);
+    payload = xstrcat(payload, (char *)"}");
+    
+    if (unit->mode == UNITMODE_PROFILE && unit->profile) {
+	for (profile = Config.profiles; profile; profile = profile->next) {
+	    if (strcmp(unit->profile, profile->uuid) == 0) {
+		payload = xstrcat(payload, (char *)",\"profile\":{\"uuid\":\"");
+		payload = xstrcat(payload, unit->profile);
+		payload = xstrcat(payload, (char *)",\"name\":\"");
+		payload = xstrcat(payload, profile->name);
+		payload = xstrcat(payload, (char *)"\",\"inittemp\":{\"low\":");
+		sprintf(buf, "%.1f", profile->inittemp_lo);
+		payload = xstrcat(payload, buf);
+		payload = xstrcat(payload, (char *)",\"high\":");
+		sprintf(buf, "%.1f", profile->inittemp_hi);
+		payload = xstrcat(payload, buf);
+		payload = xstrcat(payload, (char *)"},\"fridgemode\":");
+		sprintf(buf, "%d", profile->fridge_mode);
+		payload = xstrcat(payload, buf);
+		comma = false;
+		if (profile->steps) {
+		    payload = xstrcat(payload, (char *)",\"steps\":[");
+		    for (pstep = profile->steps; pstep; pstep = pstep->next) {
+			if (comma)
+			    payload = xstrcat(payload, (char *)",");
+			payload = xstrcat(payload, (char *)"{\"resttime\":");
+			sprintf(buf, "%d", pstep->resttime);
+			payload = xstrcat(payload, buf);
+			payload = xstrcat(payload, (char *)",\"steptime\":");
+			sprintf(buf, "%d", pstep->steptime);
+			payload = xstrcat(payload, buf);
+			payload = xstrcat(payload, (char *)",\"target\":{\"low\":");
+			sprintf(buf, "%.1f", pstep->target_lo);
+			payload = xstrcat(payload, buf);
+			payload = xstrcat(payload, (char *)",\"high\":");
+			sprintf(buf, "%.1f", pstep->target_hi);
+			payload = xstrcat(payload, buf);
+			payload = xstrcat(payload, (char *)"},\"fridgemode\":");
+			sprintf(buf, "%d", pstep->fridge_mode);
+			payload = xstrcat(payload, buf);
+			payload = xstrcat(payload, (char *)"}");
+			comma = true;
 		    }
-		    payload = xstrcat(payload, (char *)"}");
-		    break;
-	    	}
+		    payload = xstrcat(payload, (char *)"]");
+		} else {
+		    payload = xstrcat(payload, (char *)",\"steps\":null");
+		}
+		payload = xstrcat(payload, (char *)"}");
+		break;
 	    }
-    	} else {
-	    if (comma)
-		payload = xstrcat(payload, (char *)",");
-	    payload = xstrcat(payload, (char *)"\"profile\":null");
-    	}
+	}
+    } else {
+	payload = xstrcat(payload, (char *)",\"profile\":null");
     }
     payload = xstrcat(payload, (char *)"}");
 
@@ -493,25 +442,23 @@
 	comma = true;
     }
 
-    if (birth || flag & MQTT_NODE_HT) {
-    	if (Config.temp_address || Config.hum_address) {
-	    if (comma)
-		payload = xstrcat(payload, (char *)",");
-	    payload = xstrcat(payload, (char *)"\"HT\":{");
-	    if (Config.temp_address) {
-	    	payload = xstrcat(payload, (char *)"\"temperature\":");
-	    	sprintf(buf, "%.1f", Config.temp_value / 1000.0);
-	    	payload = xstrcat(payload, buf);
-	    }
-	    if (Config.temp_address && Config.hum_address)
-	    	payload = xstrcat(payload, (char *)",");
-	    if (Config.hum_address) {
-	        payload = xstrcat(payload, (char *)"\"humidity\":");
-	        sprintf(buf, "%.1f", Config.hum_value / 1000.0);
-	        payload = xstrcat(payload, buf);
-	    }
-	    payload = xstrcat(payload, (char *)"}");
-    	}
+    if (Config.temp_address || Config.hum_address) {
+	if (comma)
+	    payload = xstrcat(payload, (char *)",");
+	payload = xstrcat(payload, (char *)"\"HT\":{");
+	if (Config.temp_address) {
+	    payload = xstrcat(payload, (char *)"\"temperature\":");
+	    sprintf(buf, "%.1f", Config.temp_value / 1000.0);
+	    payload = xstrcat(payload, buf);
+	}
+	if (Config.temp_address && Config.hum_address)
+	    payload = xstrcat(payload, (char *)",");
+	if (Config.hum_address) {
+	    payload = xstrcat(payload, (char *)"\"humidity\":");
+	    sprintf(buf, "%.1f", Config.hum_value / 1000.0);
+	    payload = xstrcat(payload, buf);
+	}
+	payload = xstrcat(payload, (char *)"}");
     }
     payload = xstrcat(payload, (char *)"}}");
 
--- a/thermferm/server.c	Mon May 08 20:54:51 2017 +0200
+++ b/thermferm/server.c	Fri May 19 16:34:21 2017 +0200
@@ -2195,7 +2195,7 @@
 				    free(unit->name);
 				}
 				unit->name = xstrcpy(val);
-				unit->mqtt_flag |= (MQTT_FLAG_MODE);
+				unit->mqtt_flag |= MQTT_FLAG_DATA;
 
 			    } else if (val && (strcmp(kwd, (char *)"VOLUME") == 0)) {
 				if (sscanf(val, "%f", &fval) == 1) {
@@ -2216,7 +2216,7 @@
 				    device_count(TRUE, unit->air_address);
 				} else
 				    unit->air_address  = NULL;
-				unit->mqtt_flag |= MQTT_FLAG_AIR;
+				unit->mqtt_flag |= MQTT_FLAG_DATA;
 
 			    } else if (strcmp(kwd, (char *)"BEER_ADDRESS") == 0) {
 				if (val && unit->beer_address && (strcmp(val, unit->beer_address)))
@@ -2230,7 +2230,7 @@
 				    device_count(TRUE, unit->beer_address);
 				} else
 				    unit->beer_address = NULL;
-				unit->mqtt_flag |= MQTT_FLAG_BEER;
+				unit->mqtt_flag |= MQTT_FLAG_DATA;
 
 			    } else if (strcmp(kwd, (char *)"HEATER_ADDRESS") == 0) {
 				if (val && unit->heater_address && (strcmp(val, unit->heater_address)))
@@ -2244,14 +2244,14 @@
 				    device_count(TRUE, unit->heater_address);
 				} else
 				    unit->heater_address = NULL;
-				unit->mqtt_flag |= MQTT_FLAG_HEATER;
+				unit->mqtt_flag |= MQTT_FLAG_DATA;
 
 			    } else if (val && (strcmp(kwd, (char *)"HEATER_STATE") == 0)) {
 				if ((sscanf(val, "%d", &ival) == 1) && ((ival == 0) || (ival == 100))) {
 				    if (unit->heater_state != ival)
 					syslog(LOG_NOTICE, "Fermenter unit %s heater state %d to %d", unit->uuid, unit->heater_state, ival);
 				    unit->heater_state = ival;
-				    unit->mqtt_flag |= MQTT_FLAG_HEATER;
+				    unit->mqtt_flag |= MQTT_FLAG_DATA;
 				}
 
 			    } else if (val && (strcmp(kwd, (char *)"HEATER_DELAY") == 0)) {
@@ -2273,14 +2273,14 @@
 				    device_count(TRUE, unit->cooler_address);
 				} else
 				    unit->cooler_address = NULL;
-				unit->mqtt_flag |= MQTT_FLAG_COOLER;
+				unit->mqtt_flag |= MQTT_FLAG_DATA;
 
 			    } else if (val && (strcmp(kwd, (char *)"COOLER_STATE") == 0)) {
 				if ((sscanf(val, "%d", &ival) == 1) && ((ival == 0) || (ival == 100))) {
 				    if (unit->cooler_state != ival)
 					syslog(LOG_NOTICE, "Fermenter unit %s cooler state %d to %d", unit->uuid, unit->cooler_state, ival);
 				    unit->cooler_state = ival;
-				    unit->mqtt_flag |= MQTT_FLAG_COOLER;
+				    unit->mqtt_flag |= MQTT_FLAG_DATA;
 				}
 
 			    } else if (val && (strcmp(kwd, (char *)"COOLER_DELAY") == 0)) {
@@ -2302,14 +2302,14 @@
 				    device_count(TRUE, unit->fan_address);
 				} else
 				    unit->fan_address = NULL;
-				unit->mqtt_flag |= MQTT_FLAG_FAN;
+				unit->mqtt_flag |= MQTT_FLAG_DATA;
 			   
 			    } else if (val && (strcmp(kwd, (char *)"FAN_STATE") == 0)) {
 				if ((sscanf(val, "%d", &ival) == 1) && ((ival == 0) || (ival == 100))) {
 				    if (unit->fan_state != ival)
 					syslog(LOG_NOTICE, "Fermenter unit %s fan state %d to %d", unit->uuid, unit->fan_state, ival);    
 				    unit->fan_state = ival;
-				    unit->mqtt_flag |= MQTT_FLAG_FAN;
+				    unit->mqtt_flag |= MQTT_FLAG_DATA;
 				}
 			    
 			    } else if (val && (strcmp(kwd, (char *)"FAN_DELAY") == 0)) {
@@ -2331,14 +2331,14 @@
 				    device_count(TRUE, unit->light_address);
 				} else
 				    unit->light_address = NULL;
-				unit->mqtt_flag |= MQTT_FLAG_LIGHT;
+				unit->mqtt_flag |= MQTT_FLAG_DATA;
 
 			    } else if (val && (strcmp(kwd, (char *)"LIGHT_STATE") == 0)) {
 				if ((sscanf(val, "%d", &ival) == 1) && ((ival == 0) || (ival == 100))) {
 				    if (unit->light_state != ival)
 					syslog(LOG_NOTICE, "Fermenter unit %s light state %d to %d", unit->uuid, unit->light_state, ival);
 				    unit->light_state = ival;
-				    unit->mqtt_flag |= MQTT_FLAG_LIGHT;
+				    unit->mqtt_flag |= MQTT_FLAG_DATA;
 				}
 
 			    } else if (val && (strcmp(kwd, (char *)"LIGHT_DELAY") == 0)) {
@@ -2373,7 +2373,7 @@
 				    device_count(TRUE, unit->psu_address);
 				} else
 				    unit->psu_address = NULL;
-				unit->mqtt_flag |= MQTT_FLAG_PSU;
+				unit->mqtt_flag |= MQTT_FLAG_DATA;
 
 			    } else if (val && (strcmp(kwd, (char *)"MODE") == 0)) {
 				for (i = 0; i < 5; i++) {
@@ -2383,7 +2383,7 @@
 					    initlog(unit->name);
 					syslog(LOG_NOTICE, "Fermenter unit %s mode %s to %s", unit->uuid, UNITMODE[unit->mode], UNITMODE[i]);
 					unit->mode = i;
-					unit->mqtt_flag |= (MQTT_FLAG_MODE | MQTT_FLAG_SP);
+					unit->mqtt_flag |= MQTT_FLAG_DATA;
 					/* Allways turn everything off after a mode change */
 					unit->PID_cool->OutP = unit->PID_heat->OutP = 0.0;
 					unit->PID_cool->Mode = unit->PID_heat->Mode = PID_MODE_NONE;
@@ -2401,8 +2401,7 @@
 					    unit->prof_target_lo = unit->prof_target_hi = 20.0;
 					    unit->prof_fridge_mode = 0;
 					    if (unit->profile) {
-						unit->mqtt_flag |= MQTT_FLAG_PROFILE;
-						unit->mqtt_flag |= MQTT_FLAG_SP;
+						unit->mqtt_flag |= MQTT_FLAG_DATA;
 					    }
 					}
 					break;
@@ -2414,7 +2413,7 @@
 				    if (unit->fridge_set != fval)
 				    	syslog(LOG_NOTICE, "Fermenter unit %s fridge temperature %.1f to %.1f", unit->uuid, unit->fridge_set, fval);
 				    unit->fridge_set = fval;
-				    unit->mqtt_flag |= MQTT_FLAG_SP;
+				    unit->mqtt_flag |= MQTT_FLAG_DATA;
 				}
 
 			    } else if (val && (strcmp(kwd, (char *)"BEER_SET") == 0)) {
@@ -2422,7 +2421,7 @@
 				    if (unit->beer_set != fval)
 				    	syslog(LOG_NOTICE, "Fermenter unit %s beer temperature %.1f to %.1f", unit->uuid, unit->beer_set, fval);
 				    unit->beer_set = fval;
-				    unit->mqtt_flag |= MQTT_FLAG_SP;
+				    unit->mqtt_flag |= MQTT_FLAG_DATA;
 				}
 
 			    } else if (val && (strcmp(kwd, (char *)"PIDC_IMAX") == 0)) {
@@ -2520,7 +2519,7 @@
 				    device_out(unit->cooler_address, unit->cooler_state);
 				    device_out(unit->fan_address, unit->fan_state);
 				    device_out(unit->light_address, unit->light_state);
-				    unit->mqtt_flag |= (MQTT_FLAG_PROFILE | MQTT_FLAG_SP | MQTT_FLAG_HEATER | MQTT_FLAG_COOLER | MQTT_FLAG_FAN);
+				    unit->mqtt_flag |= MQTT_FLAG_DATA;
 				}
 
 			    } else if (val && (strcmp(kwd, (char *)"PROF_STATE") == 0)) {
@@ -2556,7 +2555,7 @@
 									}
 									break;
 					}
-					unit->mqtt_flag |= (MQTT_FLAG_SP | MQTT_FLAG_PROFILE | MQTT_FLAG_PERCENT);
+					unit->mqtt_flag |= MQTT_FLAG_DATA;
 					break;
 				    }
 				}
--- a/thermferm/thermferm.c	Mon May 08 20:54:51 2017 +0200
+++ b/thermferm/thermferm.c	Fri May 19 16:34:21 2017 +0200
@@ -395,7 +395,7 @@
 	initlog(current_unit->name);
     syslog(LOG_NOTICE, "Mode from %s to %s via panel interface", UNITMODE[current_unit->mode], UNITMODE[mode]);
     current_unit->mode = mode;
-    current_unit->mqtt_flag |= (MQTT_FLAG_SP | MQTT_FLAG_MODE);
+    current_unit->mqtt_flag |= MQTT_FLAG_DATA;
     /* Allways turn everything off after a mode change */
     current_unit->PID_cool->OutP = current_unit->PID_heat->OutP = 0.0;
     current_unit->PID_cool->Mode = current_unit->PID_heat->Mode = PID_MODE_NONE;
@@ -610,7 +610,7 @@
 			    if (temp_temp != current_unit->fridge_set) {
 				syslog(LOG_NOTICE, "Fridge temperature changed from %.1f to %.1f degrees from the panel", current_unit->fridge_set, temp_temp);
 				current_unit->fridge_set = temp_temp;
-				current_unit->mqtt_flag |= MQTT_FLAG_SP;
+				current_unit->mqtt_flag |= MQTT_FLAG_DATA;
 			    }
 			    go_menu(MENU_MODE_FRIDGE);
 			}
@@ -651,7 +651,7 @@
 			    if (temp_temp != current_unit->beer_set) {
 				syslog(LOG_NOTICE, "Beer temperature changed from %.1f to %.1f degrees from the panel", current_unit->beer_set, temp_temp);
 				current_unit->beer_set = temp_temp;
-				current_unit->mqtt_flag |= MQTT_FLAG_SP;
+				current_unit->mqtt_flag |= MQTT_FLAG_DATA;
 			    }
 			    go_menu(MENU_MODE_BEER);			    
 			}
@@ -733,7 +733,7 @@
 			    current_unit->prof_paused = current_unit->prof_primary_done = 0;
 			    current_unit->prof_peak_abs = current_unit->prof_peak_rel = 0.0;
 			    syslog(LOG_NOTICE, "Profile started from the panel");
-			    current_unit->mqtt_flag |= (MQTT_FLAG_SP | MQTT_FLAG_PROFILE | MQTT_FLAG_PERCENT);
+			    current_unit->mqtt_flag |= MQTT_FLAG_DATA;
 			    go_menu(MENU_MODE_PROFILE);
 			}
 			break;
@@ -745,7 +745,7 @@
 			    go_menu(MENU_PROFILE_ABORT);
 			if (key == KEY_ENTER) {
 			    current_unit->prof_state = PROFILE_PAUSE;
-			    current_unit->mqtt_flag |= (MQTT_FLAG_SP | MQTT_FLAG_PROFILE | MQTT_FLAG_PERCENT);
+			    current_unit->mqtt_flag |= MQTT_FLAG_DATA;
 			    syslog(LOG_NOTICE, "Profile pause from the panel");
 			    go_menu(MENU_MODE_PROFILE);
 			}
@@ -764,7 +764,7 @@
 			    current_unit->prof_state = PROFILE_OFF;
 			    current_unit->prof_started = 0;
 			    syslog(LOG_NOTICE, "Profile aborted from the panel");
-			    current_unit->mqtt_flag |= (MQTT_FLAG_SP | MQTT_FLAG_PROFILE | MQTT_FLAG_PERCENT);
+			    current_unit->mqtt_flag |= MQTT_FLAG_DATA;
 			    go_menu(MENU_MODE_PROFILE);
 			}
 			break;
@@ -777,7 +777,7 @@
 			if (key == KEY_ENTER) {
 			    current_unit->prof_state = PROFILE_RUN;
 			    syslog(LOG_NOTICE, "Profile resume from the panel");
-			    current_unit->mqtt_flag |= (MQTT_FLAG_SP | MQTT_FLAG_PROFILE | MQTT_FLAG_PERCENT);
+			    current_unit->mqtt_flag |= MQTT_FLAG_DATA;
 			    go_menu(MENU_MODE_PROFILE);
 			}
 			break;
@@ -788,7 +788,7 @@
 			if (key == KEY_ENTER) {
 			    if (current_unit->prof_state == PROFILE_DONE) {
 				current_unit->prof_state = PROFILE_OFF;
-				current_unit->mqtt_flag |= (MQTT_FLAG_SP | MQTT_FLAG_PROFILE | MQTT_FLAG_PERCENT);
+				current_unit->mqtt_flag |= MQTT_FLAG_DATA;
 				syslog(LOG_NOTICE, "Profile from done to off from the panel");
 			    }
 			}
@@ -1212,7 +1212,7 @@
 	    }
 	    row++;
 	    if (updateHT)
-		publishNData(false, MQTT_NODE_HT);
+		publishNData(false, 0);
 
 	    LCDunit = 0;
 	    for (unit = Config.units; unit; unit = unit->next) {
@@ -1234,7 +1234,7 @@
 			if ((unit->air_temperature == 0) ||
 			    (unit->air_temperature && (temp > (int)unit->air_temperature - deviation) && (temp < ((int)unit->air_temperature + deviation)))) {
 			    if (unit->air_temperature != temp)
-				unit->mqtt_flag |= MQTT_FLAG_AIR;
+				unit->mqtt_flag |= MQTT_FLAG_DATA;
 			    unit->air_temperature = temp;
 			    unit->air_state = 0;
 			} else {
@@ -1254,7 +1254,7 @@
 			if ((unit->beer_temperature == 0) ||
 			    (unit->beer_temperature && (temp > (int)unit->beer_temperature - deviation) && (temp < ((int)unit->beer_temperature + deviation)))) {
 			    if (unit->beer_temperature != temp)
-				unit->mqtt_flag |= MQTT_FLAG_BEER;
+				unit->mqtt_flag |= MQTT_FLAG_DATA;
     			    unit->beer_temperature = temp;
 			    unit->beer_state = 0;
 			} else {
@@ -1277,13 +1277,13 @@
 			    if (unit->door_state == 0) {
 			    	syslog(LOG_NOTICE, "Unit `%s' door closed", unit->name);
 			    	unit->door_state = 1;
-				unit->mqtt_flag |= MQTT_FLAG_DOOR;
+				unit->mqtt_flag |= MQTT_FLAG_DATA;
 			    }
 			} else {
 			    if (unit->door_state) {
 			    	syslog(LOG_NOTICE, "Unit `%s' door opened", unit->name);
 			    	unit->door_state = 0;
-				unit->mqtt_flag |= MQTT_FLAG_DOOR;
+				unit->mqtt_flag |= MQTT_FLAG_DATA;
 			    }
 			}
 		    } else {
@@ -1303,13 +1303,13 @@
 			    if (unit->psu_state == 0) {
 				syslog(LOG_NOTICE, "Unit `%s' PSU (12 volt) is on", unit->name);
 				unit->psu_state = 1;
-				unit->mqtt_flag |= MQTT_FLAG_PSU;
+				unit->mqtt_flag |= MQTT_FLAG_DATA;
 			    }
 			} else {
 			    if (unit->psu_state) {
 				syslog(LOG_NOTICE, "Unit `%s' PSU (12 volt) is off", unit->name);
 				unit->psu_state = 0;
-				unit->mqtt_flag |= MQTT_FLAG_PSU;
+				unit->mqtt_flag |= MQTT_FLAG_DATA;
 			    }
 			}
 		    } else {
@@ -1465,7 +1465,7 @@
 								profile->name, run_hours / 24, run_hours % 24, run_minutes % 60, current_step, 
 								unit->prof_percent, unit->prof_fridge_mode ? (char *)"air":(char *)"beer",
 								unit->prof_target_lo, unit->prof_target_hi);
-							unit->mqtt_flag |= (MQTT_FLAG_PERCENT | MQTT_FLAG_PROFILE | MQTT_FLAG_SP);
+							unit->mqtt_flag |= MQTT_FLAG_DATA;
 						    }
 						} else {
 						    /*
@@ -1474,7 +1474,7 @@
 						    unit->prof_state = PROFILE_DONE;
 						    unit->prof_percent = 100;
 						    syslog(LOG_NOTICE, "Profile `%s' is done", profile->name);
-						    unit->mqtt_flag |= (MQTT_FLAG_PERCENT | MQTT_FLAG_PROFILE | MQTT_FLAG_SP);
+						    unit->mqtt_flag |= MQTT_FLAG_DATA;
 						}
 						break;
 
@@ -1541,13 +1541,13 @@
 			} else {
 			    unit->light_state = 0;
 			    syslog(LOG_NOTICE, "Unit `%s' lights On => Off", unit->name);
-			    unit->mqtt_flag |= MQTT_FLAG_LIGHT;
+			    unit->mqtt_flag |= MQTT_FLAG_DATA;
 			}
 		    }
 		    if (!unit->door_state && !unit->light_state) {
 			unit->light_wait = unit->light_delay;   /* No delay to turn lights on   */
 			unit->light_state = 1;
-			unit->mqtt_flag |= MQTT_FLAG_LIGHT;
+			unit->mqtt_flag |= MQTT_FLAG_DATA;
 			syslog(LOG_NOTICE, "Unit `%s' lights Off => On", unit->name);
 		    }
 		    device_out(unit->light_address, unit->light_state);
@@ -1652,7 +1652,7 @@
 				    syslog(LOG_NOTICE, "Unit `%s' heater %d%% => %d%%", unit->name, unit->heater_state, power);
 				    unit->heater_state = power;
 				    if (unit->heater_address)
-					unit->mqtt_flag |= MQTT_FLAG_HEATER;
+					unit->mqtt_flag |= MQTT_FLAG_DATA;
 				}
 			    }
 			} else {
@@ -1663,7 +1663,7 @@
 				    syslog(LOG_NOTICE, "Unit `%s' heater On => Off", unit->name);
 				    unit->heater_state = 0;
 				    if (unit->heater_address)
-					unit->mqtt_flag |= MQTT_FLAG_HEATER;
+					unit->mqtt_flag |= MQTT_FLAG_DATA;
 				}
 			    }
 			}
@@ -1683,7 +1683,7 @@
 				    syslog(LOG_NOTICE, "Unit `%s' cooler %d%% => %d%%", unit->name, unit->cooler_state, power);
 				    unit->cooler_state = power;
 				    if (unit->cooler_address)
-					unit->mqtt_flag |= MQTT_FLAG_COOLER;
+					unit->mqtt_flag |= MQTT_FLAG_DATA;
 				}
 			    }
 			} else {
@@ -1694,7 +1694,7 @@
 				    syslog(LOG_NOTICE, "Unit `%s' cooler On => Off", unit->name);
 				    unit->cooler_state = 0;
 				    if (unit->cooler_address)
-					unit->mqtt_flag |= MQTT_FLAG_COOLER;
+					unit->mqtt_flag |= MQTT_FLAG_DATA;
 				}
 			    }
 			}
@@ -1720,7 +1720,7 @@
 				    syslog(LOG_NOTICE, "Unit `%s' Fan Off => On", unit->name);
 				    unit->fan_state = 100;
 				    if (unit->fan_address)
-					unit->mqtt_flag |= MQTT_FLAG_FAN;
+					unit->mqtt_flag |= MQTT_FLAG_DATA;
 			    	}
 			    }
 			} else {
@@ -1731,7 +1731,7 @@
 				    syslog(LOG_NOTICE, "Unit `%s' Fan On => Off", unit->name);
 			    	    unit->fan_state = 0;
 				    if (unit->fan_address)
-					unit->mqtt_flag |= MQTT_FLAG_FAN;
+					unit->mqtt_flag |= MQTT_FLAG_DATA;
 				}
 			    }
 			}
@@ -1772,7 +1772,7 @@
 		    }
 		}
 		if ((seconds == 60) && ((unit->mode == UNITMODE_FRIDGE) || (unit->mode == UNITMODE_BEER) || (unit->mode == UNITMODE_PROFILE))) {
-		    unit->mqtt_flag |= MQTT_FLAG_SP;
+		    unit->mqtt_flag |= MQTT_FLAG_DATA;
 		}
 #ifdef HAVE_WIRINGPI_H
 		piLock(LOCK_LCD);
@@ -1915,7 +1915,7 @@
 	device_out(unit->cooler_address, unit->cooler_state);
 	device_out(unit->fan_address, unit->fan_state);
 	device_out(unit->light_address, unit->light_state);
-	unit->mqtt_flag = MQTT_FLAG_HEATER | MQTT_FLAG_COOLER | MQTT_FLAG_FAN | MQTT_FLAG_LIGHT;
+	unit->mqtt_flag = MQTT_FLAG_DATA;
 	publishDData(unit);
 	syslog(LOG_NOTICE, "Unit `%s' stopped in mode %s", unit->name, UNITMODE[unit->mode]);
     }
--- a/thermferm/thermferm.h	Mon May 08 20:54:51 2017 +0200
+++ b/thermferm/thermferm.h	Fri May 19 16:34:21 2017 +0200
@@ -191,21 +191,9 @@
 #define	UNITMODE_BEER		3		/* Unit acts as beer cooler	*/
 #define	UNITMODE_PROFILE	4		/* Unit runs in profile mode	*/
 
-#define	MQTT_FLAG_SP		0x0001		/* Show setpoint values		*/
-#define	MQTT_FLAG_AIR		0x0002		/* Show air temperature		*/
-#define	MQTT_FLAG_BEER		0x0004		/* Show beer temperature	*/
-#define	MQTT_FLAG_MODE		0x0008		/* Show unit mode		*/
-#define	MQTT_FLAG_HEATER	0x0010		/* Show heater state		*/
-#define	MQTT_FLAG_COOLER	0x0020		/* Show cooler state		*/
-#define	MQTT_FLAG_FAN		0x0040		/* Show fan state		*/
-#define	MQTT_FLAG_DOOR		0x0080		/* Show door state		*/
-#define	MQTT_FLAG_LIGHT		0x0100		/* Show light state		*/
-#define	MQTT_FLAG_PSU		0x0200		/* Show PSU state		*/
-#define	MQTT_FLAG_PROFILE	0x0400		/* Show profile settings	*/
-#define	MQTT_FLAG_PERCENT	0x0800		/* Show profile percent		*/
+#define	MQTT_FLAG_DATA		0x0001		/* Show updated data values	*/
 
 #define	MQTT_NODE_CONTROL	0x0001		/* Show node control		*/
-#define	MQTT_NODE_HT		0x0002		/* Show node humidity/temp	*/
 
 
 

mercurial