Moin,
ich möchte auf meinen ESPs OTA per WEB-Interface machen.
Da kann man dann komfortabel per Webinterface eine neue .bin Datei hochladen und schon ist der ESP aktualisiert, ohne dass man mit dem Kabel dran muss.
Tolle Sache!
...Aber das kann ja dann jeder?!
Daher die Frage wie man das mit einem Passwort oder sonst wie schützen kann, so dass nur ich das darf.
Ich möchte nicht Arduino OTA (mit Python) und auch nicht HTTP-Server OTA, sondern eben WEB-Interface OTA (ESP8266HTTPUpdateServer/WebUpdater)
Liebe Grüße,
Chris
Jetzt habe ich noch ein weiteres Problem mit dem OTA.
Ich habe das OTA getestet, funktioniert wunderbar.
Dann habe ich es in mein original Sketch eingebaut.
Und nun verursacht es Probleme, die ich noch nicht einschätzen kann.
Das Problem will ich jetzt erst mal einkreisen.
Hier ist das Original Beispiel von der Library ESP8266HTTPUpdateServer/WebUpdater
/*
To upload through terminal you can use: curl -F "image=@firmware.bin" esp8266-webupdate.local/update
*/
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <ESP8266HTTPUpdateServer.h>
const char* host = "esp8266-webupdate";
const char* ssid = "........";
const char* password = "........";
ESP8266WebServer httpServer(80);
ESP8266HTTPUpdateServer httpUpdater;
void setup(void){
Serial.begin(115200);
Serial.println();
Serial.println("Booting Sketch...");
WiFi.mode(WIFI_AP_STA);
WiFi.begin(ssid, password);
while(WiFi.waitForConnectResult() != WL_CONNECTED){
WiFi.begin(ssid, password);
Serial.println("WiFi failed, retrying.");
}
MDNS.begin(host);
httpUpdater.setup(&httpServer);
httpServer.begin();
MDNS.addService("http", "tcp", 80);
Serial.printf("HTTPUpdateServer ready! Open http://%s.local/update in your browser\n", host);
}
void loop(void){
httpServer.handleClient();
delay(1);
}
Bisher haben alle meine Sketche:
void setup() { }
void loop() { }
Dieses Sketch benutzt aber:
void setup(void){ }
void loop(void){ }
-
Frage: Warum steht da nochmal void in den Klammern? Wofür ist das, was tut es?
-
Frage: Wie oft, wie schnell muss httpServer.handleClient(); mindestens aufgerufen werden damit das ganze gut läuft? Ich möchte es so selten wie möglich aufrufen. Das ist ja die einzige Änderung in meiner Loop (neben den (void) in den Klammern).
Dafür habe ich mir folgendes in mein Loop gebaut:
const int httpInterval = 1000;
unsigned long lastCallhttp;
if ( millis() - lastCallhttp > httpInterval ) {
lastCallhttp += httpInterval;
httpServer.handleClient();
}
Lieben Gruß,
Chris
Nein, Klickbar ist Das jetzt nicht - wird eh nicht so der große Ansturm auf die URL geben.
MfG
PS: Wikipedia weiß Da auch was drüber
- scheint ein externes WLAN Problem gewesen zu sein. Der Empfang war sehr schlecht. Es läuft inzwischen wieder
du könntest die Seite mit einem vorgefertigtem Base64 Passwort-Vergleich "schützen".
Damit konnte ich jetzt noch nicht so viel anfangen.
Hat schon mal jemand ein passwortgeschütztes Webinterface für OTA (oder auch was anderes) gemacht und dafür vielleicht ein Beispiel oder einen guten Tipp?
Lieben Gruß,
Chris
Hi
Wenn ich Das recht verstehe, generierst Du einfach nur 'einen Sack voll Zufallszahlen'.
Wenn diese Zahlen zufällig von einer Verschlüsselungs-Routine kommen, braucht man sich nur einen Satz oder was in der Art merken und bekommt ebenfalls 'den Sack voll'.
Diese Zufallszahlen übergibst Du auch beim Einwählen - oder eben nicht, dann aber kein OTA.
MfG
themanfrommoon:
Hat was mit Kompatibilität zwischen verschiedenen C Versionen zu tun oder so
Teilweise. Der Hauptgrund wieso du das siehst ist dass manche Leute nicht zwischen C und C++ unterscheiden können. Manche schreiben es vielleicht auch hin um extra deutlich zu sein.
In C bedeutet eine leere Parameter Liste (in Deklarationen, nicht Definitionen!), dass die Funktionen eine beliebige Anzahl an Parameter haben könnte. Der Compiler findet dann selbst heraus was er machen muss. Für keine Parameter muss man explizit void angeben.
Das das jemals so gemacht wurde hatte einmal technische Gründe, aber seit dem hat man dazu gelernt. In moderneren C Versionen sind leere Listen obsolet und es wird void empfohlen
In C++ bedeutet eine leere Liste dass es keine Parameter gibt. Void als Parameter existiert aus Kompatiblitätsgründen