Ich speichere alle 10 Minuten meine Sensordaten in einer MariaDB auf einem IntelNuC.
Manchmal schlägt allerdings die Verbindung fehl. Da möchte ich das saveInterval bis zum erneuten Senden auf 10 Sekunden verkürzen und bei Erfolg wieder den normalen Zeitraum von 10 Minuten verwenden.
unsigned long saveInterval = 600000; //10 minutes
unsigned long last_saveInterval = 0;
void loop() {
if (millis() - last_saveInterval > saveInterval) {
if (save_data(&mqttClient, &wifiClient, msg.c_str());
last_saveInterval = millis();
}
else {
last_saveInterval = millis() + ??? oder - ???
}
}
}
Auf welchen Welchen Wert müsste in diesem Fall last_saveInterval gesetzt werden?
Wieso willst Du last_saveInterval ändern? Betrachte last_saveInterval als letzten Save-Versuch und ändere das saveInterval auf 10000.
Woran erkennst Du eine fehlgeschlagene Übertragung?
while (wifiClient->available()) {
response = wifiClient->readStringUntil('\r');
}
Hier erhält der wifiClient ein "OK" von einer PHP Seite, wenn die Daten gespeichert wurden.
Meinst du so?
if (millis() - last_saveInterval > saveInterval) {
if (save_data(&mqttClient, &wifiClient, msg.c_str());
// Das saveInterval steht in Minuten im Eeprom, da es durch den Anwender geändert werden kann.
// Den Wert müsste ich dann immer wieder neu einlesen.
saveInterval = EepromReadInt8(saveinterval_Address) * 60000;
last_saveInterval = millis();
}
else {
saveInterval = 10000;
}
}
// Den Wert müsste ich dann immer wieder neu einlesen.
Ja und? EEPROM lesen ist kein Problem.
Außerdem könntest du die Änderung von Fehler nach OK erkennen, und nur dann wieder den Original-Wert für Interval zurückholen.
if (save_data(&mqttClient, &wifiClient, msg.c_str());
Das funktioniert nicht.
Sorry, ich hatte vorher keine Unterscheidung nach dem result von save_data(...) drin und deshalb die öffnende Klammer vergessen.
Zudem: Benenne nicht irgendwas intervall, wenn es nicht intervall ist.
Was ist es dann???
OK, schon begriffen, last_saveInterval ist der ulong Wert von millis() und kein Intervall.
Deshalb besser last_save.
Werde ich so übernehmen, damit die Variablen eindeutiger werden.
Will ja nicht kleinlich sein, aber last_save_time wäre für mich auch nach Jahren eindeutiger. last_save wäre für mich eher eine Bezeichnung für einen bool, ob der letzte Speichervorgang gut ausging.
Ist aber meine persönliche Meinung, stammt aus keinem Lehrbuch.