Probleme Mit Arduino Ethernetshield.

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?

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

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

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 :wink:

Lieben Gruß
Poldi

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

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

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.

<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    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;
} else {
    echo "<p>Hallo {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo "<p>Sie gaben {$_SERVER['PHP_AUTH_PW']} als Passwort ein.</p>";
}
?>

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.

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

Schau dir mal dieses Webinterface an, speziell die Abfrage nach L=1

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

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

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.

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

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?

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

// 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 :sunglasses:

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

Danke !! :slight_smile: