diff --git a/AlarmeESP32.ino b/AlarmeESP32.ino index d39089b..3961ca1 100644 --- a/AlarmeESP32.ino +++ b/AlarmeESP32.ino @@ -1,137 +1,137 @@ -#include -#include -#include -#include -#include -#include -#include -#include + #include + #include + #include + #include + #include + #include + #include + #include -// WiFi Configuration -#define WIFI_SSID "ratio" -#define WIFI_PASSWORD "123456789" + // WiFi Configuration + #define WIFI_SSID "ratio" + #define WIFI_PASSWORD "123456789" -// Firebase Configuration -#define API_KEY "AIzaSyB8qf7aeI7F5l7d1NDhRQrNNLW8aPaOkl4" -#define DATABASE_URL "https://alarmeesp32-2ca19-default-rtdb.europe-west1.firebasedatabase.app" -#define USER_EMAIL "alarm@alarm.bip" -#define USER_PASSWORD "123456" -#define FIREBASE_USE_PSRAM + // Firebase Configuration + #define API_KEY "AIzaSyB8qf7aeI7F5l7d1NDhRQrNNLW8aPaOkl4" + #define DATABASE_URL "https://alarmeesp32-2ca19-default-rtdb.europe-west1.firebasedatabase.app" + #define USER_EMAIL "alarm@alarm.bip" + #define USER_PASSWORD "123456" + #define FIREBASE_USE_PSRAM -// Déclaration Firebase -FirebaseData fbdo, stream; -FirebaseAuth auth; -FirebaseConfig config; + // Déclaration Firebase + FirebaseData fbdo, stream; + FirebaseAuth auth; + FirebaseConfig config; -// Variables Alarme -volatile bool motionDetected = false; -bool armed = false, triggered = false; + // Variables Alarme + volatile bool motionDetected = false; + bool armed = false, triggered = false; -// NTP pour la gestion des logs -WiFiUDP ntpUDP; -NTPClient timeClient(ntpUDP, "pool.ntp.org"); + // NTP pour la gestion des logs + WiFiUDP ntpUDP; + NTPClient timeClient(ntpUDP, "pool.ntp.org"); -// Gestion de l'alarme -void IRAM_ATTR onMotionDetected() { - motionDetected = true; -} + // Gestion de l'alarme + void IRAM_ATTR onMotionDetected() { + motionDetected = true; + } -// Ajout de logs Firebase -void addLog(const char* messageLog) { - FirebaseJson logData; - timeClient.update(); - char timestampISO[25]; - time_t epochTime = timeClient.getEpochTime(); - strftime(timestampISO, sizeof(timestampISO), "%Y-%m-%dT%H:%M:%SZ", gmtime(&epochTime)); - - logData.add("timestamp", timestampISO); - logData.add("sender", "ALARM"); - logData.add("message", messageLog); + // Ajout de logs Firebase (sans récupérer les données) + void addLog(const char* messageLog) { + timeClient.update(); + char timestampISO[25]; + time_t epochTime = timeClient.getEpochTime(); + strftime(timestampISO, sizeof(timestampISO), "%Y-%m-%dT%H:%M:%SZ", gmtime(&epochTime)); - if (!Firebase.RTDB.pushJSON(&fbdo, "/Alarm/logs", &logData)) { - Serial.println("❌ Erreur ajout log Firebase : " + fbdo.errorReason()); - } -} + FirebaseJson logData; + logData.add("timestamp", timestampISO); + logData.add("sender", "ALARM"); + logData.add("message", messageLog); -// Gestion des mises à jour Firebase -void streamCallback(FirebaseStream data) { - Serial.printf("Firebase Update - Path: %s, Data: %s\n", data.dataPath().c_str(), data.stringData().c_str()); + // Pousser les logs sans vérifier la réponse pour économiser la mémoire + Firebase.RTDB.pushJSON(&fbdo, "/Alarm/logs", &logData); + } - if (data.dataPath() == "/armed") { - armed = data.boolData(); - Serial.printf("🔒 Alarme %s\n", armed ? "activée" : "désactivée"); - addLog(armed ? "Alarme armée" : "Alarme désarmée"); - } - else if (data.dataPath() == "/triggered") { - triggered = data.boolData(); - if (!armed) addLog("Alarme désactivée à distance"); - } -} + void streamCallback(FirebaseStream data) { + Serial.printf("🔥 Firebase Update - Path: %s\n", data.dataPath().c_str()); -void setup() { - Serial.begin(115200); - - // Connexion WiFi - WiFi.begin(WIFI_SSID, WIFI_PASSWORD); - while (WiFi.status() != WL_CONNECTED) { - Serial.print("."); - delay(500); - } - Serial.println("\n✅ WiFi connecté !"); - - // Initialisation Firebase - config.api_key = API_KEY; - config.database_url = DATABASE_URL; - auth.user.email = USER_EMAIL; - auth.user.password = USER_PASSWORD; - Firebase.begin(&config, &auth); - Firebase.reconnectWiFi(true); - - // Stream Firebase - if (!Firebase.RTDB.beginStream(&stream, "/Alarm")) { - Serial.printf("🔥 Erreur stream: %s\n", stream.errorReason().c_str()); - } - Firebase.RTDB.setStreamCallback(&stream, streamCallback, nullptr); - Firebase.RTDB.setBool(&fbdo, "/Alarm/triggered", false); - Firebase.RTDB.setBool(&fbdo, "/Alarm/armed", false); - - addLog("Alarme connectée"); - - // Configuration NTP - timeClient.begin(); - - // Configuration des capteurs - pinMode(A2, INPUT); - pinMode(D2, OUTPUT); - attachInterrupt(digitalPinToInterrupt(A2), onMotionDetected, RISING); - - blinkSlowGreen(); -} - -void loop() { - Firebase.ready(); - - if (armed) { - blinkSlowRed(); - if (motionDetected && !triggered) { - motionDetected = false; - Serial.println("🎯 Mouvement détecté !"); - blinkFastRed(); - startSirene(); - Firebase.RTDB.setBool(&fbdo, "/Alarm/triggered", true); - triggered = true; - addLog("Mouvement détecté, alarme déclenchée"); + if (data.dataType() == "boolean") { // Vérifie qu'on reçoit bien un booléen + if (data.dataPath() == "/armed") { + armed = data.boolData(); + Serial.printf("🔒 Alarme %s\n", armed ? "activée" : "désactivée"); + addLog(armed ? "Alarme armée" : "Alarme désarmée"); + } + else if (data.dataPath() == "/triggered") { + triggered = data.boolData(); + if (!armed) addLog("Alarme désactivée à distance"); } } - - if (!triggered) { - stopSirene(); - if (!armed) blinkSlowGreen(); - } else { - startSirene(); - blinkFastRed(); - } - - updateLed(); - updateSirene(); } + + void setup() { + Serial.begin(115200); + + // Connexion WiFi + WiFi.begin(WIFI_SSID, WIFI_PASSWORD); + while (WiFi.status() != WL_CONNECTED) { + Serial.print("."); + delay(500); + } + Serial.println("\n✅ WiFi connecté !"); + + // Initialisation Firebase + config.api_key = API_KEY; + config.database_url = DATABASE_URL; + auth.user.email = USER_EMAIL; + auth.user.password = USER_PASSWORD; + Firebase.begin(&config, &auth); + Firebase.reconnectWiFi(true); + + // Stream Firebase + if (!Firebase.RTDB.beginStream(&stream, "/Alarm/state")) { + Serial.printf("🔥 Erreur stream: %s\n", stream.errorReason().c_str()); + } + Firebase.RTDB.setStreamCallback(&stream, streamCallback, nullptr); + Firebase.RTDB.setBool(&fbdo, "/Alarm/state/triggered", false); + Firebase.RTDB.setBool(&fbdo, "/Alarm/state/armed", false); + + addLog("Alarme connectée"); + + // Configuration NTP + timeClient.begin(); + + // Configuration des capteurs + pinMode(A2, INPUT); + pinMode(D2, OUTPUT); + attachInterrupt(digitalPinToInterrupt(A2), onMotionDetected, RISING); + + blinkSlowGreen(); + } + + void loop() { + Firebase.ready(); + + if (armed) { + blinkSlowRed(); + if (motionDetected && !triggered) { + motionDetected = false; + Serial.println("🎯 Mouvement détecté !"); + blinkFastRed(); + startSirene(); + Firebase.RTDB.setBool(&fbdo, "/Alarm/state/triggered", true); + triggered = true; + addLog("Mouvement détecté, alarme déclenchée"); + } + } + + if (!triggered) { + stopSirene(); + if (!armed) blinkSlowGreen(); + } else { + startSirene(); + blinkFastRed(); + } + + updateLed(); + updateSirene(); + }