ESP - Lan und PoE

Begonnen von der-Lolo, 20 Juni 2018, 10:26:56

Vorheriges Thema - Nächstes Thema

Benni

Zitat von: rabehd am 20 Juni 2018, 15:54:03
Vorher hat er ein Fenster eingeworfen, den Server gefunden, die Sirene zerstört...

Zitat von: rabehd am 20 Juni 2018, 16:15:42
Alle Einbrüche in der Strasse gingen über die Terassen und nie würde das Klirren gehört. Dabei brauchten sie bei uns 4 Steine.

Genau deshalb lohnt sich die ganze Panik in meinen Augen nicht. Einbrecher sind i.d.R. doch keine Tech-Nerds, die IDs kopieren oder Brute-Force-Attacken auf  Codeschlösser, RFID-Reader oder ähnliches starten. Viel zu viel Aufwand!
Schraubendreher und Steine sind da durchaus gängiges Werkzeug und in der Regel ist die Haustür nicht das Ziel.

Zitat von: rabehd am 20 Juni 2018, 16:15:42
Das Türschloß würde ich nicht an irgendeine Technik hängen, Garage vielleicht

Für mich bedeutet so eine Zugangsmöglichkeit per (Fingerprint in meinem Fall) eine erhebliches Komfort-Plus und kein zusätzliches Sicherheitsrisiko.

Etwas OT und sorry für's Zitate-Zerpflücken  ;)

gb#

der-Lolo

Komfort Plus ist das Stichwort - und das mit den Nerds sehe ich genauso.

Die Hardware ist bestellt, mal schauen ob es hiermit klappt. Über den UnifiSwitch kann ich PoE per Fhem schalten.
Wie lange braucht so ein ESP32 um einsatzbereit zu sein nachdem ich von FHEM aus geschaltet hab?

sbiermann

Kommt drauf an was er tun soll, wenn er erst ins WLAN muss, dann dauert es vermutlich ein paar Sekunden. Ohne WLAN kann er im Prinzip fast sofort los legen.

der-Lolo

Kein WLan ich möchte Ethernet nutzen - vom prinzip her wäre es denkbar das er selbst auf die richtige nummer prüft und schaltet falls diese nicht älter als 24h ist.
Den Vorgang kann das Teil ja dann an FHEM melden sobald die verbindung steht.

der-Lolo

Guten Morgen nochmal,
wir haben nun einen ESP bestellt und haben auch schon einen funktionierenden Sketch.
Thema ist nun noch die kommunikation per LAN und übermitteln der Daten an FHEM.

Ist es möglich den ESP32 per LAN von der Arduino IDE aus zu flashen? Über einen hinweis auf die richtige Ethernet Lib würden wir uns riesig freuen.


Wichtel

Natürlich ist das möglich, aber sehr davon abhängig was du denn für eine Ethernet-Hardware dran baust.

WLAN ist halt immer drin, Ethernet keins.

PS.: Unter "Ein ESP" wird meist etwas anderes verstanden als "ein ESP32". Vor dem ESP32 war der ESP8266 "der heiße Scheiß". Wenn du fertige Projekte nachbauen willst etc. ist der eine nicht direkt durch den anderen ersetzbar.


der-Lolo

Könnte mir beim Flashen per LAN bitte jemand helfen? Ich finde einfach nichts brauchbares...

der-Lolo

#23
Zum einem um es für mich selbst festzuhalten, zum anderen um es auch für andere verfügbar zu machen...

Ich habe es nun geschafft den ESP32-EVB mithilfe des Adapters per PoE zu versorgen, ausserdem habe ich es geschafft ein firmware Update per LAN auf den ESP32-EVB zu schieben. Im nach hinein war natürlich alles ganz einfach... In etwa habe ich mich an diese Anleitung gehalten - das ganze erstmal per Wifi zum laufen gebracht, danach LAN hinzugefügt und Wifi wieder entfernt.

https://github.com/espressif/arduino-esp32/blob/master/docs/OTAWebUpdate/OTAWebUpdate.md

Der Adapter:
https://www.amazon.de/ANVISION-Splitter-Adapter-USB-Raspberry/dp/B079D5JXNF/ref=sr_1_1_sspa?s=ce-de&ie=UTF8&qid=1529486030&sr=1-1-spons&keywords=poe+adapter+5v&psc=1

Der ESP32-EVB:
https://www.amazon.de/ESP32-EVB-Platine-Espressif-100MBit-Ethernet/dp/B01M3TAYWT/ref=pd_bxgy_107_img_2?_encoding=UTF8&pd_rd_i=B01M3TAYWT&pd_rd_r=df5bbf05-7469-11e8-9099-edb19b0ca03f&pd_rd_w=4e55X&pd_rd_wg=c6SN0&pf_rd_i=desktop-dp-sims&pf_rd_m=A3JWKAKR8XB7XF&pf_rd_p=5721820101550835664&pf_rd_r=1XW8417342G657GK7M46&pf_rd_s=desktop-dp-sims&pf_rd_t=40701&psc=1&refRID=1XW8417342G657GK7M46

Der Sketch schaut nun so aus:

#include <WebServer.h>
#include <Update.h>
#include <ETH.h>

static bool eth_connected = false;    // Ethernet Variable
WebServer server(80);

/*
* Login page
*/

const char* loginIndex =
"<form name='loginForm'>"
    "<table width='20%' bgcolor='A09F9F' align='center'>"
        "<tr>"
            "<td colspan=2>"
                "<center><font size=4><b>GardenDoor Login Page</b></font></center>"
                "<br>"
            "</td>"
            "<br>"
            "<br>"
        "</tr>"
        "<td>Username:</td>"
        "<td><input type='text' size=25 name='userid'><br></td>"
        "</tr>"
        "<br>"
        "<br>"
        "<tr>"
            "<td>Password:</td>"
            "<td><input type='Password' size=25 name='pwd'><br></td>"
            "<br>"
            "<br>"
        "</tr>"
        "<tr>"
            "<td><input type='submit' onclick='check(this.form)' value='Login'></td>"
        "</tr>"
    "</table>"
"</form>"
"<script>"
    "function check(form)"
    "{"
    "if(form.userid.value=='XXXX' && form.pwd.value=='XXXX')"
    "{"
    "window.open('/serverIndex')"
    "}"
    "else"
    "{"
    " alert('Error Password or Username')/*displays error message*/"
    "}"
    "}"
"</script>";

/*
* Server Index Page
*/

const char* serverIndex =
"<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script>"
"<form method='POST' action='#' enctype='multipart/form-data' id='upload_form'>"
   "<input type='file' name='update'>"
        "<input type='submit' value='Update'>"
    "</form>"
"<div id='prg'>progress: 0%</div>"
"<script>"
  "$('form').submit(function(e){"
  "e.preventDefault();"
  "var form = $('#upload_form')[0];"
  "var data = new FormData(form);"
  " $.ajax({"
  "url: '/update',"
  "type: 'POST',"
  "data: data,"
  "contentType: false,"
  "processData:false,"
  "xhr: function() {"
  "var xhr = new window.XMLHttpRequest();"
  "xhr.upload.addEventListener('progress', function(evt) {"
  "if (evt.lengthComputable) {"
  "var per = evt.loaded / evt.total;"
  "$('#prg').html('progress: ' + Math.round(per*100) + '%');"
  "}"
  "}, false);"
  "return xhr;"
  "},"
  "success:function(d, s) {"
  "console.log('success!')"
"},"
"error: function (a, b, c) {"
"}"
"});"
"});"
"</script>";

/*
* setup function
*/

void WiFiEvent(WiFiEvent_t event)
{
   switch (event) {
     case SYSTEM_EVENT_ETH_START:
       Serial.println("ETH Started");
       //set eth hostname here
       ETH.setHostname("GardenDoor");
       break;
     case SYSTEM_EVENT_ETH_CONNECTED:
       Serial.println();
       Serial.println("ETH Connected - GardenDoor");
       break;
     case SYSTEM_EVENT_ETH_GOT_IP:
       Serial.print("ETH MAC: ");
       Serial.print(ETH.macAddress());
       Serial.print(", IPv4: ");
       Serial.print(ETH.localIP());
       if (ETH.fullDuplex()) {
         Serial.print(", FULL_DUPLEX");
       }
       Serial.print(", ");
       Serial.print(ETH.linkSpeed());
       Serial.println("Mbps");
       eth_connected = true;
       break;

     case SYSTEM_EVENT_ETH_DISCONNECTED:
       Serial.println("ETH Disconnected");
       eth_connected = false;
       break;
     case SYSTEM_EVENT_ETH_STOP:
       Serial.println("ETH Stopped");
       eth_connected = false;
       break;
     default:
       break;
   }
}
void setup(void) {
  Serial.begin(115200);
  ETH.begin();
  WiFi.onEvent(WiFiEvent);

  /*return index page which is stored in serverIndex */
  server.on("/", HTTP_GET, []() {
    server.sendHeader("Connection", "close");
    server.send(200, "text/html", loginIndex);
  });
  server.on("/serverIndex", HTTP_GET, []() {
    server.sendHeader("Connection", "close");
    server.send(200, "text/html", serverIndex);
  });
  /*handling uploading firmware file */
  server.on("/update", HTTP_POST, []() {
    server.sendHeader("Connection", "close");
    server.send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK");
    ESP.restart();
  }, []() {
    HTTPUpload& upload = server.upload();
    if (upload.status == UPLOAD_FILE_START) {
      Serial.printf("Update: %s\n", upload.filename.c_str());
      if (!Update.begin(UPDATE_SIZE_UNKNOWN)) { //start with max available size
        Update.printError(Serial);
      }
    } else if (upload.status == UPLOAD_FILE_WRITE) {
      /* flashing firmware to ESP*/
      if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) {
        Update.printError(Serial);
      }
    } else if (upload.status == UPLOAD_FILE_END) {
      if (Update.end(true)) { //true to set the size to the current progress
        Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize);
      } else {
        Update.printError(Serial);
      }
    }
  });
  server.begin();
}

void loop(void) {
  server.handleClient();
delay(1);
}