118 lines
4.0 KiB
Plaintext
118 lines
4.0 KiB
Plaintext
|
//
|
||
|
// FILE: WebServer.cpp
|
||
|
// PURPOSE: Web Server offering online configuration changes and editing
|
||
|
//
|
||
|
//
|
||
|
|
||
|
#include "WebServer.h"
|
||
|
#include <ESP8266WiFi.h>
|
||
|
#include <WiFiClient.h>
|
||
|
#include <ESP8266WebServer.h>
|
||
|
#include <ESP8266mDNS.h>
|
||
|
#include <FS.h>
|
||
|
#include <DjConfig.h>
|
||
|
#include <DjBattery.h>
|
||
|
|
||
|
#ifdef ESP8266
|
||
|
extern "C" {
|
||
|
#include "user_interface.h"
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
const char * const PROGMEM webConfig[] = {"showConfig:boolean:true", "xxx:int:4", "yyy:int:64"};
|
||
|
|
||
|
static Battery battery;
|
||
|
static size_t lastHeap = 0;
|
||
|
|
||
|
void WebServer::handleBattery() {
|
||
|
int value = battery.getPercentage();
|
||
|
String output = String(F("{\"battery\":")) + value + F("}");
|
||
|
server.send(200, contentType_textJson, output);
|
||
|
logHeap();
|
||
|
}
|
||
|
|
||
|
void WebServer::handleGetClockStatus() {
|
||
|
String output = String(F("{\"result\":\"ok\","));
|
||
|
output += "\"clockname\":\"" + clockServer.getName() + "\", \"time\":\"" + clockServer.getClockString() + "\"";
|
||
|
output += "}";
|
||
|
server.send(200, contentType_textJson, output);
|
||
|
logHeap();
|
||
|
}
|
||
|
|
||
|
void WebServer::handleClockActivate() {
|
||
|
clockServer.activateClock();
|
||
|
String output = String(F("{\"result\":\"ok\"}"));
|
||
|
server.send(200, contentType_textJson, output);
|
||
|
logHeap();
|
||
|
}
|
||
|
|
||
|
void WebServer::handleClockDeactivate() {
|
||
|
clockServer.deactivateClock();
|
||
|
String output = String(F("{\"result\":\"ok\"}"));
|
||
|
server.send(200, contentType_textJson, output);
|
||
|
logHeap();
|
||
|
}
|
||
|
|
||
|
void WebServer::handleClockStatus() {
|
||
|
String json = "{";
|
||
|
json += "\"heap\":" + String(ESP.getFreeHeap());
|
||
|
json += ",\"battery\":" + String(battery.getPercentage());
|
||
|
json += ",\"clockserver_name\":\"" + clockServer.getName() + "\"";
|
||
|
json += ",\"clockserver_clock\":\"" + clockServer.getClockString() + "\"";
|
||
|
json += ",\"clockserver_hours\":\"" + String(clockServer.getHours()) + "\"";
|
||
|
json += ",\"clockserver_minutes\":\"" + String(clockServer.getMinutes()) + "\"";
|
||
|
json += ",\"clockserver_seconds\":\"" + String(clockServer.getSeconds()) + "\"";
|
||
|
json += ",\"clockserver_speed\":\"" + String(clockServer.getSpeed(),1) + "\"";
|
||
|
json += ",\"clockserver_text\":\"" + clockServer.getText() + "\"";
|
||
|
json += ",\"clockserver_active\":\"" + (clockServer.isActive()? String("true"):String("false")) + "\"";
|
||
|
json += "}";
|
||
|
server.send(200, contentType_textJson, json);
|
||
|
json = String();
|
||
|
}
|
||
|
|
||
|
void WebServer::begin() {
|
||
|
GenericWebServer::begin();
|
||
|
config.begin("web.cfg", webConfig, sizeof(webConfig)/sizeof(webConfig[0]));
|
||
|
|
||
|
logHeap();
|
||
|
server.on("/all", HTTP_GET, [this](){
|
||
|
String json = "{";
|
||
|
json += "\"heap\":" + String(ESP.getFreeHeap());
|
||
|
json += ",\"battery\":" + String(battery.getPercentage());
|
||
|
json += ",\"clockserver_name\":\"" + clockServer.getName() + "\"";
|
||
|
json += ",\"clockserver_clock\":\"" + clockServer.getClockString() + "\"";
|
||
|
json += ",\"clockserver_hours\":\"" + String(clockServer.getHours()) + "\"";
|
||
|
json += ",\"clockserver_minutes\":\"" + String(clockServer.getMinutes()) + "\"";
|
||
|
json += ",\"clockserver_seconds\":\"" + String(clockServer.getSeconds()) + "\"";
|
||
|
json += ",\"clockserver_speed\":\"" + String(clockServer.getSpeed(),1) + "\"";
|
||
|
json += ",\"clockserver_text\":\"" + clockServer.getText() + "\"";
|
||
|
json += ",\"clockserver_active\":\"" + (clockServer.isActive()? String("true"):String("false")) + "\"";
|
||
|
json += "}";
|
||
|
debug.outln(json);
|
||
|
server.send(200, contentType_textJson, json);
|
||
|
json = String();
|
||
|
});
|
||
|
server.on("/clock/start", HTTP_GET, [this](){ handleClockActivate(); });
|
||
|
server.on("/clock/stop", HTTP_GET, [this](){ handleClockDeactivate(); });
|
||
|
server.on("/clock/status", HTTP_GET, [this](){ handleClockStatus(); });
|
||
|
server.on("/battery", HTTP_GET, [this](){ handleBattery();});
|
||
|
server.on("/inline", HTTP_GET, []() {
|
||
|
server.send(200, contentType_textPlain, F("this works as well"));
|
||
|
} );
|
||
|
server.begin();
|
||
|
debug.outln(F("HTTP server started"), DEBUG_MIN_INFO);
|
||
|
logHeap();
|
||
|
}
|
||
|
|
||
|
void WebServer::loop() {
|
||
|
GenericWebServer::loop();
|
||
|
if (lastHeap > 0)
|
||
|
{
|
||
|
debug.out(lastHeap); debug.outln(F("< heap on recent call"));
|
||
|
lastHeap = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|