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 readSensors(DHT sensors[], float temp[], float hum[], int number);
|
||||
void sleep();
|
||||
void clearOldData(int index);
|
||||
void LocalSave();
|
||||
void SendLocalData();
|
||||
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);
|
||||
return false;
|
||||
}
|
||||
|
||||
//-------------------- Initialisation --------------------//
|
||||
|
||||
/**
|
||||
|
@ -458,57 +459,160 @@ void setup()
|
|||
// Serial.println('\n');
|
||||
}
|
||||
|
||||
// Définir la capacité maximale de stockage
|
||||
const int maxDataSets = 11;
|
||||
|
||||
// Fonction pour sauvegarder les données localement
|
||||
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);
|
||||
time_t rawtime;
|
||||
rawtime = preferences.getInt("time", 1);
|
||||
rawtime = TimeClient.getEpochTime();
|
||||
|
||||
// Lit l'indice de la prochaine sauvegarde, ou initialise à 0 s'il n'existe pas
|
||||
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");
|
||||
|
||||
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 Humi[5];
|
||||
float newTemp = preferences.getFloat(Temp, temp[i]);
|
||||
float newHum = preferences.getFloat(Humi, hum[i]);
|
||||
char tempKey[16];
|
||||
char humiKey[16];
|
||||
|
||||
preferences.putFloat("temp", newTemp);
|
||||
preferences.putFloat("hum", newHum);
|
||||
// Génère des clés uniques pour chaque valeur de température et d'humidité
|
||||
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.
|
||||
Serial.printf("hum: %0.2f\n", newHum);
|
||||
// Sauvegarde les valeurs de température et d'humidité dans les préférences
|
||||
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("chargelvl: %d\n", chargelvl); // print pour vérifier si les valeurs enregistrées sont les bonnes.
|
||||
preferences.putInt("time", rawtime);
|
||||
preferences.putInt("chargelvl", chargelvl);
|
||||
Serial.printf("chargelvl: %d\n", 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();
|
||||
}
|
||||
|
||||
// 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
|
||||
void SendLocalData()
|
||||
{
|
||||
// Ouvre les préférences sous le nom "capteurs" en mode lecture seule
|
||||
preferences.begin("capteurs", true);
|
||||
time_t rawtime = preferences.getInt("time", 0);
|
||||
int chargelvl = preferences.getInt("chargelvl", 0);
|
||||
|
||||
temp[4] = preferences.getFloat("temp", 0);
|
||||
hum[4] = preferences.getFloat("hum", 0);
|
||||
// Lit le compteur de sauvegardes, ou initialise à 0 s'il n'existe pas
|
||||
int saveCounter = preferences.getInt("saveCounter", 0);
|
||||
|
||||
char msgsld[150];
|
||||
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);
|
||||
// Boucle pour envoyer les données sauvegardées
|
||||
for (int counter = 0; counter < saveCounter; counter++)
|
||||
{
|
||||
char timeKey[16];
|
||||
char chargeKey[16];
|
||||
|
||||
MqttClient.publish(TOPIC, msgsld);
|
||||
Serial.println("msgsld : ");
|
||||
Serial.println(msgsld);
|
||||
// Génère des clés uniques pour le temps et le niveau de charge
|
||||
snprintf(timeKey, sizeof(timeKey), "time%d", counter);
|
||||
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();
|
||||
}
|
||||
|
||||
|
@ -561,10 +665,14 @@ void loop()
|
|||
// Serial.println(msg); //debug print
|
||||
// Serial.println("date : "); //debug print
|
||||
// Serial.println(date); //debug print
|
||||
Serial.println("\n");
|
||||
Serial.println("-----------------Local---------------------");
|
||||
SendLocalData();
|
||||
MqttClient.publish(TOPIC, date);
|
||||
Serial.println("-----------------Brut---------------------");
|
||||
Serial.println(date);
|
||||
Serial.println("-----------------DeepSleep---------------------");
|
||||
|
||||
Serial.println("----------------- DeepSleep ---------------------");
|
||||
delay(2000);
|
||||
|
||||
sleep();
|
||||
|
|
Loading…
Reference in a new issue