Files
2026-05-24 13:05:18 +02:00

98 lines
4.3 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#pragma once
#include <Arduino.h>
#include <freertos/FreeRTOS.h>
#include <freertos/semphr.h>
// ── 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]);