main/task_mqtt.c

changeset 4
2a57c466bf45
parent 3
cd760fd45271
child 8
c6bbd1380f22
--- a/main/task_mqtt.c	Tue Oct 08 16:51:30 2019 +0200
+++ b/main/task_mqtt.c	Tue Oct 08 21:09:36 2019 +0200
@@ -30,6 +30,8 @@
 extern SemaphoreHandle_t	xSemaphoreWiFi;		///< WiFi lock semaphore
 
 extern unit_t			units[3];
+extern SemaphoreHandle_t	xSemaphoreUnits;
+
 extern const esp_app_desc_t	*app_desc;
 
 
@@ -99,38 +101,41 @@
     char	*payload = NULL;
     char        buf[128];
 
-    payload = xstrcpy((char *)"{\"uuid\":\"");
-    payload = xstrcat(payload, units[i].uuid);
-    payload = xstrcat(payload, (char *)"\",\"alias\":\"");
-    payload = xstrcat(payload, units[i].alias);
+    if (xSemaphoreTake(xSemaphoreUnits, 25) == pdTRUE) {
+    	payload = xstrcpy((char *)"{\"uuid\":\"");
+    	payload = xstrcat(payload, units[i].uuid);
+    	payload = xstrcat(payload, (char *)"\",\"alias\":\"");
+    	payload = xstrcat(payload, units[i].alias);
 
-    // temperature_state temperature_address temperature
-    payload = xstrcat(payload, (char *)"\",\"temperature\":{\"state\":\"");
-    payload = xstrcat(payload, (char *)sensState[units[i].temperature_state]);
-    payload = xstrcat(payload, (char *)"\",\"address\":\"");
-    payload = xstrcat(payload, (char *)units[i].temperature_rom_code);
-    payload = xstrcat(payload, (char *)"\",\"temperature\":");
-    sprintf(buf, "%.3f", units[i].temperature / 1000.0);
-    payload = xstrcat(payload, buf);
+    	// temperature_state temperature_address temperature
+    	payload = xstrcat(payload, (char *)"\",\"temperature\":{\"state\":\"");
+    	payload = xstrcat(payload, (char *)sensState[units[i].temperature_state]);
+    	payload = xstrcat(payload, (char *)"\",\"address\":\"");
+    	payload = xstrcat(payload, (char *)units[i].temperature_rom_code);
+    	payload = xstrcat(payload, (char *)"\",\"temperature\":");
+    	sprintf(buf, "%.3f", units[i].temperature / 1000.0);
+    	payload = xstrcat(payload, buf);
 
-    // pressure_state pressure_channel pressure_voltage pressure_zero pressure
-    payload = xstrcat(payload, (char *)"},\"pressure\":{\"state\":\"");
-    payload = xstrcat(payload, (char *)sensState[units[i].pressure_state]);
-    payload = xstrcat(payload, (char *)"\",\"channel\":");
-    sprintf(buf, "%d", units[i].pressure_channel);
-    payload = xstrcat(payload, buf);
-    payload = xstrcat(payload, (char *)",\"voltage\":");
-    sprintf(buf, "%.3f", units[i].pressure_voltage / 1000.0);
-    payload = xstrcat(payload, buf);
-    payload = xstrcat(payload, (char *)",\"zero\":");
-    sprintf(buf, "%.3f", units[i].pressure_zero / 1000.0);
-    payload = xstrcat(payload, buf);
-    payload = xstrcat(payload, (char *)",\"bar\":");
-    sprintf(buf, "%.2f", units[i].pressure / 1000.0);
-    payload = xstrcat(payload, buf);
-    payload = xstrcat(payload, (char *)"},\"mode\":\"");
-    payload = xstrcat(payload, (char *)unitMode[units[i].mode]);
-    payload = xstrcat(payload, (char *)"\"}");
+    	// pressure_state pressure_channel pressure_voltage pressure_zero pressure
+    	payload = xstrcat(payload, (char *)"},\"pressure\":{\"state\":\"");
+    	payload = xstrcat(payload, (char *)sensState[units[i].pressure_state]);
+    	payload = xstrcat(payload, (char *)"\",\"channel\":");
+    	sprintf(buf, "%d", units[i].pressure_channel);
+    	payload = xstrcat(payload, buf);
+    	payload = xstrcat(payload, (char *)",\"voltage\":");
+    	sprintf(buf, "%.3f", units[i].pressure_voltage / 1000.0);
+    	payload = xstrcat(payload, buf);
+    	payload = xstrcat(payload, (char *)",\"zero\":");
+    	sprintf(buf, "%.3f", units[i].pressure_zero / 1000.0);
+    	payload = xstrcat(payload, buf);
+    	payload = xstrcat(payload, (char *)",\"bar\":");
+    	sprintf(buf, "%.2f", units[i].pressure / 1000.0);
+    	payload = xstrcat(payload, buf);
+    	payload = xstrcat(payload, (char *)"},\"mode\":\"");
+	payload = xstrcat(payload, (char *)unitMode[units[i].mode]);
+    	payload = xstrcat(payload, (char *)"\"}");
+	xSemaphoreGive(xSemaphoreUnits);
+    }
     return payload;
 }
 

mercurial