Pages: 1 2 [3] 4   Go Down
Author Topic: Problema login arduino ethernet  (Read 3388 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Certo, ho scritto le righe del richiamo, poi devi fare tu le tue elaborazioni dei response ricevuti leggendo il char c, sono meno modifiche di quanto credi, una volta avute le credenziali puoi lanciare il 200 altrimenti sempre il 401

ti va di farmi le modifiche del caso, io sono principiante e di conseguenza imparo di più con gli esempi.
(non è che non ho voglia di fare)

Grazie
Logged

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 104
Posts: 6616
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ieri avevo la giornata libera, ma da oggi per i prossimi 3 giorni sarò un po' impegnato.  smiley-mr-green
Appena ho qualche minuto vedo di tirare giù qualche riga di codice.  smiley-wink
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2757
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Avevo fatto il programma di autenticazione ampliando la libreria tinywebserver perchè le mie pagine html si trovavano su sd e spedite solo se sei autenticato direi che funzionava bene, ma ho dovuto sconvolgere tante cose creando 2 nuove classi.

Ora tu hai fatto questo sketch che come verifica di utente autorizzato può essere meglio di niente smiley, però se hai voglia di perderci un po' di tempo puoi tentare di fare un web server con webduino e sostituire la libreria originale con quella per l'autenticazione.
http://www.kithouse.it/index.php?option=com_content&view=article&id=18&Itemid=29

Ho riscontrato che in questo sistema però una volta avuto i permessi permetteva a un secondo utente di entrare dato che la variabile
login==true l'avevo già resa vera io. E' vero che dopo un certo tempo di inattività dell' webserver un timer riporta la login=false, ma il metodo era solo un accrocchio.
Per ovviare a questo non resta che creare un cookie sul client che si distrugge quando chiudi il browser, chiunque si connette oltre te anche contemporaneamente apre un popup di login. Mi dico sempre poi la faccio, ma non l' ho mai fatto smiley
Alcune di queste cose le ho imparate smembrando il software che gestisce il mio router.

ciao
  
« Last Edit: January 04, 2013, 02:53:15 pm by pablos » Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

grazie ancora per la tua disponibilità, io ho scaricato già la libreria WebServerAuth, ma come dicevo
nei post precedenti io non sono esperto come voi, ho iniziato l'altro ieri (mi è arrivato l'arduino ethernet) a vedere e capire
cosa è uno sketch....quindi figurati come sono messo.

Io ho provato con il VB.net tramite il controllo web browser a passare la stringa ad esempio:
http://192.168.1.220/?L=1, e il led si accende, poi li passo http://192.168.1.220/?L=01 e il led si spegne, ma dopo queste
stringhe se passo altre stringhe sempre tramite il browser per accendere e spegnere i led non succede niente, ma devo chiudere
l'applicazione vb.net e riavviarla.(è come se posso cambiare solo una volto lo stato)
Se riuscissi (non so se si può fare) con vb.net potrei fare a meno dell'autenticazione tramite browser, quindi per la gestione
dell'arduino potrei usare un'applicazione vb.net, però è scomoda perchè deve risiedere su ogni pc che si vuole controllare arduino.
Il controllo via Web è molto più comodo e pratico.
« Last Edit: December 23, 2012, 07:08:24 am by format » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ieri avevo la giornata libera, ma da oggi per i prossimi 3 giorni sarò un po' impegnato.  smiley-mr-green
Appena ho qualche minuto vedo di tirare giù qualche riga di codice.  smiley-wink

In questi giorni ho fatto qualcosa per gestire meglio il login ma ho perso solo tempo....
non ti arrabbiare, ma ho sempre/ancora bisogno dei tuoi esempi.

Logged

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 104
Posts: 6616
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pubblica l'ultimo listato che hai modificato.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mannaggia l'ho eliminato..comunque non ti perdi niente, era così incasinato che non ci capivo più niente...
Avevo provato a fare l'autenticazione con questa libreria modificata:
http://www.kithouse.it/index.php?option=com_content&view=article&id=18&Itemid=29
però non ho concluso niente.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pubblica l'ultimo listato che hai modificato.

a questo link avevo preso l'esempio per l'autenticazione:
http://code.google.com/p/webduino/issues/detail?id=7
Logged

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 104
Posts: 6616
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si ho visto che la libreria è stata spostata su GitHub --> https://github.com/sirleech/Webduino
Ho compilato e caricato l'esempio sull'autenticazione di base e funziona.
Adesso bisogna capire come creare le varie pagine.  smiley-wink
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si ho visto che la libreria è stata spostata su GitHub --> https://github.com/sirleech/Webduino
Ho compilato e caricato l'esempio sull'autenticazione di base e funziona.
Adesso bisogna capire come creare le varie pagine.  smiley-wink

Sto provando a unire i 2 codici questo:  https://github.com/sirleech/Webduino
e uno che ho modificato con webduino per accendere e spegnere tre led, provandoli uno alla volta funzionano, la mia intenzione
era unire i due codici in modo di avere autenticazione e gestione dei led, ma quando faccio la verifica ho sempre qualche
errore, spesso sulle parentesi graffe.

Questo è il codice per i led:



Code:
Codice di esempio:
#include <Ethernet.h>
#include <SPI.h>
#include <WebServer.h> //libreria webduino
 
//variabili statiche per il mac address e lìip address
static byte mac_Add[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//cambiare l'ip in funzione della propria rete
static byte ip_Add[] = {
  192, 168, 1, 220 };
//creazione oggetto Webduino
WebServer webserver("", 80);
 
//Variabili booleane che memorizzano
//lo stato delle uscite collegate ai relè
boolean Rele1 = false;
boolean Rele2 = false;
boolean Rele3 = false;
 
//=============================================================================
//funzione pagina Start
void Start(WebServer &server, WebServer::ConnectionType type,
           char *url_param, bool param_complete)
{
  //restituisce al browser l'intestazione http 200 OK
  server.httpSuccess();
 
  //gestisco il tipo di richiesta HEAD
  if (type != WebServer::HEAD)
  {
    String s = "";
 
     if (param_complete == true)
    {
      s = url_param;
 
      if ( s == "R1=ON")
      {
        Rele1 = true;
        digitalWrite(3, HIGH);
      }
      else if ( s == "R1=OFF")
      {
        Rele1 = false;
        digitalWrite(3, LOW);
      }
 
      if ( s == "R2=ON")
      {
        Rele2 = true;
        digitalWrite(5, HIGH);
      }
      else if ( s == "R2=OFF")
      {
        Rele2 = false;
        digitalWrite(5, LOW);
      }
 
      if ( s == "R3=ON")
      {
        Rele3 = true;
        digitalWrite(6, HIGH);
      }
      else if ( s == "R3=OFF")
      {
        Rele3 = false;
        digitalWrite(6, LOW);
      }
    }
 
    //gestisco la pagina html in base allo stato delle uscite di Arduino
    P(htmlHead) =
    "<html>"
    "<head>"
    "<title>Arduino Scheda Rele</title>"
    "</head>"
    "<body>";
 
    server.printP(htmlHead);
 
    server.print("<table border=\"1\">");
    server.print("<tr><td>Stato Rele</td><td>Comandi</td></tr>");
 
    if(Rele1 == true)
      server.print("<tr><td style=\"color: red;\">RELE 1 ON</td><td>");
    else
      server.print("<tr><td style=\"color: black;\">RELE 1 OFF</td><td>");
 
    if(Rele1 == false)
    // server.print("<input type=button onclick=location.href='index.htm?R1=ON'" value='clicca qui\">");
   // server.print (" <input type='button' value='clicca qui' onclick='location.href=index.htm?R1=ON'\">");
    server.print("<input type= button value='clicca qui'onclick=\"location.href='index.htm?R1=ON'\">");
    else
   // server.print("<input type=button onclick=location.href='index.htm?R1=OFF'" value='clicca qui\">");
   //server.print (" <input type='button' value='clicca qui' onclick='location.href=index.htm?R1=OFF'\">");
   server.print("<input type= button value='clicca qui'onclick=\"location.href='index.htm?R1=OFF'\">");
 
    server.print("</td></tr>");
 
    if(Rele2 == true)
      server.print("<tr><td style=\"color: red;\">RELE 2 ON</td><td>");
    else
      server.print("<tr><td style=\"color: black;\">RELE 2 OFF</td><td>");
 
    if(Rele2 == false)
    //server.print("<input type=button onclick="location.href='index.htm?R2=ON'" value='clicca qui\">");
    //server.print (" <input type='button' value='clicca qui' onclick='location.href=index.htm?R2=ON'\">");
      server.print("<input type= button value='clicca qui'onclick=\"location.href='index.htm?R2=ON'\">");
    else
    server.print("<input type= button value='clicca qui'onclick=\"location.href='index.htm?R2=OFF'\">");
    //server.print("<input type=button onclick="location.href='index.htm?R2=OFF'" value='clicca qui\">");
    //server.print (" <input type='button' value='clicca qui' onclick='location.href=index.htm?R2=OFF'\">");
     //server.print("<input type=\"button\" value=\"clicca qui\"
                  //  onclick=\"location.href='index.htm?R2=OFF'\">");
 
    server.print("</td></tr>");
 
    if(Rele3 == true)
  
      server.print("<tr><td style=\"color: red;\">RELE 3 ON</td><td>");
    else
      server.print("<tr><td style=\"color: black;\">RELE 3 OFF</td><td>");
 
    if(Rele3 == false)
    //server.print("<input type=button onclick="location.href='index.htm?R3=ON'" value='clicca qui\">");
    //server.print (" <input type='button' value='clicca qui' onclick='location.href=index.htm?R3=ON'\">");
    server.print("<input type= button value='clicca qui'onclick=\"location.href='index.htm?R3=ON'\">");
    else
    //server.print("<input type=button onclick="location.href='index.htm?R3=OFF'" value='clicca qui\">");
    //server.print (" <input type='button' value='clicca qui' onclick='location.href=index.htm?R3=OFF'\">");
    server.print("<input type= button value='clicca qui'onclick=\"location.href='index.htm?R3=OFF'\">");
 
    server.print("</td></tr>");
 
    server.print("</table></body></html>");
 
  }
}
//=============================================================================
 
void setup()
{
  //inizializzo l'ethernet shield con il mac e il address
  Ethernet.begin(mac_Add, ip_Add);
 
  //definisci l'azione di default che verrà eseguita quando l'utente
  //naviga nella root del sito
  webserver.setDefaultCommand(&Start);
  webserver.addCommand("index.htm", &Start);
 
  //avvia il web server
  webserver.begin();
 
  delay(100);
 
  //definisci i pin 2 3 4 in uscita
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
 
  //inizializza i le uscite
  digitalWrite(3, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
 
}
 
void loop()
{
  //elabora costantemente tutte le richieste provenienti dal browser
  webserver.processConnection();
}

« Last Edit: December 30, 2012, 03:10:14 am by format » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Con questo codice faccio l'autenticazione e accendo il led, ma come già successo in precedenza dopo il clic per accendere il led
(comunque il led si accende) torno alla pagina di login, se clicco sul login questa volta non mi chiede le credenziali di accesso
ma vado direttamente alla pagina per spegnere il led e così all'infinito.

Code:
#define WEBDUINO_AUTH_REALM "Prova Autenticazione"

#include "SPI.h"
#include "Ethernet.h"
#include "WebServer.h"


static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };


static uint8_t ip[] = { 192, 168, 1, 220 };

#define PREFIX ""
WebServer webserver(PREFIX, 80);

boolean Rele1 = false;

void defaultCmd(WebServer &server, WebServer::ConnectionType type,char *url_param, bool param_complete)
                    
{
  server.httpSuccess();
  if (type != WebServer::HEAD)
  {
  
    {
    String s = "";
 
     if (param_complete == true)
    {
      s = url_param;
 
      if ( s == "R1=ON")
      {
        Rele1 = true;
        digitalWrite(3, HIGH);
      }
      else if ( s == "R1=OFF")
      {
        Rele1 = false;
        digitalWrite(3, LOW);
      }
   }      
 
P(helloMsg) = "<h1>Prova Autenticazione</h1><a href=\"private.html\">Accesso</a>";

    server.printP(helloMsg);
     server.print("<h2>User = 1234   Password = 1234</h2>");  
  }
}
}


void privateCmd(WebServer &server, WebServer::ConnectionType type,
         char *url_param, bool param_complete)
          
          
          
{
 if (server.checkCredentials("MTIzNDoxMjM0"))
  {
    server.httpSuccess();
    if (type != WebServer::HEAD)
    {
      P(helloMsg) = "<h1>Acesso eseguito</h1>";
      server.print("<table border=\"1\">");
    server.print("<tr><td>Stato Rele</td><td>Comandi</td></tr>");
     if(Rele1 == true)
      server.print("<tr><td style=\"color: red;\">RELE 1 ON</td><td>");
    else
      server.print("<tr><td style=\"color: black;\">RELE 1 OFF</td><td>");
 
    if(Rele1 == false)
    server.print("<input type= button value='clicca qui'onclick=\"location.href='index.html?R1=ON'\">");
    else
  
   server.print("<input type= button value='clicca qui'onclick=\"location.href='index.html?R1=OFF'\">");
 
    server.print("</td></tr>");
      server.printP(helloMsg);
        
    }
  }
  
       else
 
  {
    /* send a 401 error back causing the web browser to prompt the user for credentials */
    server.httpUnauthorized();
  }
  

}


void setup()
{
  Ethernet.begin(mac, ip);
  webserver.setDefaultCommand(&defaultCmd);
  webserver.addCommand("index.html", &defaultCmd);
  webserver.addCommand("private.html", &privateCmd);
  webserver.begin();
  
  delay(100);
  
   //definisci i pin 2 3 4 in uscita
  pinMode(3, OUTPUT);
 
 
  //inizializza i le uscite
  digitalWrite(3, LOW);
 
}

void loop()
{
  char buff[64];
  int len = 64;

  /* process incoming connections one at a time forever */
  webserver.processConnection(buff, &len);
}
« Last Edit: December 30, 2012, 10:10:18 am by format » Logged

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 104
Posts: 6616
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho trovato questa guida molto interessante -->http://www.logicaprogrammabile.it/webduino-recuperare-parametri-da-url/
e anche questo --> http://www.logicaprogrammabile.it/webduino-aggiungere-pagine-web/
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A dire il vero proprio da li ho preso spunto, ma il problema è che non riesco a gestire il login.
Dopo il login se accendo / spengo il led mi torna sempre nella pagina di login...
Logged

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 104
Posts: 6616
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non conosco così bene il Webduino da capirne con sicurezza il comportamento.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il problema credo sia questo, cosa che tu hai individuato qualche post più su:

Quote
Si, lo so che non funziona.... ho tirato fuori il mio Arduino R3 + Ethernet shield e sto provando "con mano" il codice.
Il problema come ti ho detto nel messaggio precedente è che ogni volta che invii un comando all'Arduino lui fa il check della login.
Bisognerebbe aggiungere una variabile firstlogin in modo da discriminare se il login è stato già fatto.
Logged

Pages: 1 2 [3] 4   Go Up
Jump to: