Commande de l'arduino via un site

Bonjour à tous !!!

Oui, oui, oui je sais, ce sujet a déjà été traité mainte fois mais j'ai une question dont je n'ai pas encore trouvé ma réponse =)

Donc, j'essaye de trouver une solution pour qu'a travers un site, lorsque on clique sur un bouton, un ordre soit envoyé à l'arduino.
Cependant, la seul solution viable que j'ai trouvé pour le moment c'est la mettre en mode client. Cependant pour cela il faut qu'elle se connecte à mon site, qui nécessite un log pour y arriver --' (type la sécurité pour accéder à un router). Une idée comment faire pour que l'arduino puisse se loger ?

Merci d'avance à tous !!

Et bonne journée,

Jean

Bonjour

içi une Arduino en serveur qui gére des leds selon les actions du client
http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoEthernetServeurControleLEDx7

Merci déjà pour le tuto, il est super enrichissant !

Tu peut regarder mon topic domotique si tu veut, je suit en train de faire la même chose :wink:

merci merci merci ! C'est exactement ce dont j'avais besoin !

Mais une question reste en suspens, comment puis-je connecter ma arduino sur un site sécurisé demandant un login ? (la sécurité type celle des routeurs)

Il te faut mettre en place un "htaccess" sur ton site web :wink:

Apres quel code mettre dans l'ethernet-shield pour entre le login+mdp ça je peut pas te dire mais pas contre la réponse m'interesse car pour le moment mon projet "domotique" est en "security-free" ^^

justement le httpacces est déjà en place, mon soucis est comme toi, au niveau de l'arduino. Donc avis aux expérimentés :wink:

Yep!

Vous pouvez peut-être implémenter un API-Key, une clé unique par utilisateur grosso modo.

J'ai déjà vu des exemples d'arduino se connectant à pachube par exemple avec cette gestion par clé. Par contre, je n'ai aucune idée de comment ajouter cette option sur un site personnel et donc l'arduino.
Mais ce me semble être l'idée la plus simple et la plus aisée à gérer...

Trés suscintement :

Voilà ce que j'ai trouvé rapidement, pour donner l'idée génerale :

http://community.pachube.com/arduino/ethernet/watchdog
http://community.pachube.com/node/693
http://john.crouchley.com/blog/archives/706

Faudra voir si çà marche dans les deux sens, à priori POST ou GET même combat :wink:

@+

Zoroastre.

Sinon dans processing faut faire comme ça, après est-ce que on peut faire pareil sur l’arduino …

void draw(){
  
   Authenticator.setDefault(new Authenticator(){
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("login","password".toCharArray());
            }
        });

j'ai sous le coude (pas eu encore le temps d'avancer ni de vérifier) des infos qui devaient permettre d'avancer sur l'accès à une page protégée par .htaccess. Ce n'est pas une solution mais juste une piste que je prévoyais de creuser .. si ça peut aider....

  1. étudier cette page, en particuler l'échange client-serveur détaillé au paragraphe "Faiblesse htaccess : Authentification HTTP"
    La méthode d'authentification htaccess
  2. reproduire ce dialogue après avoir codé en Base64 le couple login/mot de passe

extrait de l'article de securiteinfo mentionné ci-dessus:

L'utilisateur souhaite accéder à une page web qui s'avère être protégée par htaccess. Concrètement, il y a 2 échanges requête/réponse HTTP qui sont effectués pour donner accès à cette page.
Le premier est une requête simple (un GET) signifiant que le client souhaite accéder à la page. La réponse est "401 Authorization Required", ce qui signifie que la page est protégée et nécessite une authentification (de type "Basic"). L'utilisateur ne voit pas cette réponse, seul le navigateur (browser) la voit et affiche en réponse une popup dans laquelle il demande à l'utilisateur de taper son login et mot de passe.
Après cette opération, le navigateur réitère son GET en ajoutant cette fois-ci les informations de l'utilisateur ("Authorization: Basic QWxpY2U6TGFwaW4=") qui serviront au serveur pour l'authentifier.
Si tout se passe bien, la requête est acceptée ("200 OK") et l'utilisateur peut accéder à la page web.

Pour coder une chaîne en base64 (et décoder) il y a en ligne des sites comme celui là :
http://home2.paulschou.net/tools/xlate/

Il suffirait donc apparemment , quand le serveur se contente de ce type élémentaire d'authentification, d'envoyer un second GET avec données d'identification en Base64 peu après l'arrivée du "401 Authorization Required"

Bonne nuit à tous !!

Voici la partie ethernet de mon programme fini ! Aidez moi à le corriger please =) Je suis sur qu’il y a des trucs inutiles ^^

Sur ce bonne nuit et merci d’avance :wink:

#include <SPI.h>
#include <Ethernet.h>
#include <Server.h>
#include <Client.h>


const int LED1=A4;
const int LED2=A5;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,1,30 };
byte passerelle[] = { 192, 168, 1, 1 };
byte masque[] = { 255, 255, 255, 0 };
String chaineRecue="";
int comptChar=0;
String etatCase[7]={ "","","","","","",""}; 
Server serveurHTTP(80);

void setup()   {

Ethernet.begin(mac, ip, passerelle, masque);
serveurHTTP.begin();

   pinMode (LED1,OUTPUT);
   pinMode (LED2,OUTPUT);
   digitalWrite (LED1,LOW);
   digitalWrite (LED2,LOW);
}

void loop(){

  (!serveurHTTP.available());
  Client client = serveurHTTP.available();

  if (client) {
    chaineRecue="";
    comptChar=0;
    if (client.connected()) {
      while (client.available()) {
      		char c = client.read();
                comptChar=comptChar+1;
                if (comptChar<=100) chaineRecue=chaineRecue+c; 
      }

    String chaineAnalyse="";
    int indexChaine=0;
    int longeurChaine=chaineRecue.length();
    indexChaine=5;
    chaineAnalyse=chaineRecue.substring(indexChaine,indexChaine+1);

    if (chaineAnalyse == "?") {

      chaineAnalyse="L"+String(1)+"=ON"; 

      if (chaineRecue.indexOf(chaineAnalyse)!=-1){

        digitalWrite(LED1,HIGH);
      }

      chaineAnalyse="L"+String(2)+"=ON"; 

      if (chaineRecue.indexOf(chaineAnalyse)!=-1){

        digitalWrite(LED2,HIGH);

      }
    }
    }
    client.stop(); 
  }
}

Bonjour jjdu67

-pas sûr que les lignes

#include <Server.h>
#include <Client.h>

soient indispensables

String etatCase[7]={ “”,"","","","","",""};

déclarée mais semble inutilisée

-quel peut bien être le rôle de cette ligne ?

(!serveurHTTP.available());

-la compréhension du traitement de la chaîne reçue demande un peu plus de temps, je ne comprend pas au premier coup d’oeuil !!