Go Down

Topic: Probleme Mit Arduino Ethernetshield. (Read 3 times) previous topic - next topic

Muz

Guten Tag,

ich beschäftige mich seit einigenwochen mit dem Arduino UNO.
Vor ein paar tagen habe ich mir dann das zugehörige Ethernetshield besorgt.
Grundlegend war dies auch kein Problem ans Internet zu bekommen.
Ich kann auf meiner Dyndns Seite jetzt immer die aussen und die zimmer Temp. sehen.
Jedoch möchte ich das Ganze mit einem Passwort sichern.
Frage ist jetzt: Kann ich eine htaccess Datei erzeugen und auf dem Arduino verwenden? (ich denke nicht)
Wie kann ich das ganze System sonst mit einem Passwort schützen?
Hat jem. vill. dazu ein beispiel Code?



apogee

#1
Jan 07, 2011, 01:56 pm Last Edit: Jan 07, 2011, 01:57 pm by saw0 Reason: 1
Vielleicht mit einer BAA, das wäre am sinnvollsten.

http://en.wikipedia.org/wiki/Basic_access_authentication

Poldi

Schau mal hier. Da wird die Möglichkeit der Verwendung von QR-Codes beschrieben:

http://www.instructables.com/id/Arduino-Web-LED/step5/Accessing-and-controlling-the-Arduino-from-the-Web/

Bin selber auch noch dran, den Post "Arduino als Webserver" zu verbessern (wird auch hier diskutiert).

Wenn Du etwas weiter damit bist, lass es uns bitte wissen. Werde auch hier schreiben, wenn ich einen einfachen Weg gefunden habe ;-)

Lieben Gruß
Poldi

Muz

@ apogee

Ja das habe ich auch schon gefunden bin mir aber mit der Umsetzung total unsicher, ich mein ich kann das ja nich einfach kopieren und gut ist.

@Poldi

ich habe mir dein projekt auch gestern mal runtergeladen, jedoch ist es (zumind. bei mir) relativ instabiel.
Ich habe noch meine Temp. Auslesung eingefügt danach hat der Controller nur noch unsinn gemacht.
Manchmal komplett absturz, manchmal die Seite 5-6 fach angezeigt, manchmal gibgs 10 min glatt..
Ich werde mich aber auch mal zu deinem Thema melden.

Danke für die Links !

Webmeister

Variante 1:
Uebergabe eines Sicherheitscodes via URL beim Aufruf der Arduino-Seite.
also:
meinarduino.dyndns.com/?auth=3573eASFRWgç%%d
Abfrage des korrekten Codes und wenn OK, Darstellung der Inhalte.
Vorteile(+), Nachteile (-)
+ Keine zusätzliche Installation nötig
+ einfache Lösung
- Sicherheitscode wird in Plaintext übertragen und ist in URL sichtbar

Variante 2:
Lokaler Webserver auf einem Rechner installieren. Datei .htaccess konfigurieren und nötige Daten von der Arduino-Seite als Include (IFrame, JavaScript, XML oder JSON) einbinden.
+ volle Webserver-Funktionalität (auch Skriptsprachen möglich)
+ relativ einfache Lösung
- zusätzlicher Webserver notwendig

Muz

Also danke erstmal für die Antwort!

Variante2. kommt eig. nicht infrage.
Zu Variante 1, hast du dazu vill. einen kurzen beispielcode?

Ich habe auch noch etwas gefunden und wollte mal nachfragen ob ich einen php Code auf dem Arduino zum rennen bringen kann?
Denkanstoss war bei mir der angehängte Code.
Dort wird die Auth. relativ einfach realisiert denke ich.

Code: [Select]
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) &#123;
    
header('WWW-Authenticate: Basic realm="My Realm"');
    
header('HTTP/1.0 401 Unauthorized');
    echo 
'Text, der gesendet wird, falls der Benutzer auf Abbrechen drückt';
    exit;
&
#125; else &#123;
    
echo "<p>Hallo &#123;$_SERVER['PHP_AUTH_USER']&#125;.</p>";
    echo 
"<p>Sie gaben &#123;$_SERVER['PHP_AUTH_PW']&#125; als Passwort ein.</p>";
&
#125;
?>


Webmeister

#6
Jan 08, 2011, 01:46 pm Last Edit: Jan 08, 2011, 01:47 pm by webmeister Reason: 1
Quote
wollte mal nachfragen ob ich einen php Code auf dem Arduino zum rennen bringen kann

Nein, geht nicht.
Darum meine Variante 2.
Arduino ist zuwenig stark auf der Brust um komplexe Webanwendungen und Webskripte zu betreiben.

Quote
Zu Variante 1, hast du dazu vill. einen kurzen beispielcode?

Schau dir mal dieses Webinterface an, speziell die Abfrage nach L=1
http://www.scienceprog.com/getting-hands-on-arduino-ethernet-shield/

Nachtrag:
Da der Link zum oben genannten Beispiel scheinbar momentan nicht geht, suche die Adresse in Google und ruf die Cache-Version auf.

Muz

Ok, ich bin gerade wohl sehr dumm.
Wie bekomme ich diese Datei geöffnet?

Webmeister

Quote
Wie bekomme ich diese Datei geöffnet?

Nein, nicht die Website aufrufen sondern den Link bei Google eingeben und dann die Cache-Version von Google aufrufen.
Was hinter der Datei steckt, welche beim Aufruf der Seite kommt, will ich gar nicht austesten.  >:(

Siehe meinen Nachtrag vom vorherigen Post.

Muz

#9
Jan 08, 2011, 06:07 pm Last Edit: Jan 08, 2011, 07:21 pm by Muz Reason: 1
Alles klar, habe mir das ganze angelesen. Klappt leider nicht auf der Aktuellen version 0022.

Klappt doch durch leichte Modifikationen.
Gut ich kann nun eine Checkbox auslesen.
Wenn ich jetzt eine "textbox" auslesen und vergleichen kann habe ich ja schon meine "Passwortkontrolle"
Mal sehen wie ich das anstelle, werde ich morgen mal probieren
Irgendwe schon ideen?


und Thx @ all

Muz

#10
Jan 09, 2011, 12:22 am Last Edit: Jan 09, 2011, 01:16 am by Muz Reason: 1
Sorry, Doppelpost  >:(

Nja, ich habe jetzt eine HTML textzeile. diese lese ich blöderweise als String aus. (readString.indexOf).

Kann mir jem. readString.indexOf erklären?  :-/
Ich kann nicht ordendlich auf einen Zahlenwert vergleichen.
Oder muss das ganze erst in Int?


Poldi

Mahlzeit!

Hier ist ein Beispielcode für die Übergabe von Daten in der Browser-Adressleiste. Er kommt von meiner Seite zum Thema Home-Automation.

Schau mal nach readString.startsWith

Code: [Select]
// ARDUINO 0021
//
//
#include <SPI.h>
#include <Ethernet.h>

#define action_none -1
#define action_out_all 0
#define action_on_light 1
#define action_off_light 2

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xBE }; //physical mac address
byte ip[] = { 192, 168, 1, 222 };                  // ip address
byte gateway[] = { 192, 168, 1, 200 };                  // internet access via router
byte subnet[] = { 255, 255, 255, 0 };                   //subnet mask
Server server(80);                                      //server port
String readString = String(30); //string for fetching data from address

// arduino out
int pinOutPlight = 4;


// incoming GET command
String r_pinOnLight = "GET /?out=4&status=1";
String r_pinOffLight = "GET /?out=4&status=0";
String r_out_all = "GET /?out=all";

// current action
int current_action;

void setup(){
 //start Ethernet
 Ethernet.begin(mac, ip, gateway, subnet);
 delay(1000);

 pinMode(pinOutPlight, OUTPUT);
 digitalWrite(pinOutPlight, LOW);
 //enable serial datada print
 Serial.begin(9600);
 current_action = -1;
}
void loop(){
 current_action = -1;

 // Create a client connection
 Client client = server.available();
   if (client) {
     while (client.connected()) {
      if (client.available()) {
       char c = client.read();
       //read char by char HTTP request
       if (readString.length() < 30)
       {
         //store characters to string
         readString = readString + c;
       }
       //output chars to serial port
       //Serial.print(c);
       //if HTTP request has ended
       if (c == '\n') {

        Serial.print(readString);
        // ****************************************************
         if(readString.startsWith(r_pinOnLight))
         {
         Serial.print("\n ON UP \n");
         current_action = action_on_light;
         }
         else if(readString.startsWith(r_pinOffLight))
         {
          Serial.print("\n OFF UP \n");
          current_action = action_off_light;
         }
         else if(readString.startsWith(r_out_all))
         {
           Serial.print("\n ALL\n");
           current_action = action_out_all;
         }
         else
         {
           Serial.print("\n None \n");
           current_action = action_none;
         }
        // ****************************************************
         // now output HTML data starting with standart header
         client.println("HTTP/1.1 200 OK");
         client.println("Content-Type: text/html");
         client.println();
        char buf[12];
        switch(current_action)
        {
        case action_out_all:
           client.print("{\"ip\" : \"192.168.1.222\", \"devices\" : [{ \"type\" : \"light\", \"name\" : \"LED\", \"out\" : \"");
           client.print(pinOutPlight);
           client.print("\"}");
           client.print("]}");
          break;
        case action_on_light:
          digitalWrite(pinOutPlight, HIGH);
          client.print("{\"status\" : \"1\" , \"out\" : \"");
          client.print(pinOutPlight);
          client.print("\"}");
          break;
        case action_off_light:
          digitalWrite(pinOutPlight, LOW);
          client.print("{\"status\" : \"0\" , \"out\" : \"");
          client.print(pinOutPlight);
          client.print("\"}");
          break;
        default:
          current_action = action_none;
        }


        // ****************************************************

         //clearing string for next read
         readString="";
         //stopping client
         client.stop();
       }
     }
   }
 }
}


Hoffe es ist das, was Du meinst.

LG
Poldi  8-)

Muz

Sehr schön mit GET =D
Werde ich am Wochenende mal ausprobieren!

Danke !! :)

Go Up