truhensteuerung/Webserver.h
2022-07-13 20:49:33 +02:00

246 lines
8.7 KiB
C

// Load Wi-Fi library
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266HTTPUpdateServer.h>
#include <Preferences.h>
#include <Dictionary.h>
Preferences preferences;
ESP8266WebServer server(80);
ESP8266HTTPUpdateServer httpUpdater;
String header = "<!DOCTYPE html> <html>\n"
"<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n"
"<title>Truhensteuerung</title>\n"
"<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n"
"body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;} h3 {color: #444444;margin-bottom: 50px;}\n"
".col{ display: inline-block;}\n"
"input{width: 70px;}\n"
"</style>\n"
"</head>\n"
"<body>\n"
"<h1>Truhensteuerung Netz Servierer</h1>\n";
String ssid = "REPLACE_WITH_YOUR_SSID";
String password = "REPLACE_WITH_YOUR_PASSWORD";
unsigned long currentTime = millis();
unsigned long previousTime= 0;
//const long timeoutTime= 2000;
void WifiConnect(String _ssid, String _password){
// Connect to Wi-Fi network with SSID and password
Serial.print("Connecting to ");
Serial.println(_ssid);
WiFi.begin(_ssid, _password);
if(WiFi.waitForConnectResult() == WL_CONNECTED)
{
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
else
{
Serial.println("WiFi Connection failed! Restarting in SoftAP mode instead");
WiFi.mode(WIFI_AP);
WiFi.softAP("Truhensteuerung", "12345678");
Serial.print("AP IP address: ");
Serial.println(WiFi.softAPIP());
}
// Print local IP address and start web server
}
void handleWifiSetup(){
String ptr = header;
boolean reset = false;
// ptr += "URI: ";
// ptr += server.uri();
// ptr += "<br>\nMethod: ";
// ptr += (server.method() == HTTP_GET) ? "GET" : "POST";
// ptr += "<br>\nArguments: ";
// ptr += server.args();
// ptr += "<br>\n";
Dictionary<String, String> arguments = Dictionary<String, String>();
for (uint8_t i = 0; i < server.args(); i++) { arguments.set(server.argName(i), server.arg(i));}
if(server.method() == HTTP_GET){
int n = WiFi.scanNetworks(false, true);
String ssid;
uint8_t encryptionType;
int32_t RSSI;
uint8_t* BSSID;
int32_t channel;
bool isHidden;
ptr += "<a href=\"/\">Home</a>";
ptr += "<form action=\"/setup\" method=\"post\">";
ptr +="<div class=\"col\">";
ptr +="<table >\n<tr ><td>Name</td><td>Temp Min</td><td>Temp Max</td></tr>\n";
for (int i = 0; i < (sizeof(truhen) / sizeof(truhen[0])); i++) {
ptr +="<tr>\n<td>";
ptr +="<input name=\"t"+String(i)+"_name\" value=\"" + String(truhen[i].getName()) + "\">";
ptr +="</td>\n<td>";
ptr +="<input name=\"t"+String(i)+"_min\" value=\"" + String(truhen[i].getuT()) + "\">";
ptr +="</td>\n<td>";
ptr +="<input name=\"t"+String(i)+"_max\" value=\"" + String(truhen[i].getoT()) + "\">";
ptr += "</td>\n</tr>\n";
}
ptr += "</table>\n";
ptr += "<input type=\"submit\" id=\"submit\" name=\"submit_truhen\" >";
ptr +="";
ptr +="";
ptr +="";
ptr +="</div>";
ptr +="<div class=\"col\">";
ptr +="<table >\n<tr><td></td><td>ID</td><td>SSID</td><td>Channel</td><td>RSSI</td><td></td></tr>\n";
for (int i = 0; i < n; i++)
{
WiFi.getNetworkInfo(i, ssid, encryptionType, RSSI, BSSID, channel, isHidden);
ptr +="<tr><td><input type=\"radio\" id=\"ssid\" name=\"ssid\" value=\""+String(ssid.c_str())+"\"></td><td>"+String(i + 1)+"</td><td>"+String(ssid.c_str())+"</td><td>"+String(channel)+"</td><td>"+String(RSSI)+"dBm</td><td>"+String(encryptionType == ENC_TYPE_NONE ? "open" : "")+""+String(isHidden ? "hidden" : "")+"</td></tr>\n";
}
ptr += "</table>\n";
ptr += "<input type=\"input\" id=\"password\" name=\"password\" placeholder=\"Kennwort\" >";
ptr += "<input type=\"submit\" id=\"submit\" name=\"submit_wlan\" >";
ptr +="</div>"; ptr +="<div class=\"col\">";
ptr +="<table>\n\n";
ptr +="<tr>\n<td>ESP.getResetReason()</td>\n<td>";
ptr +=String(ESP.getResetReason());
ptr += "</td>\n</tr>\n";
ptr +="<tr>\n<td>ESP.getFreeHeap()</td>\n<td>";
ptr +=String(ESP.getFreeHeap());
ptr += "</td>\n</tr>\n";
ptr +="<tr>\n<td>ESP.getHeapFragmentation()</td>\n<td>";
ptr +=String(ESP.getHeapFragmentation());
ptr += "</td>\n</tr>\n";
ptr +="<tr>\n<td>ESP.getMaxFreeBlockSize()</td>\n<td>";
ptr +=String(ESP.getMaxFreeBlockSize());
ptr += "</td>\n</tr>\n";
ptr +="<tr>\n<td>ESP.getChipId()</td>\n<td>";
ptr +=String(ESP.getChipId());
ptr += "</td>\n</tr>\n";
ptr +="<tr>\n<td>ESP.getCpuFreqMHz()</td>\n<td>";
ptr +=String(ESP.getCpuFreqMHz());
ptr += "</td>\n</tr>\n";
ptr += "</table>\n";
ptr += "</div>\n";
ptr += "</form>";
}else{
ptr += "<p>\n";
if(arguments.get("submit_truhen") != NULL){
reset = true;
preferences.begin("my-app", false);
for (int i = 0; i < (sizeof(truhen) / sizeof(truhen[0])); i++) {
preferences.putString(String("t"+String(i)+"_name").c_str(), arguments.get("t"+String(i)+"_name"));
preferences.putInt(String("t"+String(i)+"_min").c_str(), arguments.get("t"+String(i)+"_min").toInt());
preferences.putInt(String("t"+String(i)+"_max").c_str(), arguments.get("t"+String(i)+"_max").toInt());
}
preferences.end();
}
if(arguments.get("submit_wlan") != NULL){
reset = true;
String ssid = arguments.get("ssid");
String password = arguments.get("password");
ptr += "Connecting to "+ssid+"<br>\n";
Serial.println("Connecting to "+ssid+", "+password+"");
WiFi.begin(ssid, password);
if(WiFi.waitForConnectResult() == WL_CONNECTED)
{
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
preferences.begin("my-app", false);
preferences.putString("ssid", ssid);
preferences.putString("password", password);
preferences.end();
ptr += "WiFi connected.<br>";
// ptr += "IP address: ";
// ptr += WiFi.localIP();
ptr += "<br>\n";
}
else
{
Serial.println("WiFi Connection failed! Restarting in SoftAP mode instead");
ptr += "WiFi Connection failed! Restarting in SoftAP mode instead<br>\n";
WiFi.mode(WIFI_AP);
WiFi.softAP("Truhensteuerung", "12345678");
Serial.print("AP IP address: ");
Serial.println(WiFi.softAPIP());
//ptr += "AP IP address: ";
//ptr += WiFi.softAPIP();
ptr += "<br>\n";
}
// Print local IP address and start web server
ptr += "</p>\n";
}
}
ptr +="</body>\n";
ptr +="</html>\n";
if(reset){
ptr +="<p>Neustart, bitte warten...</p>\n";
ptr +="<script>window.location.assign(\"/\")</script>\n";
}
server.send(200, "text/html", ptr);
if(reset){
delay(2000);
ESP.restart();
}
}
void handleRoot(){
String ptr = header;
ptr +="<div class=\"col\">";
ptr +="<table>\n<tr><td>Name</td><td>Temp</td><td>Status</td></tr>\n";
for (int i = 0; i < (sizeof(truhen) / sizeof(truhen[0])); i++) {
ptr +="<tr style=\"padding: 10px;font-size: 1.8em;\" >\n<td>";
ptr +=truhen[i].getName();
ptr +="</td>\n<td>";
ptr +=String(truhen[i].getCurTemp())+"&#8451;";
ptr +="</td>\n<td>";
if (truhen[i].getStat() == -1) {
ptr +="Nicht bekannt";
}
else if (truhen[i].getStat() == 1) {
ptr +="An";
}
else if (truhen[i].getStat() == 0) {
ptr +="Aus";
}
else if (truhen[i].getStat() == 2) {
ptr +="Error";
}
ptr += "</td>\n</tr>\n";
}
ptr += "</table>\n";
ptr += "</div>\n";
ptr += "<script>window.setTimeout( function() { window.location.reload();}, 10000);</script>\n";
ptr +="</body>\n";
ptr +="</html>\n";
server.send(200, "text/html", ptr);
}
void handleNotFound() {
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 WifiSetup() {
preferences.begin("my-app", true);
ssid = preferences.getString("ssid", ssid);
password = preferences.getString("password", password);
preferences.end();
WifiConnect(ssid, password);
httpUpdater.setup(&server);
server.on("/setup",handleWifiSetup);
server.on("/",handleRoot);
server.begin();
};