feat: module MQTT complet + mutex xSondesMutex thread-safety

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-23 16:49:31 +02:00
parent 4854faa027
commit cd8232bafb
5 changed files with 45 additions and 26 deletions
+20 -14
View File
@@ -11,15 +11,18 @@ static AsyncWebSocket _ws("/ws");
static String _buildJsonSondes() {
JsonDocument doc;
JsonArray arr = doc["sondes"].to<JsonArray>();
for (uint8_t i = 0; i < NB_SONDES; i++) {
JsonObject s = arr.add<JsonObject>();
s["nom"] = sondesConfig[i].nom;
s["erreur"] = sondesEtat[i].erreur;
if (!sondesEtat[i].erreur) {
s["temp"] = String(sondesEtat[i].tempActuelle, 1);
} else {
s["temp"] = nullptr;
if (xSemaphoreTake(xSondesMutex, pdMS_TO_TICKS(20)) == pdTRUE) {
for (uint8_t i = 0; i < NB_SONDES; i++) {
JsonObject s = arr.add<JsonObject>();
s["nom"] = sondesConfig[i].nom;
s["erreur"] = sondesEtat[i].erreur;
if (!sondesEtat[i].erreur) {
s["temp"] = String(sondesEtat[i].tempActuelle, 1);
} else {
s["temp"] = nullptr;
}
}
xSemaphoreGive(xSondesMutex);
}
doc["uptime"] = (millis() - netStatus.uptimeDemarrage) / 1000;
doc["rssi"] = netStatus.rssi;
@@ -90,13 +93,16 @@ void web_server_init() {
// GET /api/temperatures
_server.on("/api/temperatures", HTTP_GET, [](AsyncWebServerRequest* req) {
JsonDocument doc;
for (uint8_t i = 0; i < NB_SONDES; i++) {
String key = "sonde_" + String(i + 1);
if (!sondesEtat[i].erreur) {
doc[key] = String(sondesEtat[i].tempActuelle, 1);
} else {
doc[key] = nullptr;
if (xSemaphoreTake(xSondesMutex, pdMS_TO_TICKS(20)) == pdTRUE) {
for (uint8_t i = 0; i < NB_SONDES; i++) {
String key = "sonde_" + String(i + 1);
if (!sondesEtat[i].erreur) {
doc[key] = String(sondesEtat[i].tempActuelle, 1);
} else {
doc[key] = nullptr;
}
}
xSemaphoreGive(xSondesMutex);
}
doc["unit"] = "C";
String out;