#include #include #include #include #include #include #include "secrets.h" ESP8266WebServer server(80); bool still_pressed = false; bool relay_active = false; void setup() { WiFi.mode(WIFI_STA); pinMode(12, OUTPUT); // relay pinMode(13, OUTPUT); // button pinMode(0, INPUT); // led // setup serial and network Serial.begin(115200); WiFi.begin(ssid, password); Serial.println("Serial interface initialized"); Serial.print("Connecting to wifi "); Serial.print(ssid); // Wait for connection while (WiFi.status() != WL_CONNECTED) { digitalWrite(13, !digitalRead(13)); delay(500); Serial.print("."); } // serial output of connection details Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); // create HTTP server server.on("/", handleMainpage); server.on("/relay", handleRelay); server.begin(); Serial.println("HTTP server started"); } void loop() { if(!digitalRead(0)) { setRelay(!digitalRead(12)); delay(500); // give the user time to release the button if(!digitalRead(0)) { still_pressed = true; } else { still_pressed = false; } } if (still_pressed) { software_reset(); } server.handleClient(); } void software_reset() { wdt_enable(WDTO_15MS); while(1) {}; } void handleMainpage() { server.send(200, "text/html", "https://git.geekify.de/sqozz/switcheroo"); } void handleRelay() { String data = server.arg("plain"); String result; Serial.println("relay endpoint requested"); if (data != "") { Serial.println("change request"); StaticJsonBuffer<200> newBuffer; JsonObject& json = newBuffer.parseObject(data); if (json["active"] == "true") { Serial.println("on"); result = setRelay(true); } else if (json["active"] == "false") { Serial.println("off"); result = setRelay(false); } } else { Serial.println("status requested"); result = generateStatusJson(); } server.send(200, "text/json", result); Serial.println(""); Serial.println(""); } String setRelay(bool req_status) { Serial.print("Old status: "); Serial.println(relay_active); Serial.print("New status: "); Serial.println(req_status); digitalWrite(12, req_status); // set relay bool old_status = relay_active; relay_active = digitalRead(12); digitalWrite(13, !relay_active); // set LED to the physical relay status Serial.println(""); Serial.println(""); return generateChangeJson(old_status, req_status, relay_active); } String generateChangeJson(bool old_status, bool req_status, bool new_status) { String status = ""; bool success = (req_status == new_status); if (success) { status = ", \"status\" : { \"old\" : " + String(old_status) + ", \"new\" : " + String(new_status) + ", \"req\": " + String(req_status) + " }"; } String retJson = "{ \"success\" : " + String(success) + status + " }"; return retJson; } String generateStatusJson() { String status = "{ \"status\" : " + String(relay_active) + " }"; return status; }