thermferm/mqtt.c

changeset 510
2da3d3340403
parent 509
b5ae9017194f
child 513
a2732027afb3
--- 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 *)"}}");
 

mercurial