#include <WiFi.h>
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>

#define lamp1 14
#define lamp2 12
#define lamp3 13
IPAddress server_addr(137, 255, 39, 21);       // Adresse IP du serveur MySQL
int server_port = 16600;                      // Port du serveur MySQL
const char* db_user = "root";                // Nom d'utilisateur de la base de données
const char* db_password = "6996582074";     // Mot de passe de la base de données
const char* db_name = "Homelinks";         // Nom de la base de données

const char* ssid = "Wokwi-GUEST";            // SSID (nom) du réseau Wi-Fi
const char* password = "";   // Mot de passe du réseau Wi-Fi

WiFiClient client;
MySQL_Connection conn((Client *)&client); // Déclaration de la connexion MySQL

void setupWiFi() {
  WiFi.begin(ssid, password, 6);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connexion au Wi-Fi en cours...");
  }

  Serial.println("Connexion au Wi-Fi établie !");
  Serial.print("Adresse IP : ");
  Serial.println(WiFi.localIP());
}

void setupDatabase() {
  if (conn.connect(server_addr, server_port, db_user, db_password, db_name)) {
    Serial.println("Connexion à la base de données établie !");
  } else {
    Serial.println("Échec de la connexion à la base de données...");
  }
}

char* today() {
  time_t now = time(NULL);
  struct tm *t = localtime(&now);
  char *date = (char*)malloc(sizeof(char) * 11);
  strftime(date, 11, "%Y-%m-%d", t);
  return date;
}

void executeQuery() {
  MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
  
  char query[] = "SELECT datejour, heure, active, lampe FROM Actions";
  cur_mem->execute(query);

  RowValues row;

  while (cur_mem->available()) {
    row = cur_mem->getRow();

    time_t now = time(NULL);
    char *today_str = today();
  
    for (int i = 0; i < row.num_fields; i++) {
      if (strcmp(cur_mem->field_name(i), "datejour") == 0 && strcmp(row.values[i], today_str) != 0) {
        break;
      }
  
      if (strcmp(cur_mem->field_name(i), "heure") == 0 && difftime(now, atol(row.values[i])) < 60 && i+2 < row.num_fields) {
        if (strcmp(row.values[i+1], "1") == 0) {
          digitalWrite(atoi(row.values[i+2]), HIGH);
        } else {
          digitalWrite(atoi(row.values[i+2]), LOW);
        }
      }
    }
  
    free(today_str);
  }

  delete cur_mem;
}

void setup() {
  Serial.begin(9600);

  setupWiFi();
  setupDatabase();

  pinMode(lamp1, OUTPUT);
  pinMode(lamp2, OUTPUT);
  pinMode(lamp3, OUTPUT);
}

void loop() {
  executeQuery();
  delay(1000);
}
$abcdeabcde151015202530354045505560fghijfghij