ESP8266 NodeMCU Delete Daten in MySQL Datenbank (ohne PHP)

Hallo zusammen,

ich sende jede Minute Daten in meine SQL Datenbank. Soweit so gut.

Jetzt wird die Datenbank immer größer und größer.
Daher mein Wunsch, alle Datensätze die älter als 14 Tage sind, sollen um 23:59 Uhr gelöscht werden.

//Connect to MySQL-Database
  
    Serial.println(F("Connecting to MySQL Database..."));
    if (conn.connect(server_addr, 3306, user, password)) {
      delay(3000);
    }
    else
      Serial.println(F("Connection failed."));
    
    // Initiate the query class instance
    MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
  
    // Write data to database
    dtostrf(temp_f[0], 6, 2, temp_1_c);
    dtostrf(temp_f[1], 6, 2, temp_2_c);
    dtostrf(temp_f[2], 6, 2, temp_3_c);
....
sprintf(query, INSERT_DATA, temp_1_c, temp_2_c, temp_3_c, temp_4_c, temp_5_c, temp_6_c, temp_7_c, temp_8_c, humi_8_c, temp_9_c, humi_9_c, temp_10_c, humi_10_c, stemp_1_c, stemp_2_c, stemp_3_c, stemp_4_c, stemp_5_c, stemp_6_c, stemp_8_c, shumi_8_c, stemp_9_c, shumi_9_c, stemp_10_c, shumi_10_c, e_s1_c, e_s2_c, e_s3_c, e_s4_c, e_s5_c, e_s6_c, e_s7_c, e_s8_c, e_s9_c, e_s10_c);
    cur_mem->execute(query);
    Serial.println(F("Data recorded: Temperatur DS18B20 "));
     
    delete cur_mem; // Deleting the cursor frees up used memory

delay(2000);
    conn.close();
    Serial.println(F("Connection to MySQL Database closed"));

//Connect to MySQL-Database for Delete Data
if ((timeClient.getHours() >= 23) && (timeClient.getMinutes() >= 59)) {
   
    Serial.println(F("Connecting to MySQL Database..."));
    if (conn.connect(server_addr, 3306, user, password)) {
      delay(3000);
    }
    else
      Serial.println(F("Connection failed."));
    
    // Initiate the query class instance
    MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
    
sprintf(query, DELETE_DATA);
    cur_mem->execute(query);
    Serial.println(F("Data delete: Temperatur DS18B20 "));

    delete cur_mem; // Deleting the cursor frees up used memory
delay(2000);
    
    conn.close();
    Serial.println(F("Connection to MySQL Database closed"));
    
  delay(1000);
}

Die Daten werden richtig (alle Minute) in die Datenbank übergeben.
Wenn das löschen ausgeführt werden soll, kommt eine Fehlermeldung.
Das Löschen alleine (in einem Test Sketch) funktioniert.

Irgendwo ist mein Denkfehler.

Ich hoffe, Ihr könnt mir helfen.

Horst

Fehlermeldung ?

DELETE_DATA sollen wir jetzt erraten?

Gruß Tommy

Sorry!!

// Sample query
char INSERT_DATA[] = "INSERT INTO Horst.ds18b20 (temp_1, temp_2, temp_3, temp_4, temp_5, temp_6, temp_7, temp_8, humi_8, temp_9, humi_9, temp_10, humi_10, stemp_1, stemp_2, stemp_3, stemp_4, stemp_5, stemp_6, stemp_8, shumi_8, stemp_9, shumi_9, stemp_10, shumi_10, err_1, err_2, err_3, err_4, err_5, err_6, err_7, err_8, err_9, err_10) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)";
char DELETE_DATA[] = "DELETE FROM Horst.ds18b20 WHERE DATEDIFF(NOW(), timestamp) >= 14";
char query[1024];

Und die Fehlermeldung?
Mit den ganzen Fragmenten kann man nur Raten.
Wer ist timestamp?

Gruß Tommy

So ist das, wenn man nicht alles ließt und seinen Sketch geheim halten will.

topgun-811:

char DELETE_DATA[] = "DELETE FROM Horst.ds18b20 WHERE DATEDIFF(NOW(), timestamp) >= 14";

Dran denken, das Du auch die entsprechenden Rechte hast.

DELETE FROM Horst.ds18b20 WHERE timestamp < NOW() - INTERVAL 14 DAY

@All,

leider kann ich die Fehlermeldung erst heute nach 23:59 Uhr sehen und hier einstellen.

Ich möchte nichts Geheim halten. Siehe Anhang.

Aber, wie schon gesagt, funktionieren sowohl die Datenübergabe in die Datenbank
(deshalb sind die Rechte richtig) und ein kleiner Sketch wo nur das Delete ausgeführt wird.

Wenn ich das Delete in das Heizungssteuerprogramm einfügen kommt dieser Fehler.

Deshalb vermute ich, dass ich etwas übersehen habe.

Gruß
Horst

Mess-Client-Request-Bot-v5.ino (30.9 KB)

Um die Fehlermeldung jetzt zu bekommen, habe ich einen zweiten ESP8266 programmiert.

Dazu habe ich die If-Abfrage für die Uhrzeit aus kommentiert und jetzt kommt die Meldung.

Mess-Client-Request-Bot-v5:729:19: error: redeclaration of 'MySQL_Cursor* cur_mem'
     MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
                   ^

Beim 2. Mal

//     MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
    cur_mem = new MySQL_Cursor(&conn);

Gruß Tommy

Das schaut gut aus.

Danke an Tommy.

Ob es wirklich so funktioniert kann ich aber erst morgen sagen.

Danke erst mal für Eure Hilfe

Horst

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.