diff -r cd760fd45271 -r 2a57c466bf45 main/task_mqtt.c --- 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; }