Oder doch wird aber langes code hier... 
String Otalink = "http://server.xx/Checkfw.php";
String OTA_ENDPOINT = "http:///server.xx/otaupdate/";
///////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////UPDATE OVER HTTP//////////////////////////////////////////////
void processOta(){
String substring1 = ".ino";
String substring2 = ".bin";
String ThisVersion = __FILE__;
ThisVersion = (ThisVersion.substring((ThisVersion.indexOf(""))));
ThisVersion.replace(substring1, substring2);
HTTPClient http;
getData = "?status=" + ThisVersion;
Link = Otalink + getData;
http.begin(Link);
int httpCode = http.GET();
payload2 = http.getString();
//http.end();
if(payload2 !="" ){ //Wird später erweitert wegen Version check etc...
// Add optional callback notifiers
ESPhttpUpdate.onStart(update_started);
ESPhttpUpdate.onEnd(update_finished);
ESPhttpUpdate.onProgress(update_progress);
ESPhttpUpdate.onError(update_error);
OTA_ENDPOINT += payload2;
ESPhttpUpdate.setLedPin(LED_BUILTIN, LOW);
t_httpUpdate_return ret = ESPhttpUpdate.update(OTA_ENDPOINT);
switch (ret) {
case HTTP_UPDATE_FAILED:
Serial.printf("HTTP_UPDATE_FAILD Error (%d): %s\n", ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str());
webserver.send(200, "text/html", (String)HTMLANFANG + cout + HomeButton + UpdateErrorTitle);
break;
case HTTP_UPDATE_NO_UPDATES:
Serial.println("HTTP_UPDATE_NO_UPDATES");
webserver.send(200, "text/html", (String)HTMLANFANG + cout + HomeButton + UpdateNotConfimedTitle);
break;
case HTTP_UPDATE_OK:
Serial.println("HTTP_UPDATE_OK");
break;
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////Funktion Update Läuft /////////////////////////////////////////////////////////////
void update_progress(int cur, int total) {
//Serial.printf("CALLBACK: HTTP update process at %d of %d bytes...\n", cur, total);
if(cur >0 and total >0 ){
IpToString();
int Vorschritt = total / cur;
webserver.send(200, "text/html", (String)HTMLANFANG + cout + Progerrbar1 + UpdateStatuscount + Vorschritt + UpdateStatuscount2 + bufferip + RefreschtoHome1 );
}
}
** char bufferip[100];
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////Funktion Ip In String ////////////////////////////////////////////////////////////
void IpToString(){
sprintf(bufferip, "%s", WiFi.localIP().toString().c_str());
}
Dafür habe ich eine Buttons.h und lade von dort meine Buttons und Progress bar Ink Script...
PLATZHALTER ist eine Anmerkung das im Haupt Datei dort ein wert Geladen wird.
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////Update Progressabr////////////////////////////////////////////
const char Progerrbar1[] = "<h1>Updating Pls Wait..</h1></p><div id=\"myProgress\"><div id=\"myBar\"></div></div>";
String UpdateStatuscount = "<script>var i = 0; if (i == 0) { i = 1; var elem = document.getElementById(\"myBar\");var width = 1; var id = setInterval(frame,";
//int Vorschritt = total / cur;******* PLATZHALTER
String UpdateStatuscount2 = "); function frame() {if (width >= 100) {clearInterval(id); i = 0; } else {width++; elem.style.width = width + \"%\";if(width >= 99){setTimeout(function(){ window.location.href = 'http://";
//char bufferip[100]; ******* PLATZHALTER
//sprintf(bufferip, "%s", WiFi.localIP().toString().c_str()); ******* PLATZHALTER
String RefreschtoHome1 = "/';}, 5000);}}}} </script>";
Danke für den cookie 
Natürlich ist das meiste bei mir erst einmal nur Test.
Progress bar wird jedoch zeit gleich zum Upload Beendet, und beim Reladen ist die Server Wieder Online, passt soweit alles.
Lg