1 contributor
#ifndef _MY_HTTP_H
#define _MY_HTTP_H
#include <WebServer.h>
#include "my_constants.h"
#include "my_ble.h"
#ifdef USE_OTA
#include "my_ota.h"
#include <Update.h>
#endif //USE_OTA
#define PORT 80
WebServer server(PORT);
String message="";
void handleRoot() {
server.sendHeader("Connection", "close");
byte mac[6];
char macStr[6];
WiFi.macAddress(mac);
sprintf(macStr,"%02x%02x%02x", mac[3], mac[4], mac[5]);
String macStrString=macStr;
message = "";
message += "<!DOCTYPE HTML><html>";
message += "<head>";
message += " <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">";
message += " <link rel=\"stylesheet\" href=\"https://use.fontawesome.com/releases/v5.7.2/css/all.css\" integrity=\"sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr\" crossorigin=\"anonymous\">";
message += " <title>esp8266-"+macStrString+"</title>";
message += "<style>";
message += "html{font-family:Arial;display:inline-block;margin:0px auto;text-align:center;}";
message += "h2{font-size:2.0rem;}";
message += "p{font-size:3.0rem;}";
message += "ul,li {list-style-type: none; margin: 0; padding: 0;text-align: left;}";
message += ".results {width: 80%;word-wrap: break-word;font-family: monospace;text-align: left;}";
message += ".app {font-size:0.8rem;font-style: italic; padding-top: 20px; padding-bottom: 20px;}";
message += ".dht-labels{font-size:1.5rem;vertical-align:middle;padding-bottom:15px;}";
message += "</style>";
message += "</head>";
message += "<body>";
message += "<h2>esp8266-"+macStrString+"</h2>";
message += "<p><i class=\"fas fa-clock\" style=\"color:#00add6;\"></i><span class=\"dht-labels\">Date</span> <span id=\"temperature\">"+String(acTimeStringTZ)+"</span></p>";
message += "<div class=\"results\">\n";
message += ss.str().c_str();
message += "</div>\n";
message += "<div class=\"app\">"+String(compile_date)+"</div>";
message += "<ul class=\"links\">";
message += "<li><a href=\"/status\">/status</li>";
message += "<li><a href=\"/ota\">/ota</li>";
message += "<li><a href=\"/json\">/json</li>";
message += "</ul>";
message += "</body></html>";
server.send(200, "text/html", message );
}
void handleJSON() {
server.sendHeader("Connection", "close");
byte mac[6];
char macStr[6];
WiFi.macAddress(mac);
sprintf(macStr,"%02x%02x%02x\0", mac[3], mac[4], mac[5]);
String macStrString=macStr;
String statusMsg = "{";
statusMsg += "\"ota_name\": \"esp8266-"+macStrString+"\",";
statusMsg += "\"uptime\": "+String(millis())+",";
statusMsg += "\"countMeasures\": "+String(countMeasures)+",";
statusMsg += "\"last_update\": \""+String(acTimeStringTZ)+"\",";
statusMsg += "\"epoch\":" +String(acTimeEpoch)+",";
statusMsg += "\"ble\": "+String(listBLEElts.str().c_str());
statusMsg += "}";
server.send(200, "text/html", String(statusMsg) );
}
void handleSTATUS() {
server.sendHeader("Connection", "close");
byte mac[6];
char macStr[6];
bzero(macStr,6);
WiFi.macAddress(mac);
sprintf(macStr,"%02x%02x%02x", mac[3], mac[4], mac[5]);
String macStrString=macStr;
String statusMsg = "{";
statusMsg += "\"app_name\": \""+String(APPNAME)+"\",";
statusMsg += "\"app_version\": \""+String(APPVER)+"\",";
statusMsg += "\"build_date\": \""+String(compile_time)+"\",";
statusMsg += "\"mac\": \""+WiFi.macAddress()+"\",";
statusMsg += "\"ip\": \""+WiFiIP+"\",";
statusMsg += "\"ota_name\": \"esp8266-"+macStrString+"\",";
statusMsg += "\"uptime\": "+String(millis())+",";
statusMsg += "\"countMeasures\": "+String(countMeasures)+",";
statusMsg += "\"period\": "+String(UPDATE_PERIOD)+",";
statusMsg += "\"loop_delay\": "+String(LOOP_DELAY)+",";
statusMsg += "\"last_update\": \""+String(acTimeStringTZ)+"\",";
statusMsg += "\"epoch\":" +String(acTimeEpoch);
statusMsg += "}";
server.send(200, "text/html", String(statusMsg) );
}
void handleOTA() {
server.sendHeader("Connection", "close");
message = "";
//message += "<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script>";
if( 0 == strcmp(aplist[currentAPIndex].ssid,"kawifi") ) {
message += "<script src='http://"+String(mqtt_server_int)+"/jquery.min.js'></script>\n";
} else {
message += "<script src='http://"+String(mqtt_server_ext)+"/jquery.min.js'></script>\n";
}
message += "<form method='POST' action='#' enctype='multipart/form-data' id='upload_form'>\n";
message += "Firmware:<br>\n";
message += "<input type='file' name='update'><input type='submit' value='Update Firmware'>\n";
message += "</form>\n";
message += "<div id='prg'>progress: 0%</div>\n";
message += otaScript;
server.send(200, "text/html", String(message) );
}
void handleNotFound() {
server.sendHeader("Connection", "close");
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i = 0; i < server.args(); i++) {
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
}
void http_set() {
server.on("/", handleRoot);
server.on("/status", handleSTATUS);
server.on("/json", handleJSON);
server.onNotFound(handleNotFound);
server.begin();
#ifdef USE_OTA
server.on("/ota", HTTP_GET, handleOTA);
server.on("/update", HTTP_POST, []() {
server.sendHeader("Connection", "close");
server.send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK");
ESP.restart();
}, []() {
HTTPUpload& upload = server.upload();
upgradeInProgress=1;
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) {
if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) {
Update.printError(Serial);
} else {
uint8_t percent_new=(100*((float)(Update.progress())/(float)(Update.size())));
if( percent_old != percent_new ) {
Serial.printf("Update: %d%%\n", percent_new);
percent_old=percent_new;
}
}
} 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);
}
}
});
#endif //USE_OTA
}
#endif //_MY_HTTP_H