#include "portal.h" //#define DEBUG #define NONE -1 #define BLINK -2 #define FADEIN -3 #define FADEOUT -4 const IPAddress apIP(192, 168, 1, 1); const char* apSSID; boolean isAPactive; String scanSSIDList; int apiOverrides[4] = {NONE, NONE, NONE, NONE}; boolean requestLedUpdate = false; DNSServer dnsServer; ESP8266WebServer webServer(80); #define ICONPATH "http://openweathermap.org/img/w/" String weatherIcon = ""; void portalSetup(String ssid) { apSSID = ssid.c_str(); WiFi.hostname(ssid); // connect to configured network or fallback to setup AP if (!enterClientMode(NULL, NULL)) { enterAPMode(); // let the user enter the credentials } startWebServer(); } void portalLoop() { if (isAPactive) { dnsServer.processNextRequest(); } webServer.handleClient(); } boolean isConnected() { return !isAPactive; } void startWebServer() { #ifdef DEBUG Serial.print(F("Starting Web Server at ")); Serial.print(WiFi.softAPIP()); Serial.print(" "); Serial.println(WiFi.localIP()); #endif webServer.on("/settings", []() { String s = "
Bitte wähle deinen Accesspoint und gib das Passwort ein.
"; s += ""; webServer.send(200, "text/html", makePage("WLAN-Einstellungen", s)); }); webServer.on("/setap", []() { String ssid = urlDecode(webServer.arg("ssid")); #ifdef DEBUG Serial.print(F("Connecting to: ")); Serial.println(ssid); #endif String pass = urlDecode(webServer.arg("pass")); String s = "Das Gerät wird zu \""; s += ssid; s += "\" verbunden."; webServer.send(200, "text/html", makePage("WLAN-Einstellungen", s)); if (!enterClientMode(ssid.c_str(), pass.c_str())) { enterAPMode(); // wrong passphrase } }); webServer.on("/reset", []() { String s = "
Zum Einstellen bitte mit dem Accesspoint \"Snowman\" verbinden.
"; webServer.send(200, "text/html", makePage("Zurücksetzen", s)); enterAPMode(); }); webServer.on("/api", []() { String response = ""; for (int n = 0; n < webServer.args(); n++) { String sArgName = webServer.argName(n); if (sArgName.startsWith("led")) { String sPinNumber = sArgName.substring(3); if (sPinNumber == "") { String msg = "API: Invalid argument '" + sArgName + "' - pin number invalid\n"; response += msg; #ifdef DEBUG Serial.print(msg); #endif continue; } int pinNumber = sPinNumber.toInt(); if (pinNumber < 0 || pinNumber > 3) { String msg = "API: Invalid argument '" + sArgName + "' - pin number out of range\n"; response += msg; #ifdef DEBUG Serial.print(msg); #endif continue; } String sArg = webServer.arg(n); int val = -1; if (sArg == "fade" || sArg == "fadein") { val = FADEIN; } else if (sArg == "fadeout") { val = FADEOUT; } else if (sArg == "blink") { val = BLINK; } else if (sArg == "clear") { val = NONE; } else { val = sArg.toInt(); } if ((val != FADEIN && val != FADEOUT && val != BLINK && val != NONE && val < 0) || val > PWMRANGE) { String msg = "API: Value out of range for argument '" + sArgName + "': '" + String(val) + "'\n"; response += msg; #ifdef DEBUG Serial.print(msg); #endif continue; } String msg = "API: Overriding pin " + String(pinNumber) + " to " + String(val) + "\n"; response += msg; #ifdef DEBUG Serial.print(msg); #endif apiOverrides[pinNumber] = val; requestLedUpdate = true; } if (webServer.argName(n) == "clear") { if (webServer.arg(n) == "true") { for (int j = 0; j < 4; j++) { apiOverrides[j] = NONE; } } String msg = "API: Cleared pin overrides\n"; response += msg; #ifdef DEBUG Serial.print(msg); #endif requestLedUpdate = true; } } webServer.send(200, "text/html", makePage("API", "" + response + "")); }); webServer.on("/", []() { String s = "