Add proper json api
This commit is contained in:
parent
0cc2aaf4fe
commit
e65242500f
115
switcheroo.ino
115
switcheroo.ino
|
@ -1,40 +1,57 @@
|
|||
#include <ESP8266WiFi.h>
|
||||
#include <WiFiClient.h>
|
||||
#include <ESP8266WebServer.h>
|
||||
#include <RCSwitch.h>
|
||||
#include <WiFiUdp.h>
|
||||
#include <ArduinoJson.h>
|
||||
#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
|
||||
Serial.begin(9600);
|
||||
Serial.println();
|
||||
Serial.println();
|
||||
Serial.print("Connecting to ");
|
||||
Serial.println(ssid);
|
||||
|
||||
WiFi.mode(WIFI_STA);
|
||||
// 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.println("WiFi connected");
|
||||
Serial.println("IP address: ");
|
||||
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");
|
||||
}
|
||||
|
||||
bool still_pressed = false;
|
||||
void loop() {
|
||||
if(!digitalRead(0)) {
|
||||
uint8_t relay_status = digitalRead(12);
|
||||
Serial.print("Old status: ");
|
||||
Serial.println(relay_status);
|
||||
digitalWrite(13, !relay_status); // set LED
|
||||
digitalWrite(12, !relay_status); // set relay
|
||||
delay(200);
|
||||
setRelay(!digitalRead(12));
|
||||
delay(500); // give the user time to release the button
|
||||
|
||||
if(!digitalRead(0)) {
|
||||
still_pressed = true;
|
||||
} else {
|
||||
|
@ -46,10 +63,76 @@ void loop() {
|
|||
software_reset();
|
||||
}
|
||||
|
||||
delay(10);
|
||||
server.handleClient();
|
||||
}
|
||||
|
||||
void software_reset() {
|
||||
wdt_enable(WDTO_15MS);
|
||||
while(1) {};
|
||||
}
|
||||
|
||||
void handleMainpage() {
|
||||
server.send(200, "text/html", "<html><a href=\"https://git.geekify.de/sqozz/switcheroo\">https://git.geekify.de/sqozz/switcheroo</a></html>");
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue