#pragma once #include #include #include // ── Version ───────────────────────────────────────────────────────── #define FIRMWARE_VERSION "1.2.2" // ── Constantes matérielles ────────────────────────────────────────── #define ONE_WIRE_BUS 27 // GPIO27 / D6 — bus OneWire DS18B20 #define NB_SONDES 3 #define MESURE_INTERVALLE 10000 // ms entre deux acquisitions #define HIST_TAILLE 288 // 24h × 12 points/h = 288 moyennes de 5 min #define HIST_PERIODE_MS 300000 // 5 min par point d'historique #define HIST_ECHANTILLONS (HIST_PERIODE_MS / MESURE_INTERVALLE) // 30 mesures #define HIST_SAVE_POINTS 12 // sauvegarde LittleFS toutes les 12 moyennes = 1h // ── Constantes réseau ─────────────────────────────────────────────── #define WIFI_SSID_1 "Livebox-5F80" #define WIFI_PASS_1 "3LU7fupGoVMta3qRcW" #define WIFI_SSID_2 "WifiHome2" #define WIFI_PASS_2 "louca2212" #define AP_SSID "ESP_CHEF_JARDIN" #define AP_PASS "Jardin2026" #define WIFI_TIMEOUT_MS 30000 // timeout avant bascule AP #define WIFI_RETRY_MS 30000 // délai entre retries STA #define MDNS_NOM "esp_jardin" // ── Constantes MQTT ───────────────────────────────────────────────── #define MQTT_BROKER "10.0.0.3" #define MQTT_PORT 1883 #define MQTT_USER "" #define MQTT_PASS_STR "" #define MQTT_CLIENT_ID "esp_jardin" #define MQTT_RETRY_MS 5000 #define MQTT_TOPIC_BASE "maison/jardin" #define MQTT_TOPIC_STATUS "maison/jardin/status" #define MQTT_HEARTBEAT_MS 60000 // publication "online" toutes les 60s // ── Structure : configuration d'une sonde (immuable) ──────────────── struct SondeConfig { const char* nom; const char* topic; const char* topicErreur; uint32_t intervalleMs; float deadband; }; // ── Structure : état runtime d'une sonde ─────────────────────────── struct SondeEtat { float tempActuelle; // NAN si erreur float dernierPublie; // dernière valeur publiée MQTT uint32_t dernierPubliMs; // timestamp dernière publication bool erreur; }; // ── Structure : point d'historique ───────────────────────────────── struct PointHistorique { uint32_t timestamp; float temps[NB_SONDES]; // NAN si sonde en erreur uint8_t samples[NB_SONDES]; }; // ── Structure : état réseau ───────────────────────────────────────── struct NetworkStatus { bool wifiConnecte; bool modeAP; bool mqttConnecte; int8_t rssi; uint32_t uptimeDemarrage; // millis() au moment de la connexion STA }; // ── Déclarations extern (définies dans main.cpp) ──────────────────── extern SondeConfig sondesConfig[NB_SONDES]; extern SondeEtat sondesEtat[NB_SONDES]; extern PointHistorique historique[HIST_TAILLE]; extern uint16_t histIdx; extern uint32_t histSeq; extern NetworkStatus netStatus; extern char mqttBrokerActif[64]; extern uint16_t mqttPortActif; // Mutex FreeRTOS protégeant l'accès concurrent au buffer historique // (Core 0 : callbacks AsyncWebServer vs Core 1 : loop/sensors_update) extern SemaphoreHandle_t xHistMutex; // Mutex FreeRTOS protégeant l'accès concurrent à sondesEtat[] extern SemaphoreHandle_t xSondesMutex; struct WifiCredential { const char* ssid; const char* password; }; static constexpr WifiCredential WIFI_RESEAUX[] = { { WIFI_SSID_1, WIFI_PASS_1 }, { WIFI_SSID_2, WIFI_PASS_2 }, }; static constexpr uint8_t NB_WIFI_RESEAUX = sizeof(WIFI_RESEAUX) / sizeof(WIFI_RESEAUX[0]);