Autorisation AUTO avec MAC adresse possible ?

Bonjour j'ai réunis divers prise chez moi que je gère avec un petit webserver installer sur un esp8268 en C++ genre arduino Et j'aimerais savoir si il y'a moyens non pas de ce logger pour pouvoir y accéder (le but est de ne pas perdre de temps) Mais que le module détecte mon adresse MAC (que j''aurais rentrer dans mon code)et m'y autorise l’accès automatiquement ? Je vous remercie J'ai fais quelques recherche mais je n'est pas trouver d'exemple de code concluant

Bonjour

réponse : oui , sans doute.

en lançant un moteur de recherche avec "ESP8266 Arduino client mac" on tombe assez vite sur un exemple de réponse sur Stackoverflow qui mérite le test.

par ailleurs la librairie WiFi Arduino ESP8266 est bien documentée

une solution est peut être de ne pas mettre de mpd WiFi ( accès ouvert) laisser toute station s'y connecter mais filtrer ensuite selon l'adresse MAC de la station acceptée

Si je comprends bien vous avez un arduino genre ESP qui pilote des relais qui sont derrières des prises.

Est-ce que le réseau WiFi est créé par l’ESP ou est-ce que votre ESP a rejoint votre réseau WiFi domestique (de votre box) ?

Comment déclenchez vous des actions sur votre ESP ? interface HTTP en GET ?

Bien sûr J-M-L , j'ai sauté une étape et aurais du commencer par l'étape ; l'ESP8266 qui pilote les relais est-il en Point d'accès ou en station (sans présumer le mode AP) !!!!!

Bonjour , alors déjà merci pour vos réponse
Alors mon esp8266 est reliée directement a mon réseaux wifi
J’ai fais une redirection de port pour pouvoir y accéder depuis n’importe ou et j’aimerais y mettre un mot de passe et nom d’utilisateur

J’ai essayer pas mal de chose mais pas moyen de faire tourner mon code sans erreur diverse …
Je vois que je n’est pas les compétence nécessaire …
je suis dessus depuis ce matin et sa n’avance guère …
Merci de votre aide en tous cas … a tous

Voila mon code

}

// Load Wi-Fi library
#include <ESP8266WiFi.h>

// Replace with your network credentials
const char* ssid     = "UPC1D148D6";
const char* password = "w6akjznbjYmh";

// Set web server port number to 80
WiFiServer server(80);

// Variable to store the HTTP request
String header;

// Auxiliar variables to store the current output state
String relay1State = "eteint";
String relay2State = "eteint";
String relay3State = "eteint";
String relay4State = "eteint";

// Assign output variables to GPIO pins
const int relay1 = 5; // GPIO5 D1
const int relay2 = 4; // GPIO4 D2
const int relay3 = 0; // GPIO0 D3
const int relay4 = 2; // GPIO2 D4

void setup() {
Serial.begin(115200);
// Initialize the output variables as outputs
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(relay4, OUTPUT);
// Set outputs to HIGH. relay active LOW
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
digitalWrite(relay3, LOW);
digitalWrite(relay4, LOW);

// Connect to Wi-Fi network with SSID and password
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
  delay(500);
  Serial.print(".");
}
// Print local IP address and start web server
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
}

void loop() {
WiFiClient client = server.available();   // Listen for incoming clients

if (client) {                             // If a new client connects,
  Serial.println("New Client.");          // print a message out in the serial port
  String currentLine = "";                // make a String to hold incoming data from the client
  while (client.connected()) {            // loop while the client's connected
    if (client.available()) {             // if there's bytes to read from the client,
      char c = client.read();             // read a byte, then
      Serial.write(c);                    // print it out the serial monitor
      header += c;
      if (c == '\n') {                    // if the byte is a newline character
        // if the current line is blank, you got two newline characters in a row.
        // that's the end of the client HTTP request, so send a response:
        if (currentLine.length() == 0) {
          // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
          // and a content-type so the client knows what's coming, then a blank line:
          client.println("HTTP/1.1 200 OK");
          client.println("Content-type:text/html");
          client.println("Connection: close");
          client.println();

          // turns the GPIOs on and off
          if (header.indexOf("GET /5/on") >= 0)
          {
            Serial.println("GPIO 5 on");
            relay1State = "allumer";
            digitalWrite(relay1, HIGH);
          }
          else if (header.indexOf("GET /5/off") >= 0)
          {
            Serial.println("GPIO 5 off");
            relay1State = "eteinte";
            digitalWrite(relay1,  LOW);
          }
          else if (header.indexOf("GET /4/on") >= 0) 
          {
            Serial.println("GPIO 4 on");
            relay2State = "allumer";
            digitalWrite(relay2, HIGH);
          }
          else if (header.indexOf("GET /4/off") >= 0)
          {
            Serial.println("GPIO 4 off");
            relay2State = "eteinte";
            digitalWrite(relay2,  LOW);
          }
          else if (header.indexOf("GET /0/on") >= 0)
          {
            Serial.println("GPIO 0 on");
            relay3State = "allumer";
            digitalWrite(relay3, HIGH);
          }
          else if (header.indexOf("GET /0/off") >= 0)
          {
            Serial.println("GPIO 0 off");
            relay3State = "eteinte";
            digitalWrite(relay3,  LOW);
          }
          else if (header.indexOf("GET /2/on") >= 0) 
          {
            Serial.println("GPIO 2 on");
            relay4State = "allumer";
            digitalWrite(relay4, HIGH);
          }
          else if (header.indexOf("GET /2/off") >= 0) 
          {
            Serial.println("GPIO 2 off");
            relay4State = "eteinte";
            digitalWrite(relay4, LOW);
          }

          // Display the HTML web page
          client.println("<!DOCTYPE html><html>");
          client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
          client.println("<link rel=\"icon\" href=\"data:,\">");
          // CSS to style the on/off buttons
          // Feel free to change the background-color and font-size attributes to fit your preferences
          client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
          client.println(".button { background-color: #195B6A; border: none; color: white; padding: 12px 24px;");
          client.println("text-decoration: none; font-size: 20px; margin: 2px; cursor: pointer;}");
          client.println(".button2 {background-color: #77878A;}</style></head>");

          // Web Page Heading
          client.println("<body><h1>Systeme domotique wifi</h1>");

          // Display current state, and ON/OFF buttons for GPIO 5
          client.println("<p>Petite lampe - Actuellement " + relay1State + "</p>");
          // If the relay1State is off, it displays the ON button
          if (relay1State == "eteinte") {
            client.println("<p><a href=\"/5/on\"><button class=\"button\">Allumer</button></a></p>");
          } else {
            client.println("<p><a href=\"/5/off\"><button class=\"button button2\">Eteindre</button></a></p>");
          }

          // Display current state, and ON/OFF buttons for GPIO 4
          client.println("<p>Lampe de Sel - Actuellement " + relay2State + "</p>");
          // If the relay2State is off, it displays the ON button
          if (relay2State == "eteinte") {
            client.println("<p><a href=\"/4/on\"><button class=\"button\">Allumer</button></a></p>");
          } else {
            client.println("<p><a href=\"/4/off\"><button class=\"button button2\">Eteindre</button></a></p>");
          }

          // Display current state, and ON/OFF buttons for GPIO 0
          client.println("<p>Android BOX - Actuellement " + relay3State + "</p>");
          // If the relay1State is off, it displays the ON button
          if (relay3State == "eteinte") {
            client.println("<p><a href=\"/0/on\"><button class=\"button\">Allumer</button></a></p>");
          } else {
            client.println("<p><a href=\"/0/off\"><button class=\"button button2\">Eteindre</button></a></p>");
          }

          // Display current state, and ON/OFF buttons for GPIO 2
          client.println("<p>TV - Actuellement " + relay4State + "</p>");
          // If the relay2State is off, it displays the ON button
          if (relay4State == "eteinte") {
            client.println("<p><a href=\"/2/on\"><button class=\"button\">Allumer</button></a></p>");
          } else {
            client.println("<p><a href=\"/2/off\"><button class=\"button button2\">Eteindre</button></a></p>");
          }

          client.println("</body></html>");

          // The HTTP response ends with another blank line
          client.println();
          // Break out of the while loop
          break;
        } else { // if you got a newline, then clear currentLine
          currentLine = "";
        }
      } else if (c != '\r') {  // if you got anything else but a carriage return character,
        currentLine += c;      // add it to the end of the currentLine
      }
    }
  }
  // Clear the header variable
  header = "";
  // Close the connection
  client.stop();
  Serial.println("Client disconnected.");
  Serial.println("");
}

OK !! j'étais donc parti sur une fausse piste (esp8266 en point d'accès)

le code en vrac dans le message ,est peu lisible, il aura peu de lecteurs

[u]Comme indiqué dans les messages épinglés[/u] en tête du forum l faut le mettre ans le message mais entre des balises de code comme ci-dessous :

 ....

Il sera alors plus lisible , copiable proprement dans l'IDE Arduino pour examen et tests

Tu as regardé dans les exemples ?

plusieurs pourraient peut être faire l'affaire : HttpBasicAuth, SimpleAuthentication...... (même si ça n'est pas automatique et ne passe pas par l'adresse MAC)

bonjour, Alors j’ai mis a jour la mise en page du code¨…
Oui je suis tomber dessus jai des exemple du genre ceci que j’ai essayer d’adapter …mais apres l’authentification , je tombe sur une page qui me dis ok et je n’arrive pas a savoir ou copier mon code qui fonctionne plus haut (l’interface seulement)…
Je suis vraiment pas du métier donc plus que noob donc ne m’en voulez pas pour les éventuel bêtises

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>


MDNSResponder mdns;


const char* ssid     = "UPC1D148D6";
const char* password = "w6akjznbjYmh";

ESP8266WebServer server(80);

String header;

String output5State = "éteint";
String output4State = "éteint";

const int relay1 = 5; // GPIO5 D1
const int relay2 = 4; // GPIO4 D2
const int relay3 = 0; // GPIO0 D3

int gpio1_pin = 2;  // D4 of nodemcu
int gpio2_pin = 13; // D7 of nodemcu
int gpio3_pin =14; //  D5 of nodemcu






//Check if header is present and correct
bool is_authentified(){
  Serial.println("Enter is authentified");
  if (server.hasHeader("Cookie")){
    Serial.print("Found cookie: ");
    String cookie = server.header("Cookie");
    Serial.println(cookie);
    if (cookie.indexOf("ESPSESSIONID=1") != -1) {
      Serial.println("Authentification Successful");
      return true;
    }
  }
  Serial.println("Authentification Failed");
  return false;
}

//login page, also called for disconnect
void handleLogin(){
  String msg;
  if (server.hasHeader("Cookie")){
    Serial.print("Found cookie: ");
    String cookie = server.header("Cookie");
    Serial.println(cookie);
  }
  if (server.hasArg("DISCONNECT")){
    Serial.println("Disconnection");
    server.sendHeader("Location","/login");
    server.sendHeader("Cache-Control","no-cache");
    server.sendHeader("Set-Cookie","ESPSESSIONID=0");
    server.send(301);
    return;
  }
  if (server.hasArg("USERNAME") && server.hasArg("PASSWORD")){
    if (server.arg("USERNAME") == "admin" &&  server.arg("PASSWORD") == "root" ) // enter ur username and password you want
    {
      server.sendHeader("Location","/");
      server.sendHeader("Cache-Control","no-cache");
      server.sendHeader("Set-Cookie","ESPSESSIONID=1");
      server.send(301);
      Serial.println("Log in Successful");
      return;

      }

  msg = "Wrong username/password! try again.";
  Serial.println("Log in Failed");
  }
  String content = "<html><body style='background-color:MediumAquaMarine'><form action='/login' method='POST'><p  align ='center' style='font-size:300%;'><u><b><i>  Log In  </i></b></u></p>
";
  content += " <p   align ='center' style='font-size:160%'><b> UserName:<input type='text' name='USERNAME' placeholder='user name' required></b></p>
";
  content += "<p  align ='center' style='font-size:160%'><b>Password:<input type='password' name='PASSWORD' placeholder='password' required></b></p>
";
  content += "<p  align ='center' style='font-size:160%'><input type='submit' name='SUBMIT' value='Submit'></form>" + msg + "</p>
 </body></html>";
  server.send(200, "text/html", content);
}

//root page can be accessed only if authentification is ok
void handleRoot(){
  Serial.println("Enter handleRoot");
  String header;
  if (!is_authentified()){
    server.sendHeader("Location","/login");
    server.sendHeader("Cache-Control","no-cache");
    server.send(301);
    return;
  }
  String content =  "<body style='background: #80c6f7'><h1 align ='center'><b><u><i><strong>HOME AUTOMATION</strong></i></u></b></h1>
<p align ='center'>Lampe <a href=\"switch1On\"><button>ON</button></a>&nbsp;<a href=\"switch1Off\"><button>OFF</button></a></p>";
  content += "
<p  align ='center'>Lampe de sel <a href=\"switch2On\"><button>ON</button></a>&nbsp;<a href=\"switch2Off\"><button>OFF</button></a></p>";
  content += "
<p  align ='center'>Box  <a href=\"switch3On\"><button>ON</button></a>&nbsp;<a href=\"switch3Off\"><button>OFF</button></a></p>";
  content += "
<p><marquee direction='right'>Fais par Christophe Tanniou</marquee></p>";
  content += "



 <footer><p>Posted by: Phenomix</p><p><a href=\"mailto:someone@example.com\">xfiles0501@gmail.com</a>.</p></footer></body>"; 
  
   if (server.hasHeader("User-Agent")){
    content += "the user agent used is : " + server.header("User-Agent") + "

";
    
    
  }
  content += "You can access this page until you <a href=\"/login?DISCONNECT=YES\">disconnect</a></body></html>";
  server.send(200, "text/html", content);
}

//no need authentification
void handleNotFound(){
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET)?"GET":"POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i=0; i<server.args(); i++){
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
}



void setup(void){


   // preparing GPIOs
  pinMode(gpio1_pin, OUTPUT);
  digitalWrite(gpio1_pin, LOW);
  pinMode(gpio2_pin, OUTPUT);
  digitalWrite(gpio2_pin, LOW);
  pinMode(gpio3_pin, OUTPUT);
  digitalWrite(gpio3_pin, LOW);
  Serial.begin(115200);
  // Initialize the output variables as outputs
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
  // Set outputs to LOW
digitalWrite(relay1, LOW);
  digitalWrite(relay2, LOW);
  digitalWrite(relay3, LOW);
  
  
  delay(1000);
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  Serial.println("");

  Serial.begin(115200);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  if (mdns.begin("esp8266", WiFi.localIP())) {
    Serial.println("MDNS responder started");
  }


  server.on("/", handleRoot);
  server.on("/login", handleLogin);
  server.on("/inline", [](){
    server.send(200, "text/plain", "this works without need of authentification");
  });

  server.onNotFound(handleNotFound);
  //here the list of headers to be recorded
  const char * headerkeys[] = {"User-Agent","Cookie"} ;
  size_t headerkeyssize = sizeof(headerkeys)/sizeof(char*);
  //ask server to track these headers
  server.collectHeaders(headerkeys, headerkeyssize );


  server.on("/",[](){
   //
  });
  server.on("/switch1On", [](){
   // 
    digitalWrite(relay1 ,HIGH);
   
 
  });
  server.on("/switch1Off", [](){
 //  
    digitalWrite(relay1 ,LOW);
    delay(1000);
    
  
     
  });
  server.on("/switch2On", [](){
  //
    digitalWrite(relay2, HIGH);
    delay(1000);

  });
  server.on("/switch2Off", [](){
    //
    digitalWrite(relay2, LOW);
    delay(1000); 
   
  });
  server.on("/switch3On", [](){
    digitalWrite(relay3,LOW);
    delay(1000);
   
  });
  server.on("/switch3Off", [](){
    digitalWrite(relay3, HIGH);
    delay(1000); 
   
  });


  server.begin();
  Serial.println("HTTP server started");
}

void loop(void){
  server.handleClient();
}

RE

Pourriez vous SVP me faire une exemple de mon code avec une lampe et state en gardant mon interface si possible …
Car dans l’exemple du code qui permet de ce logguer ,il y a bien des relais mais l’interface n’offre aucun états des relais et me semble pas top…

que j’ai une piste de comment coder …
j’ai joint les 2 fichiers
Ce serais gentil.Cordialement

Le code qui permet de me loguer :(esp8266login)
Et mon code que j’aimerais garder (Central_domotique)

central_domotique_V1.ino (7.95 KB)

esp8266login.ino (6.84 KB)