BLEBeaconScan / my_http.h /
352ff3a 5 years ago
1 contributor
174 lines | 6.872kb
#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