LocalSave + clearOldData + SendLocalData
This commit is contained in:
parent
97346c1b06
commit
37ef459625
|
@ -48,6 +48,7 @@ void reconnect(void);
|
||||||
void initSensors(DHT *sensors, int number);
|
void initSensors(DHT *sensors, int number);
|
||||||
void readSensors(DHT sensors[], float temp[], float hum[], int number);
|
void readSensors(DHT sensors[], float temp[], float hum[], int number);
|
||||||
void sleep();
|
void sleep();
|
||||||
|
void clearOldData(int index);
|
||||||
void LocalSave();
|
void LocalSave();
|
||||||
void SendLocalData();
|
void SendLocalData();
|
||||||
std::tuple<int, int, int> getDate();
|
std::tuple<int, int, int> getDate();
|
||||||
|
|
164
src/main.cpp
164
src/main.cpp
|
@ -407,6 +407,7 @@ bool TestBoot(bool resOrRfsh)
|
||||||
nvs_close(my_handle);
|
nvs_close(my_handle);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//-------------------- Initialisation --------------------//
|
//-------------------- Initialisation --------------------//
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -458,57 +459,160 @@ void setup()
|
||||||
// Serial.println('\n');
|
// Serial.println('\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Définir la capacité maximale de stockage
|
||||||
|
const int maxDataSets = 11;
|
||||||
|
|
||||||
// Fonction pour sauvegarder les données localement
|
// Fonction pour sauvegarder les données localement
|
||||||
void LocalSave()
|
void LocalSave()
|
||||||
{
|
{
|
||||||
int chargelvl = getAverageChargeLevel(); // get de la batterie.
|
// Ouvre les préférences sous le nom "capteurs" en mode lecture/écriture
|
||||||
|
|
||||||
preferences.begin("capteurs", false);
|
preferences.begin("capteurs", false);
|
||||||
time_t rawtime;
|
|
||||||
rawtime = preferences.getInt("time", 1);
|
// Lit l'indice de la prochaine sauvegarde, ou initialise à 0 s'il n'existe pas
|
||||||
rawtime = TimeClient.getEpochTime();
|
int saveCounter = preferences.getInt("saveCounter", 0);
|
||||||
|
|
||||||
|
// Efface les anciennes données si nécessaire
|
||||||
|
if (saveCounter >= maxDataSets)
|
||||||
|
{
|
||||||
|
saveCounter = 0; // Réinitialise le compteur si la limite est atteinte
|
||||||
|
}
|
||||||
|
|
||||||
|
// Appelle la fonction pour effacer les données anciennes à l'index actuel
|
||||||
|
clearOldData(saveCounter);
|
||||||
|
|
||||||
|
// Calcule l'heure actuelle en secondes depuis l'époque Unix
|
||||||
|
int chargelvl = getAverageChargeLevel(); // Obtient le niveau moyen de la batterie
|
||||||
|
time_t rawtime = TimeClient.getEpochTime(); // Obtient l'heure actuelle
|
||||||
|
|
||||||
Serial.print("\n-----------------Save---------------------\n");
|
Serial.print("\n-----------------Save---------------------\n");
|
||||||
|
|
||||||
for (int i = 0; i < 5; i++) // Debut de la boucle pour récuperer les valeurs de la température et de l'humidité dans le tableau puis les enregistrer.
|
// Boucle pour sauvegarder les données de température et d'humidité
|
||||||
|
for (int i = 0; i < 5; i++)
|
||||||
{
|
{
|
||||||
char Temp[5];
|
char tempKey[16];
|
||||||
char Humi[5];
|
char humiKey[16];
|
||||||
float newTemp = preferences.getFloat(Temp, temp[i]);
|
|
||||||
float newHum = preferences.getFloat(Humi, hum[i]);
|
|
||||||
|
|
||||||
preferences.putFloat("temp", newTemp);
|
// Génère des clés uniques pour chaque valeur de température et d'humidité
|
||||||
preferences.putFloat("hum", newHum);
|
snprintf(tempKey, sizeof(tempKey), "temp%d_%d", saveCounter, i);
|
||||||
|
snprintf(humiKey, sizeof(humiKey), "hum%d_%d", saveCounter, i);
|
||||||
|
|
||||||
Serial.printf("temp: %0.2f\n", newTemp); // print pour vérifier si les valeurs enregistrées sont les bonnes.
|
// Sauvegarde les valeurs de température et d'humidité dans les préférences
|
||||||
Serial.printf("hum: %0.2f\n", newHum);
|
preferences.putFloat(tempKey, temp[i]);
|
||||||
|
preferences.putFloat(humiKey, hum[i]);
|
||||||
|
|
||||||
|
// Affiche les valeurs de température et d'humidité pour vérification
|
||||||
|
Serial.printf("temp[%d]: %0.2f\n", i, temp[i]);
|
||||||
|
Serial.printf("hum[%d]: %0.2f\n", i, hum[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sauvegarde le temps et le niveau de charge
|
||||||
|
char timeKey[16];
|
||||||
|
char chargeKey[16];
|
||||||
|
snprintf(timeKey, sizeof(timeKey), "time%d", saveCounter);
|
||||||
|
snprintf(chargeKey, sizeof(chargeKey), "chargelvl%d", saveCounter);
|
||||||
|
|
||||||
|
// Sauvegarde les valeurs de temps et de niveau de charge dans les préférences
|
||||||
|
preferences.putInt(timeKey, rawtime);
|
||||||
|
preferences.putInt(chargeKey, chargelvl);
|
||||||
|
|
||||||
|
// Affiche les valeurs de temps et de niveau de charge pour vérification
|
||||||
Serial.printf("time: %d \n", rawtime);
|
Serial.printf("time: %d \n", rawtime);
|
||||||
Serial.printf("chargelvl: %d\n", chargelvl); // print pour vérifier si les valeurs enregistrées sont les bonnes.
|
Serial.printf("chargelvl: %d\n", chargelvl);
|
||||||
preferences.putInt("time", rawtime);
|
|
||||||
preferences.putInt("chargelvl", chargelvl);
|
// Incrémente le compteur de sauvegardes et le sauvegarde
|
||||||
|
saveCounter++;
|
||||||
|
preferences.putInt("saveCounter", saveCounter);
|
||||||
|
|
||||||
|
// Termine l'accès aux préférences
|
||||||
preferences.end();
|
preferences.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fonction pour effacer les anciennes données si l'espace est insuffisant
|
||||||
|
void clearOldData(int index)
|
||||||
|
{
|
||||||
|
// Variables pour stocker les noms de clé formatés
|
||||||
|
char timeKey[16];
|
||||||
|
char chargeKey[16];
|
||||||
|
|
||||||
|
// Formate les noms de clé pour le temps et le niveau de charge en fonction de l'index donné
|
||||||
|
snprintf(timeKey, sizeof(timeKey), "time%d", index);
|
||||||
|
snprintf(chargeKey, sizeof(chargeKey), "chargelvl%d", index);
|
||||||
|
|
||||||
|
// Supprime les entrées correspondantes au temps et au niveau de charge
|
||||||
|
preferences.remove(timeKey);
|
||||||
|
preferences.remove(chargeKey);
|
||||||
|
|
||||||
|
// Boucle pour supprimer les entrées de température et d'humidité associées
|
||||||
|
for (int i = 0; i < 5; i++)
|
||||||
|
{
|
||||||
|
// Variables pour stocker les noms de clé formatés pour la température et l'humidité
|
||||||
|
char tempKey[16];
|
||||||
|
char humiKey[16];
|
||||||
|
|
||||||
|
// Formate les noms de clé pour la température et l'humidité en fonction de l'index et du sous-index
|
||||||
|
snprintf(tempKey, sizeof(tempKey), "temp%d_%d", index, i);
|
||||||
|
snprintf(humiKey, sizeof(humiKey), "hum%d_%d", index, i);
|
||||||
|
|
||||||
|
// Supprime les entrées correspondantes à la température et à l'humidité
|
||||||
|
preferences.remove(tempKey);
|
||||||
|
preferences.remove(humiKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Fonction pour envoyer les données locales
|
// Fonction pour envoyer les données locales
|
||||||
void SendLocalData()
|
void SendLocalData()
|
||||||
{
|
{
|
||||||
|
// Ouvre les préférences sous le nom "capteurs" en mode lecture seule
|
||||||
preferences.begin("capteurs", true);
|
preferences.begin("capteurs", true);
|
||||||
time_t rawtime = preferences.getInt("time", 0);
|
|
||||||
int chargelvl = preferences.getInt("chargelvl", 0);
|
|
||||||
|
|
||||||
temp[4] = preferences.getFloat("temp", 0);
|
// Lit le compteur de sauvegardes, ou initialise à 0 s'il n'existe pas
|
||||||
hum[4] = preferences.getFloat("hum", 0);
|
int saveCounter = preferences.getInt("saveCounter", 0);
|
||||||
|
|
||||||
char msgsld[150];
|
// Boucle pour envoyer les données sauvegardées
|
||||||
sprintf(msgsld, "%lu|%s|%0.2f %0.2f %0.2f %0.2f %0.2f|%0.2f %0.2f %0.2f %0.2f %0.2f|%d", rawtime, CLUSTER, temp[0], temp[1], temp[2], temp[3], temp[4], hum[0], hum[1], hum[2], hum[3], hum[4], chargelvl);
|
for (int counter = 0; counter < saveCounter; counter++)
|
||||||
|
{
|
||||||
|
char timeKey[16];
|
||||||
|
char chargeKey[16];
|
||||||
|
|
||||||
MqttClient.publish(TOPIC, msgsld);
|
// Génère des clés uniques pour le temps et le niveau de charge
|
||||||
Serial.println("msgsld : ");
|
snprintf(timeKey, sizeof(timeKey), "time%d", counter);
|
||||||
Serial.println(msgsld);
|
snprintf(chargeKey, sizeof(chargeKey), "chargelvl%d", counter);
|
||||||
|
|
||||||
preferences.clear();
|
// Lit les valeurs de temps et de niveau de charge depuis les préférences
|
||||||
|
time_t rawtime = preferences.getInt(timeKey, 0);
|
||||||
|
int chargelvl = preferences.getInt(chargeKey, 0);
|
||||||
|
|
||||||
|
// Boucle pour lire les données de température et d'humidité
|
||||||
|
for (int i = 0; i < 5; i++)
|
||||||
|
{
|
||||||
|
char tempKey[16];
|
||||||
|
char humiKey[16];
|
||||||
|
|
||||||
|
// Génère des clés uniques pour chaque valeur de température et d'humidité
|
||||||
|
snprintf(tempKey, sizeof(tempKey), "temp%d_%d", counter, i);
|
||||||
|
snprintf(humiKey, sizeof(humiKey), "hum%d_%d", counter, i);
|
||||||
|
|
||||||
|
// Lit les valeurs de température et d'humidité depuis les préférences
|
||||||
|
temp[i] = preferences.getFloat(tempKey, 0);
|
||||||
|
hum[i] = preferences.getFloat(humiKey, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prépare le message à envoyer
|
||||||
|
char msgsld[200];
|
||||||
|
sprintf(msgsld, "%lu|%s|%0.2f %0.2f %0.2f %0.2f %0.2f|%0.2f %0.2f %0.2f %0.2f %0.2f|%d", rawtime, CLUSTER, temp[0], temp[1], temp[2], temp[3], temp[4], hum[0], hum[1], hum[2], hum[3], hum[4], chargelvl);
|
||||||
|
|
||||||
|
// Envoie le message via MQTT
|
||||||
|
MqttClient.publish(TOPIC, msgsld);
|
||||||
|
Serial.println(msgsld);
|
||||||
|
|
||||||
|
// Supprime les clés après envoi
|
||||||
|
clearOldData(counter);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Réinitialise le compteur de sauvegardes
|
||||||
|
preferences.putInt("saveCounter", 0);
|
||||||
|
|
||||||
|
// Termine l'accès aux préférences
|
||||||
preferences.end();
|
preferences.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -561,10 +665,14 @@ void loop()
|
||||||
// Serial.println(msg); //debug print
|
// Serial.println(msg); //debug print
|
||||||
// Serial.println("date : "); //debug print
|
// Serial.println("date : "); //debug print
|
||||||
// Serial.println(date); //debug print
|
// Serial.println(date); //debug print
|
||||||
|
Serial.println("\n");
|
||||||
|
Serial.println("-----------------Local---------------------");
|
||||||
SendLocalData();
|
SendLocalData();
|
||||||
MqttClient.publish(TOPIC, date);
|
MqttClient.publish(TOPIC, date);
|
||||||
|
Serial.println("-----------------Brut---------------------");
|
||||||
|
Serial.println(date);
|
||||||
|
Serial.println("-----------------DeepSleep---------------------");
|
||||||
|
|
||||||
Serial.println("----------------- DeepSleep ---------------------");
|
|
||||||
delay(2000);
|
delay(2000);
|
||||||
|
|
||||||
sleep();
|
sleep();
|
||||||
|
|
Loading…
Reference in a new issue