Pages: [1]   Go Down
Author Topic: Probleme Mit Arduino Ethernetshield.  (Read 3211 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 10
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?


Logged

0
Offline Offline
God Member
*****
Karma: 1
Posts: 663
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vielleicht mit einer BAA, das wäre am sinnvollsten.

http://en.wikipedia.org/wiki/Basic_access_authentication
« Last Edit: January 07, 2011, 07:57:16 am by saw0 » Logged

Bremen / Germany
Offline Offline
Full Member
***
Karma: 1
Posts: 140
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 10
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@ 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 !
Logged

CH
Offline Offline
God Member
*****
Karma: 19
Posts: 704
Book Writer "Arduino Praxiseinstieg"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 10
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
<?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;
?>

Logged

CH
Offline Offline
God Member
*****
Karma: 19
Posts: 704
Book Writer "Arduino Praxiseinstieg"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: January 08, 2011, 07:47:33 am by webmeister » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 10
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

CH
Offline Offline
God Member
*****
Karma: 19
Posts: 704
Book Writer "Arduino Praxiseinstieg"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.  >smiley-sad

Siehe meinen Nachtrag vom vorherigen Post.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 10
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: January 08, 2011, 01:21:49 pm by Muz » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 10
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sorry, Doppelpost  >smiley-sad

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?

« Last Edit: January 08, 2011, 07:16:30 pm by Muz » Logged

Bremen / Germany
Offline Offline
Full Member
***
Karma: 1
Posts: 140
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
// 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-)
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 10
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Danke !! smiley
Logged

Pages: [1]   Go Up
Jump to: