Conflit gestion de temps et envois dans la base de données

Bonjour à tous,

J'ai un petit conflit gestion de temps et d’envois dans ma base de données, c'est a dire que je veux cadencer mes envois dans une base de données, mais quand j'essaie d'envoyer mes données dans la base conditionné par :

if (currentSecond==0){

Le "currentSecond==0" est juste pour mes tests en theorie ça sera toutes les heures.

Plus aucun envoie dans la base de données ne se fait, si je supprime ce if le code envoie bien a la base de données.

Donc si vous avez un idée, je vous mets le code complet en dessous.

#include <ESP8266WiFi.h>           // Use this for WiFi instead of Ethernet.h
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
#include <NTPClient.h>
#include <WiFiUdp.h>

IPAddress server_addr(1, 1, 1,1);  // IP of the MySQL *server* here
char user[] = "xxxxxxxxxx";              // MySQL user login username
char password[] = "xxxxxxxxx";        // MySQL user login password

// Sample query
char INSERT_SQL[] = "INSERT INTO u984373661_prem_db.hello_arduino (message) VALUES ('Hello, Arduino!')";

// WiFi card example
char ssid[] = "xxxxxxxxxx";         // your SSID
char pass[] = "xxxxxxxxxxx";     // your SSID Password

WiFiClient client;                 // Use this for WiFi instead of EthernetClient
MySQL_Connection conn(&client);
MySQL_Cursor* cursor;

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org");

void setup()
{
  Serial.begin(115200);
  while (!Serial); // wait for serial port to connect. Needed for Leonardo only

  // Begin WiFi section
  Serial.printf("\nConnecting to %s", ssid);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  // print out info about the connection:
  Serial.println("\nConnected to network");
  Serial.print("My IP address is: ");
  Serial.println(WiFi.localIP());

  Serial.print("Connecting to SQL...  ");
  if (conn.connect(server_addr, 3306, user, password))
    Serial.println("OK.");
  else
    Serial.println("FAILED.");

  // create MySQL cursor object
  cursor = new MySQL_Cursor(&conn);
  timeClient.begin();
  timeClient.setTimeOffset(7200);
}

void loop()
{
  timeClient.update();

  int currentHour = timeClient.getHours();
  Serial.print("Hour: ");
  Serial.println(currentHour);

  int currentMinute = timeClient.getMinutes();
  Serial.print("Minutes: ");
  Serial.println(currentMinute);

  int currentSecond = timeClient.getSeconds();
  Serial.print("Seconds: ");
  Serial.println(currentSecond); timeClient.update();



  if (currentSecond == 0) {


    if (conn.connected()) {
      cursor->execute(INSERT_SQL);
      Serial.println("OK---------------.");
    }
  }

  delay(1000);
}

si vous n'avez pas de bol (surtout avec un délai de 1s à la fin) vous allez rater le moment où les secondes sont nulles.

Il faut calculer le temps écoulé depuis le dernier envoi et s'il est supérieur à X alors effectuer l'envoi et noter l'heure de ce nouveau dernier envoi

(si ce sont des intervalles d'une heure, millis() peut-être suffisant pour cela, pas besoin de NTP)

Ok merci J-M-L,

Je vais retravailler mon code dans ce sens, je reviens après pour donner les résultats.

Par contre une question avec millis(), c'est que j'aurais voulu que ce soit toutes les heures, mais a une heure bien défini, c'est a dire a chaque début de nouvelle heure par exemple, et je ne pense pas que millis() puisse le gérer.
Est ce qu'un module RTC pourrait résoudre le problème, plutôt que le NTP ?

Oui si vous voulez caler sur le début de l'heure officielle alors il vous faut un moyen de l'obtenir

dans ce cas demandez à obtenir ce qu'on appelle l'Epoch Time (le nombre de secondes depuis le 1er janvier 1970) avec getEpochTime() et si vous ratez l'heure pleine (minutes. à 0 et secondes à 0) vous pouvez quand même savoir que ça fait plus de 3600 secondes qu'il n'y a pas eu d'enregistrement.

attention vous ne voulez pas non plus balancer des dizaines d'enregistrements, donc il faut un moyen de se souvenir que vous l'avez fait pour une heure donnée

Voici mon code avec un getEpochTime(), seulement, il ne fonctionne que quand je démarrage le programme et qu'il reste moins de 10s avant d'arriver sur le démarrage d'une nouvelle minute.
Cependant, je ne vois pas ce qui cloche dans mon code.
Je ne fait que définir combien de seconde il me reste avant d'arriver sur le début de la minute suivante et de le rajouter a mon délai et ce, uniquement au démarrage du programme.

Ensuite une autre question est que comme je ne calibre le démarrage qu'au lancement du programme, il va y avoir un décalage avec le temps réel, car le millis() le doit pas être super précis?

#include <ESP8266WiFi.h>           // Use this for WiFi instead of Ethernet.h
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
#include <NTPClient.h>
#include <WiFiUdp.h>

IPAddress server_addr(1, 1, 1, 1);  // IP of the MySQL *server* here
char user[] = "xxxxxxxxx";              // MySQL user login username
char password[] = "xxxxxxxxxxx";        // MySQL user login password

// Sample query
char INSERT_SQL[] = "INSERT INTO u984373661_prem_db.hello_arduino (message) VALUES ('Hello, Arduino!')";

// WiFi card example
char ssid[] = "xxxxxxxx";         // your SSID
char pass[] = "xxxxxxxxx";     // your SSID Password

unsigned long previousMillis = 0;
boolean a = true;
int diffTime = 0;

WiFiClient client;                 // Use this for WiFi instead of EthernetClient
MySQL_Connection conn(&client);
MySQL_Cursor* cursor;

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org");

void setup()
{
  Serial.begin(115200);
  while (!Serial); // wait for serial port to connect. Needed for Leonardo only

  // Begin WiFi section
  Serial.printf("\nConnecting to %s", ssid);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  // print out info about the connection:
  Serial.println("\nConnected to network");
  Serial.print("My IP address is: ");
  Serial.println(WiFi.localIP());

  Serial.print("Connecting to SQL...  ");
  if (conn.connect(server_addr, 3306, user, password))
    Serial.println("OK.");
  else
    Serial.println("FAILED.");

  // create MySQL cursor object
  cursor = new MySQL_Cursor(&conn);
  timeClient.begin();
  timeClient.setTimeOffset(7200);


}

void loop()
{

  
  while (a == true) {
    timeClient.update();
    time_t epochTime = timeClient.getEpochTime();
    diffTime = (60 - (epochTime%60  )) * 1000;

    Serial.print("---------------------------------");
    Serial.println(diffTime);
    Serial.println(epochTime%60);
    a = false;

  }

  unsigned long currentMillis = millis();
  Serial.println(currentMillis - previousMillis);
  if (currentMillis - previousMillis >= 10000 - diffTime) {
    diffTime = 0;
    // save the last time you updated the DHT values
    previousMillis = currentMillis;


    if (conn.connected()) {
      cursor->execute(INSERT_SQL);
      Serial.println("OK---------------.");
    }
  }

  delay(1000);
}

essayez un truc comme cela

#include <ESP8266WiFi.h>           // Use this for WiFi instead of Ethernet.h
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
#include <NTPClient.h>
#include <WiFiUdp.h>

IPAddress server_addr(1, 1, 1, 1);  // IP of the MySQL *server* here
char user[] = "xxxxxxxxx";              // MySQL user login username
char password[] = "xxxxxxxxxxx";        // MySQL user login password

// Sample query
char INSERT_SQL[] = "INSERT INTO u984373661_prem_db.hello_arduino (message) VALUES ('Hello, Arduino!')";

// WiFi card example
char ssid[] = "xxxxxxxx";         // your SSID
char pass[] = "xxxxxxxxx";     // your SSID Password
WiFiClient client;                 // Use this for WiFi instead of EthernetClient
MySQL_Connection conn(&client);
MySQL_Cursor* cursor;

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org");

void envoi() {
  if (conn.connected()) {
    cursor->execute(INSERT_SQL);
    Serial.println("OK---------------.");
  }
}

void emissionSiBesoin() {
  const uint32_t periodeEnvoi = 3600; // en secondes
  const uint32_t uneMinute = 60; // en secondes
  static uint32_t dernierEnvoi = -periodeEnvoi;
  timeClient.update();
  uint32_t maintenant = timeClient.getEpochTime(); // nombre de secondes depuis le 1er janvier 1970

  int currentMinute = ;
  int currentSecond = ;

  if ((timeClient.getMinutes() == 0) && (timeClient.getSeconds() == 0) && (maintenant - dernierEnvoi > uneMinute)) ||  (maintenant - dernierEnvoi > periodeEnvoi)) {
    envoi();
    dernierEnvoi = maintenant;
  }
}

void setup()
{
  Serial.begin(115200);
  while (!Serial); // wait for serial port to connect. Needed for Leonardo only

  // Begin WiFi section
  Serial.printf("\nConnecting to %s", ssid);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.write('.');
  }

  // print out info about the connection:
  Serial.println("\nConnected to network");
  Serial.print("My IP address is: ");   Serial.println(WiFi.localIP());

  Serial.print("Connecting to SQL...  ");
  if (conn.connect(server_addr, 3306, user, password))
    Serial.println("OK.");
  else
    Serial.println("FAILED.");

  // create MySQL cursor object
  cursor = new MySQL_Cursor(&conn);
  timeClient.begin();
  timeClient.setTimeOffset(7200);
}


void loop() {
  emissionSiBesoin();
}

le test est le suivant

  if ((timeClient.getMinutes() == 0) && (timeClient.getSeconds() == 0) && (maintenant - dernierEnvoi > uneMinute)) ||  (maintenant - dernierEnvoi > periodeEnvoi)) {

ça dit

si
   c'est l'heure pleine et que je n'ai pas encore envoyé pour cette heure
ou
  que je n'ai pas envoyé depuis plus d'une heure
alors 
  envoyer

comme le code va tourner assez vite, il se peut qu'on revienne dans la même seconde HH:00:00 sur le test et là on ne veut pas renvoyer donc c'est pour cela que je regarde si au moins une minute s'est écoulée depuis le dernier envoi. En pratique une seconde devrait suffire mais je prends un peu de marge.

Merci pour ton code,

J'ai rajouté une parenthèse juste après le if, je l'ai mis entre guillemet dans le code si dessous:

if "("((timeClient.getMinutes() == 0) && (timeClient.getSeconds() == 0) && (maintenant - dernierEnvoi > uneMinute)) || (maintenant - dernierEnvoi > periodeEnvoi)) {

J'ai fait des essais et il y a quelque chose que je ne comprend pas, si je mets ces paramètres pour tester sur une plus courte période:

void emissionSiBesoin() {
  const uint32_t periodeEnvoi = 15; // en secondes
  const uint32_t uneMinute = 60; // en secondes
  static uint32_t dernierEnvoi = -periodeEnvoi;
  timeClient.update();
  uint32_t maintenant = timeClient.getEpochTime(); // nombre de secondes depuis le 1er janvier 1970

  if (((timeClient.getMinutes() == 0) && (timeClient.getSeconds() == 0) && (maintenant - dernierEnvoi > uneMinute)) ||  (maintenant - dernierEnvoi > periodeEnvoi)) {
    envoi();
    dernierEnvoi = maintenant;
  }
}

ça boucle toutes les 15 s, donc normal.

Par contre avec ces paramètres:

void emissionSiBesoin() {
  const uint32_t periodeEnvoi = 30; // en secondes
  const uint32_t uneMinute = 60; // en secondes
  static uint32_t dernierEnvoi = -periodeEnvoi;
  timeClient.update();
  uint32_t maintenant = timeClient.getEpochTime(); // nombre de secondes depuis le 1er janvier 1970

  if (((timeClient.getMinutes() == 0) && (timeClient.getSeconds() == 0) && (maintenant - dernierEnvoi > uneMinute)) ||  (maintenant - dernierEnvoi > periodeEnvoi)) {
    envoi();
    dernierEnvoi = maintenant;
  }
}

ça ne boucle pas, alors que ça devrait boucler toutes les 30s et je ne comprend pas pourquoi.

bizarre. rajoutez des impressions pour voir les valuers des minutes, secondes, de maintenant et dernierEnvoi

J'ai un défilement hyper rapide, mais voila sur quelques défilements:

Je peux peut être mettre un délai?

20
55
1665598855
1665598842
20
55
1665598855
1665598842
20
55
1665598855
1665598842
20
55
1665598855
1665598842
20
55
1665598855
1665598842

oui un petit délai d'une demi seconde pour voir ce qu'il se passe quand on arrive aux 15s

voila avec un délai:

34
16
1665599656
1665599641
34
16
1665599656
1665599641
34
17
1665599657
1665599641
OK---------------.
34
17
1665599657
1665599657
34
18
1665599658
1665599657
34
18
1665599658
1665599657

vous imprimez dans quel ordre? (mettez le code)

Voila le code:

void emissionSiBesoin() {
  const uint32_t periodeEnvoi = 15; // en secondes
  const uint32_t uneMinute = 60; // en secondes
  static uint32_t dernierEnvoi = -periodeEnvoi;
  timeClient.update();
  uint32_t maintenant = timeClient.getEpochTime(); // nombre de secondes depuis le 1er janvier 1970
Serial.println(timeClient.getMinutes());
Serial.println(timeClient.getSeconds());
Serial.println(maintenant);
Serial.println(dernierEnvoi);
delay(500);
  if (((timeClient.getMinutes() == 0) && (timeClient.getSeconds() == 0) && (maintenant - dernierEnvoi > uneMinute)) ||  (maintenant - dernierEnvoi > periodeEnvoi)) {
    envoi();
    dernierEnvoi = maintenant;
  }
}

le délai est mal placé car vous imprimez les données mais faites le test une demi seconde plus tard

essayez avec cela

void emissionSiBesoin() {
  const uint32_t periodeEnvoi = 15; // en secondes
  const uint32_t uneMinute = 60; // en secondes
  static uint32_t dernierEnvoi = -periodeEnvoi;
  timeClient.update();
  uint32_t maintenant = timeClient.getEpochTime(); // nombre de secondes depuis le 1er janvier 1970
  int m = timeClient.getMinutes();
  int s = timeClient.getSeconds();
  Serial.print("m="); Serial.print(m);
  Serial.print(", s=");
  Serial.print(s);
  Serial.print(", ");
  Serial.print(maintenant);
  Serial.print(" - ");
  Serial.print(dernierEnvoi);
  Serial.print(" --> ∆ = ");
  Serial.println("maintenant - dernierEnvoi");

  if ((m == 0) && (s == 0) && (maintenant - dernierEnvoi > uneMinute)) {
    Serial.println("Envoi sur 00:00");
    envoi();
    dernierEnvoi = maintenant;
  }
  else if (maintenant - dernierEnvoi > periodeEnvoi) {
    Serial.print("Envoi sur timeout > "); Serial.println(periodeEnvoi);
    envoi();
    dernierEnvoi = maintenant;
  } else {
    Serial.println(".");
  }

  delay(500);
}

voila:


m=56, s=30, 1665600990 - 1665600976 --> ∆ = maintenant - dernierEnvoi
.
m=56, s=30, 1665600990 - 1665600976 --> ∆ = maintenant - dernierEnvoi
.
m=56, s=31, 1665600991 - 1665600976 --> ∆ = maintenant - dernierEnvoi
.
m=56, s=31, 1665600991 - 1665600976 --> ∆ = maintenant - dernierEnvoi
.
m=56, s=32, 1665600992 - 1665600976 --> ∆ = maintenant - dernierEnvoi
Envoi sur timeout > 15
OK---------------.
m=56, s=32, 1665600992 - 1665600992 --> ∆ = maintenant - dernierEnvoi
.
m=56, s=33, 1665600993 - 1665600992 --> ∆ = maintenant - dernierEnvoi
.
m=56, s=33, 1665600993 - 1665600992 --> ∆ = maintenant - dernierEnvoi
.
m=56, s=34, 1665600994 - 1665600992 --> ∆ = maintenant - dernierEnvoi
.
m=56, s=34, 1665600994 - 1665600992 --> ∆ = maintenant - dernierEnvoi

zut, j'ai mis des guillemets en trop

void emissionSiBesoin() {
  const uint32_t periodeEnvoi = 15; // en secondes
  const uint32_t uneMinute = 60; // en secondes
  static uint32_t dernierEnvoi = -periodeEnvoi;
  timeClient.update();
  uint32_t maintenant = timeClient.getEpochTime(); // nombre de secondes depuis le 1er janvier 1970
  int m = timeClient.getMinutes();
  int s = timeClient.getSeconds();
  Serial.print("m="); Serial.print(m);
  Serial.print(", s=");
  Serial.print(s);
  Serial.print(", ");
  Serial.print(maintenant);
  Serial.print(" - ");
  Serial.print(dernierEnvoi);
  Serial.print(" --> ∆ = ");
  Serial.println(maintenant - dernierEnvoi);

  if ((m == 0) && (s == 0) && (maintenant - dernierEnvoi > uneMinute)) {
    Serial.println("Envoi sur 00:00");
    envoi();
    dernierEnvoi = maintenant;
  }
  else if (maintenant - dernierEnvoi > periodeEnvoi) {
    Serial.print("Envoi sur timeout > "); Serial.println(periodeEnvoi);
    envoi();
    dernierEnvoi = maintenant;
  } else {
    Serial.println(".");
  }

  delay(500);
}

laissez tourner un bonne minute complète

Voila le résultat:

OK.
m=27, s=7, 1665606427 - 4294967281 --> ∆ = 1665606442
Envoi sur timeout > 15
OK---------------.
m=27, s=8, 1665606428 - 1665606427 --> ∆ = 1
.
m=27, s=8, 1665606428 - 1665606427 --> ∆ = 1
.
m=27, s=9, 1665606429 - 1665606427 --> ∆ = 2
.
m=27, s=9, 1665606429 - 1665606427 --> ∆ = 2
.
m=27, s=10, 1665606430 - 1665606427 --> ∆ = 3
.
m=27, s=10, 1665606430 - 1665606427 --> ∆ = 3
.
m=27, s=11, 1665606431 - 1665606427 --> ∆ = 4
.
m=27, s=11, 1665606431 - 1665606427 --> ∆ = 4
.
m=27, s=12, 1665606432 - 1665606427 --> ∆ = 5
.
m=27, s=12, 1665606432 - 1665606427 --> ∆ = 5
.
m=27, s=13, 1665606433 - 1665606427 --> ∆ = 6
.
m=27, s=13, 1665606433 - 1665606427 --> ∆ = 6
.
m=27, s=14, 1665606434 - 1665606427 --> ∆ = 7
.
m=27, s=14, 1665606434 - 1665606427 --> ∆ = 7
.
m=27, s=15, 1665606435 - 1665606427 --> ∆ = 8
.
m=27, s=15, 1665606435 - 1665606427 --> ∆ = 8
.
m=27, s=16, 1665606436 - 1665606427 --> ∆ = 9
.
m=27, s=16, 1665606436 - 1665606427 --> ∆ = 9
.
m=27, s=17, 1665606437 - 1665606427 --> ∆ = 10
.
m=27, s=17, 1665606437 - 1665606427 --> ∆ = 10
.
m=27, s=18, 1665606438 - 1665606427 --> ∆ = 11
.
m=27, s=18, 1665606438 - 1665606427 --> ∆ = 11
.
m=27, s=19, 1665606439 - 1665606427 --> ∆ = 12
.
m=27, s=19, 1665606439 - 1665606427 --> ∆ = 12
.
m=27, s=20, 1665606440 - 1665606427 --> ∆ = 13
.
m=27, s=20, 1665606440 - 1665606427 --> ∆ = 13
.
m=27, s=21, 1665606441 - 1665606427 --> ∆ = 14
.
m=27, s=21, 1665606441 - 1665606427 --> ∆ = 14
.
m=27, s=22, 1665606442 - 1665606427 --> ∆ = 15
.
m=27, s=22, 1665606442 - 1665606427 --> ∆ = 15
.
m=27, s=23, 1665606443 - 1665606427 --> ∆ = 16
Envoi sur timeout > 15
OK---------------.
m=27, s=23, 1665606443 - 1665606443 --> ∆ = 0
.
m=27, s=24, 1665606444 - 1665606443 --> ∆ = 1
.
m=27, s=24, 1665606444 - 1665606443 --> ∆ = 1
.
m=27, s=25, 1665606445 - 1665606443 --> ∆ = 2
.
m=27, s=25, 1665606445 - 1665606443 --> ∆ = 2
.
m=27, s=26, 1665606446 - 1665606443 --> ∆ = 3
.
m=27, s=26, 1665606446 - 1665606443 --> ∆ = 3
.
m=27, s=27, 1665606447 - 1665606443 --> ∆ = 4
.
m=27, s=27, 1665606447 - 1665606443 --> ∆ = 4
.
m=27, s=28, 1665606448 - 1665606443 --> ∆ = 5
.
m=27, s=28, 1665606448 - 1665606443 --> ∆ = 5
.
m=27, s=29, 1665606449 - 1665606443 --> ∆ = 6
.
m=27, s=29, 1665606449 - 1665606443 --> ∆ = 6
.
m=27, s=30, 1665606450 - 1665606443 --> ∆ = 7
.
m=27, s=30, 1665606450 - 1665606443 --> ∆ = 7
.
m=27, s=31, 1665606451 - 1665606443 --> ∆ = 8
.
m=27, s=31, 1665606451 - 1665606443 --> ∆ = 8
.
m=27, s=32, 1665606452 - 1665606443 --> ∆ = 9
.
m=27, s=32, 1665606452 - 1665606443 --> ∆ = 9
.
m=27, s=33, 1665606453 - 1665606443 --> ∆ = 10
.
m=27, s=33, 1665606453 - 1665606443 --> ∆ = 10
.
m=27, s=34, 1665606454 - 1665606443 --> ∆ = 11
.
m=27, s=34, 1665606454 - 1665606443 --> ∆ = 11
.
m=27, s=35, 1665606455 - 1665606443 --> ∆ = 12
.
m=27, s=35, 1665606455 - 1665606443 --> ∆ = 12
.
m=27, s=36, 1665606456 - 1665606443 --> ∆ = 13
.
m=27, s=36, 1665606456 - 1665606443 --> ∆ = 13
.
m=27, s=37, 1665606457 - 1665606443 --> ∆ = 14
.
m=27, s=37, 1665606457 - 1665606443 --> ∆ = 14
.
m=27, s=38, 1665606458 - 1665606443 --> ∆ = 15
.
m=27, s=38, 1665606458 - 1665606443 --> ∆ = 15
.
m=27, s=39, 1665606459 - 1665606443 --> ∆ = 16
Envoi sur timeout > 15
OK---------------.
m=27, s=39, 1665606459 - 1665606459 --> ∆ = 0
.
m=27, s=40, 1665606460 - 1665606459 --> ∆ = 1
.
m=27, s=40, 1665606460 - 1665606459 --> ∆ = 1
.
m=27, s=41, 1665606461 - 1665606459 --> ∆ = 2
.
m=27, s=41, 1665606461 - 1665606459 --> ∆ = 2
.
m=27, s=42, 1665606462 - 1665606459 --> ∆ = 3
.
m=27, s=42, 1665606462 - 1665606459 --> ∆ = 3
.
m=27, s=43, 1665606463 - 1665606459 --> ∆ = 4
.
m=27, s=43, 1665606463 - 1665606459 --> ∆ = 4
.
m=27, s=44, 1665606464 - 1665606459 --> ∆ = 5
.
m=27, s=44, 1665606464 - 1665606459 --> ∆ = 5
.
m=27, s=45, 1665606465 - 1665606459 --> ∆ = 6
.
m=27, s=45, 1665606465 - 1665606459 --> ∆ = 6
.
m=27, s=46, 1665606466 - 1665606459 --> ∆ = 7
.
m=27, s=46, 1665606466 - 1665606459 --> ∆ = 7
.
m=27, s=47, 1665606467 - 1665606459 --> ∆ = 8
.
m=27, s=47, 1665606467 - 1665606459 --> ∆ = 8
.
m=27, s=48, 1665606468 - 1665606459 --> ∆ = 9
.
m=27, s=48, 1665606468 - 1665606459 --> ∆ = 9
.
m=27, s=49, 1665606469 - 1665606459 --> ∆ = 10
.
m=27, s=49, 1665606469 - 1665606459 --> ∆ = 10
.
m=27, s=50, 1665606470 - 1665606459 --> ∆ = 11
.
m=27, s=50, 1665606470 - 1665606459 --> ∆ = 11
.
m=27, s=51, 1665606471 - 1665606459 --> ∆ = 12
.
m=27, s=51, 1665606471 - 1665606459 --> ∆ = 12
.
m=27, s=52, 1665606472 - 1665606459 --> ∆ = 13
.
m=27, s=52, 1665606472 - 1665606459 --> ∆ = 13
.
m=27, s=53, 1665606473 - 1665606459 --> ∆ = 14
.
m=27, s=53, 1665606473 - 1665606459 --> ∆ = 14
.
m=27, s=54, 1665606474 - 1665606459 --> ∆ = 15
.
m=27, s=54, 1665606474 - 1665606459 --> ∆ = 15
.
m=27, s=55, 1665606475 - 1665606459 --> ∆ = 16
Envoi sur timeout > 15
OK---------------.
m=27, s=55, 1665606475 - 1665606475 --> ∆ = 0
.
m=27, s=56, 1665606476 - 1665606475 --> ∆ = 1
.
m=27, s=56, 1665606476 - 1665606475 --> ∆ = 1
.
m=27, s=57, 1665606477 - 1665606475 --> ∆ = 2
.
m=27, s=57, 1665606477 - 1665606475 --> ∆ = 2
.
m=27, s=58, 1665606478 - 1665606475 --> ∆ = 3
.
m=27, s=58, 1665606478 - 1665606475 --> ∆ = 3
.
m=27, s=59, 1665606479 - 1665606475 --> ∆ = 4
.
m=27, s=59, 1665606479 - 1665606475 --> ∆ = 4
.
m=28, s=0, 1665606480 - 1665606475 --> ∆ = 5
.
m=28, s=0, 1665606480 - 1665606475 --> ∆ = 5
.
m=28, s=1, 1665606481 - 1665606475 --> ∆ = 6
.
m=28, s=1, 1665606481 - 1665606475 --> ∆ = 6
.
m=28, s=2, 1665606482 - 1665606475 --> ∆ = 7
.
m=28, s=2, 1665606482 - 1665606475 --> ∆ = 7
.
m=28, s=3, 1665606483 - 1665606475 --> ∆ = 8
.
m=28, s=3, 1665606483 - 1665606475 --> ∆ = 8
.
m=28, s=4, 1665606484 - 1665606475 --> ∆ = 9
.
m=28, s=4, 1665606484 - 1665606475 --> ∆ = 9
.
m=28, s=5, 1665606485 - 1665606475 --> ∆ = 10
.
m=28, s=5, 1665606485 - 1665606475 --> ∆ = 10
.
m=28, s=6, 1665606486 - 1665606475 --> ∆ = 11
.
m=28, s=6, 1665606486 - 1665606475 --> ∆ = 11
.
m=28, s=7, 1665606487 - 1665606475 --> ∆ = 12
.
m=28, s=7, 1665606487 - 1665606475 --> ∆ = 12
.
m=28, s=8, 1665606488 - 1665606475 --> ∆ = 13
.
m=28, s=8, 1665606488 - 1665606475 --> ∆ = 13
.
m=28, s=9, 1665606489 - 1665606475 --> ∆ = 14
.
m=28, s=9, 1665606489 - 1665606475 --> ∆ = 14
.
m=28, s=10, 1665606490 - 1665606475 --> ∆ = 15
.
m=28, s=10, 1665606490 - 1665606475 --> ∆ = 15
.
m=28, s=11, 1665606491 - 1665606475 --> ∆ = 16
Envoi sur timeout > 15
OK---------------.
m=28, s=11, 1665606491 - 1665606491 --> ∆ = 0
.
m=28, s=12, 1665606492 - 1665606491 --> ∆ = 1
.
m=28, s=12, 1665606492 - 1665606491 --> ∆ = 1
.
m=28, s=13, 1665606493 - 1665606491 --> ∆ = 2
.
m=28, s=13, 1665606493 - 1665606491 --> ∆ =

Le même a 30s:


OK.
m=10, s=45, 1665609045 - 4294967266 --> ∆ = 1665609075
Envoi sur timeout > 30
OK---------------.
m=10, s=45, 1665609045 - 1665609045 --> ∆ = 0
.
m=10, s=46, 1665609046 - 1665609045 --> ∆ = 1
.
m=10, s=46, 1665609046 - 1665609045 --> ∆ = 1
.
m=10, s=47, 1665609047 - 1665609045 --> ∆ = 2
.
m=10, s=47, 1665609047 - 1665609045 --> ∆ = 2
.
m=10, s=48, 1665609048 - 1665609045 --> ∆ = 3
.
m=10, s=48, 1665609048 - 1665609045 --> ∆ = 3
.
m=10, s=49, 1665609049 - 1665609045 --> ∆ = 4
.
m=10, s=49, 1665609049 - 1665609045 --> ∆ = 4
.
m=10, s=50, 1665609050 - 1665609045 --> ∆ = 5
.
m=10, s=50, 1665609050 - 1665609045 --> ∆ = 5
.
m=10, s=51, 1665609051 - 1665609045 --> ∆ = 6
.
m=10, s=51, 1665609051 - 1665609045 --> ∆ = 6
.
m=10, s=52, 1665609052 - 1665609045 --> ∆ = 7
.
m=10, s=52, 1665609052 - 1665609045 --> ∆ = 7
.
m=10, s=53, 1665609053 - 1665609045 --> ∆ = 8
.
m=10, s=53, 1665609053 - 1665609045 --> ∆ = 8
.
m=10, s=54, 1665609054 - 1665609045 --> ∆ = 9
.
m=10, s=54, 1665609054 - 1665609045 --> ∆ = 9
.
m=10, s=55, 1665609055 - 1665609045 --> ∆ = 10
.
m=10, s=55, 1665609055 - 1665609045 --> ∆ = 10
.
m=10, s=56, 1665609056 - 1665609045 --> ∆ = 11
.
m=10, s=56, 1665609056 - 1665609045 --> ∆ = 11
.
m=10, s=57, 1665609057 - 1665609045 --> ∆ = 12
.
m=10, s=57, 1665609057 - 1665609045 --> ∆ = 12
.
m=10, s=58, 1665609058 - 1665609045 --> ∆ = 13
.
m=10, s=58, 1665609058 - 1665609045 --> ∆ = 13
.
m=10, s=59, 1665609059 - 1665609045 --> ∆ = 14
.
m=10, s=59, 1665609059 - 1665609045 --> ∆ = 14
.
m=11, s=0, 1665609060 - 1665609045 --> ∆ = 15
.
m=11, s=0, 1665609060 - 1665609045 --> ∆ = 15
.
m=11, s=1, 1665609061 - 1665609045 --> ∆ = 16
.
m=11, s=1, 1665609061 - 1665609045 --> ∆ = 16
.
m=11, s=2, 1665609062 - 1665609045 --> ∆ = 17
.
m=11, s=2, 1665609062 - 1665609045 --> ∆ = 17
.
m=11, s=3, 1665609063 - 1665609045 --> ∆ = 18
.
m=11, s=3, 1665609063 - 1665609045 --> ∆ = 18
.
m=11, s=4, 1665609064 - 1665609045 --> ∆ = 19
.
m=11, s=4, 1665609064 - 1665609045 --> ∆ = 19
.
m=11, s=5, 1665609065 - 1665609045 --> ∆ = 20
.
m=11, s=5, 1665609065 - 1665609045 --> ∆ = 20
.
m=11, s=6, 1665609066 - 1665609045 --> ∆ = 21
.
m=11, s=6, 1665609066 - 1665609045 --> ∆ = 21
.
m=11, s=7, 1665609067 - 1665609045 --> ∆ = 22
.
m=11, s=7, 1665609067 - 1665609045 --> ∆ = 22
.
m=11, s=8, 1665609068 - 1665609045 --> ∆ = 23
.
m=11, s=8, 1665609068 - 1665609045 --> ∆ = 23
.
m=11, s=9, 1665609069 - 1665609045 --> ∆ = 24
.
m=11, s=9, 1665609069 - 1665609045 --> ∆ = 24
.
m=11, s=10, 1665609070 - 1665609045 --> ∆ = 25
.
m=11, s=10, 1665609070 - 1665609045 --> ∆ = 25
.
m=11, s=11, 1665609071 - 1665609045 --> ∆ = 26
.
m=11, s=11, 1665609071 - 1665609045 --> ∆ = 26
.
m=11, s=12, 1665609072 - 1665609045 --> ∆ = 27
.
m=11, s=12, 1665609072 - 1665609045 --> ∆ = 27
.
m=11, s=13, 1665609073 - 1665609045 --> ∆ = 28
.
m=11, s=13, 1665609073 - 1665609045 --> ∆ = 28
.
m=11, s=14, 1665609074 - 1665609045 --> ∆ = 29
.
m=11, s=14, 1665609074 - 1665609045 --> ∆ = 29
.
m=11, s=15, 1665609075 - 1665609045 --> ∆ = 30
.
m=11, s=15, 1665609075 - 1665609045 --> ∆ = 30
.
m=11, s=16, 1665609076 - 1665609045 --> ∆ = 31
Envoi sur timeout > 30
m=11, s=16, 1665609076 - 1665609076 --> ∆ = 0
.
m=11, s=17, 1665609077 - 1665609076 --> ∆ = 1
.
m=11, s=17, 1665609077 - 1665609076 --> ∆ = 1
.
m=11, s=18, 1665609078 - 1665609076 --> ∆ = 2
.
m=11, s=18, 1665609078 - 1665609076 --> ∆ = 2
.
m=11, s=19, 1665609079 - 1665609076 --> ∆ = 3
.
m=11, s=19, 1665609079 - 1665609076 --> ∆ = 3
.
m=11, s=20, 1665609080 - 1665609076 --> ∆ = 4
.
m=11, s=20, 1665609080 - 1665609076 --> ∆ = 4
.
m=11, s=21, 1665609081 - 1665609076 --> ∆ = 5
.
m=11, s=21, 1665609081 - 1665609076 --> ∆ = 5
.
m=11, s=22, 1665609082 - 1665609076 --> ∆ = 6
.
m=11, s=22, 1665609082 - 1665609076 --> ∆ = 6
.
m=11, s=23, 1665609083 - 1665609076 --> ∆ = 7
.
m=11, s=23, 1665609083 - 1665609076 --> ∆ = 7
.
m=11, s=24, 1665609084 - 1665609076 --> ∆ = 8
.
m=11, s=24, 1665609084 - 1665609076 --> ∆ = 8
.
m=11, s=25, 1665609085 - 1665609076 --> ∆ = 9
.
m=11, s=25, 1665609085 - 1665609076 --> ∆ = 9
.
m=11, s=26, 1665609086 - 1665609076 --> ∆ = 10
.
m=11, s=26, 1665609086 - 1665609076 --> ∆ = 10
.
m=11, s=27, 1665609087 - 1665609076 --> ∆ = 11
.
m=11, s=27, 1665609087 - 1665609076 --> ∆ = 11
.
m=11, s=28, 1665609088 - 1665609076 --> ∆ = 12
.
m=11, s=28, 1665609088 - 1665609076 --> ∆ = 12
.
m=11, s=29, 1665609089 - 1665609076 --> ∆ = 13
.
m=11, s=29, 1665609089 - 1665609076 --> ∆ = 13
.
m=11, s=30, 1665609090 - 1665609076 --> ∆ = 14
.
m=11, s=30, 1665609090 - 1665609076 --> ∆ = 14
.
m=11, s=31, 1665609091 - 1665609076 --> ∆ = 15
.
m=11, s=31, 1665609091 - 1665609076 --> ∆ = 15
.
m=11, s=32, 1665609092 - 1665609076 --> ∆ = 16
.
m=11, s=32, 1665609092 - 1665609076 --> ∆ = 16
.
m=11, s=33, 1665609093 - 1665609076 --> ∆ = 17
.
m=11, s=33, 1665609093 - 1665609076 --> ∆ = 17
.
m=11, s=34, 1665609094 - 1665609076 --> ∆ = 18
.
m=11, s=34, 1665609094 - 1665609076 --> ∆ = 18
.
m=11, s=35, 1665609095 - 1665609076 --> ∆ = 19
.
m=11, s=35, 1665609095 - 1665609076 --> ∆ = 19
.
m=11, s=36, 1665609096 - 1665609076 --> ∆ = 20
.
m=11, s=36, 1665609096 - 1665609076 --> ∆ = 20
.
m=11, s=37, 1665609097 - 1665609076 --> ∆ = 21
.
m=11, s=37, 1665609097 - 1665609076 --> ∆ = 21
.
m=11, s=38, 1665609098 - 1665609076 --> ∆ = 22
.
m=11, s=38, 1665609098 - 1665609076 --> ∆ = 22
.
m=11, s=39, 1665609099 - 1665609076 --> ∆ = 23
.
m=11, s=39, 1665609099 - 1665609076 --> ∆ = 23
.
m=11, s=40, 1665609100 - 1665609076 --> ∆ = 24
.
m=11, s=40, 1665609100 - 1665609076 --> ∆ = 24
.
m=11, s=41, 1665609101 - 1665609076 --> ∆ = 25
.
m=11, s=41, 1665609101 - 1665609076 --> ∆ = 25
.
m=11, s=42, 1665609102 - 1665609076 --> ∆ = 26
.
m=11, s=42, 1665609102 - 1665609076 --> ∆ = 26
.
m=11, s=43, 1665609103 - 1665609076 --> ∆ = 27
.
m=11, s=43, 1665609103 - 1665609076 --> ∆ = 27
.
m=11, s=44, 1665609104 - 1665609076 --> ∆ = 28
.
m=11, s=44, 1665609104 - 1665609076 --> ∆ = 28
.
m=11, s=48, 1665609108 - 1665609076 --> ∆ = 32
Envoi sur timeout > 30
m=11, s=48, 1665609108 - 1665609108 --> ∆ = 0
.
m=11, s=49, 1665609109 - 1665609108 --> ∆ = 1
.
m=11, s=49, 1665609109 - 1665609108 --> ∆ = 1
.
m=11, s=50, 1665609110 - 1665609108 --> ∆ = 2
.
m=11, s=50, 1665609110 - 1665609108 --> ∆ = 2
.
m=11, s=51, 1665609111 - 1665609108 --> ∆ = 3
.
m=11, s=51, 1665609111 - 1665609108 --> ∆ = 3
.
m=11, s=52, 1665609112 - 1665609108 --> ∆ = 4
.
m=11, s=52, 1665609112 - 1665609108 --> ∆ = 4
.
m=11, s=53, 1665609113 - 1665609108 --> ∆ = 5
.
m=11, s=53, 1665609113 - 1665609108 --> ∆ = 5
.
m=11, s=54, 1665609114 - 1665609108 --> ∆ = 6
.
m=11, s=54, 1665609114 - 1665609108 --> ∆ = 6
.
m=11, s=55, 1665609115 - 1665609108 --> ∆ = 7
.
m=11, s=55, 1665609115 - 1665609108 --> ∆ = 7
.
m=11, s=56, 1665609116 - 1665609108 --> ∆ = 8
.
m=11, s=56, 1665609116 - 1665609108 --> ∆ = 8
.
m=11, s=57, 1665609117 - 1665609108 --> ∆ = 9
.
m=11, s=57, 1665609117 - 1665609108 --> ∆ = 9
.
m=11, s=58, 1665609118 - 1665609108 --> ∆ = 10
.
m=11, s=58, 1665609118 - 1665609108 --> ∆ = 10
.
m=11, s=59, 1665609119 - 1665609108 --> ∆ = 11
.
m=11, s=59, 1665609119 - 1665609108 --> ∆ = 11
.
m=12, s=0, 1665609120 - 1665609108 --> ∆ = 12
.
m=12, s=0, 1665609120 - 1665609108 --> ∆ = 12
.
m=12, s=1, 1665609121 - 1665609108 --> ∆ = 13
.
m=12, s=1, 1665609121 - 1665609108 --> ∆ = 13
.
m=12, s=2, 1665609122 - 1665609108 --> ∆ = 14
.
m=12, s=2, 1665609122 - 1665609108 --> ∆ = 14
.
m=12, s=3, 1665609123 - 1665609108 --> ∆ = 15
.
m=12, s=3, 1665609123 - 1665609108 --> ∆ = 15
.
m=12, s=4, 1665609124 - 1665609108 --> ∆ = 16
.
m=12, s=4, 1665609124 - 1665609108 --> ∆ = 16
.
m=12, s=5, 1665609125 - 1665609108 --> ∆ = 17
.
m=12, s=5, 1665609125 - 1665609108 --> ∆ = 17
.
m=12, s=6, 1665609126 - 1665609108 --> ∆ = 18
.
m=12, s=6, 1665609126 - 1665609108 --> ∆ = 18
.
m=12, s=7, 1665609127 - 1665609108 --> ∆ = 19
.
m=12, s=7, 1665609127 - 1665609108 --> ∆ = 19
.
m=12, s=8, 1665609128 - 1665609108 --> ∆ = 20
.
m=12, s=8, 1665609128 - 1665609108 --> ∆ = 20
.
m=12, s=9, 1665609129 - 1665609108 --> ∆ = 21
.
m=12, s=9, 1665609129 - 1665609108 --> ∆ = 21
.
m=12, s=10, 1665609130 - 1665609108 --> ∆ = 22
.
m=12, s=10, 1665609130 - 1665609108 --> ∆ = 22
.
m=12, s=11, 1665609131 - 1665609108 --> ∆ = 23
.
m=12, s=11, 1665609131 - 1665609108 --> ∆ = 23
.
m=12, s=12, 1665609132 - 1665609108 --> ∆ = 24
.
m=12, s=12, 1665609132 - 1665609108 --> ∆ = 24
.
m=12, s=13, 1665609133 - 1665609108 --> ∆ = 25
.
m=12, s=13, 1665609133 - 1665609108 --> ∆ = 25
.
m=12, s=14, 1665609134 - 1665609108 --> ∆ = 26
.
m=12, s=14, 1665609134 - 1665609108 --> ∆ = 26
.
m=12, s=15, 1665609135 - 1665609108 --> ∆ = 27
.
m=12, s=15, 1665609135 - 1665609108 --> ∆ = 27
.
m=12, s=16, 1665609136 - 1665609108 --> ∆ = 28
.
m=12, s=16, 1665609136 - 1665609108 --> ∆ = 28
.
m=12, s=17, 1665609137 - 1665609108 --> ∆ = 29
.
m=12, s=17, 1665609137 - 1665609108 --> ∆ = 29
.
m=12, s=18, 1665609138 - 1665609108 --> ∆ = 30
.
m=12, s=18, 1665609138 - 1665609108 --> ∆ = 30
.
m=12, s=19, 1665609139 - 1665609108 --> ∆ = 31
Envoi sur timeout > 30
m=12, s=19, 1665609139 - 1665609139 --> ∆ = 0
.
m=12, s=20, 1665609140 - 1665609139 --> ∆ = 1
.
m=12, s=20, 1665609140 - 1665609139 --> ∆ = 1
.
m=12, s=21, 1665609141 - 1665609139 --> ∆ = 2
.
m=12, s=21, 1665609141 - 1665609139 --> ∆ = 2
.
m=12, s=22, 1665609142 - 1665609139 --> ∆ = 3

Ça a l’air de fonctionner correctement

Non sur le réglage a 30 il n'y a pas la ligne:

OK---------------.

qui indique que les données ont été envoyé a la base de données, même si ton code a l'air de fonctionner.