#include "rest.hpp" #include "mpod.hpp" #include <ETH.h> #ifndef ICBM_GIT_VERSION #define ICBM_GIT_VERSION "DEVEL" #endif #ifndef ICBM_GIT_TIMESTAMP #define ICBM_GIT_TIMESTAMP "UNKNOWN" #endif WebServer restServer(80); void initializeRoutes() { restServer.on("/idn", identify); restServer.on("/restart", restart); restServer.onNotFound(notFound); restServer.on("/send", sendSNMP); restServer.on("/poll", pollMPODChannel); restServer.begin(); Serial.println("REST Server Started"); } void identify() { int seconds = millis() / 1000; int hours = seconds / 3600; int minutes = (seconds / 60) % 60; seconds = seconds % 60; String message = "{\n"; message += "\"mac\":\""; message += ETH.macAddress(); message += "\",\n"; message += "\"version\":\""; message += ICBM_GIT_VERSION; message += "\",\n"; message += "\"build date\":\""; message += ICBM_GIT_TIMESTAMP; message += "\",\n"; message += "\"uptime\": \""; message += hours; message += ":"; message += minutes; message += ":"; message += seconds; message += "\""; message += "\n}"; restServer.send(200, "text/json", message); } void notFound() { String message = "{\n"; message += "\"uri\":\""; message += restServer.uri(); message += "\",\n\"method\":\""; message += (restServer.method() == HTTP_GET) ? "GET" : "POST"; message += "\",\n\"arguments\":{"; for (uint8_t i = 0; i < restServer.args(); i++) { message += "\n\"" + restServer.argName(i) + "\":\"" + restServer.arg(i) + "\","; } if (restServer.args() != 0) { message.remove(message.length()-1); // remove trailing comma for valid json } message += "\n}\n}"; restServer.send(404, "text/json", message); Serial.println(message); } void restart() { restServer.send(200); ESP.restart(); } enum { OFF, ON, NONE, }; void sendSNMP() { uint8_t output = NONE; bool success = false; for (uint8_t i = 0; i < restServer.args(); i++) { if(restServer.argName(i) == "output") { if(restServer.arg(i) == "on") { output = ON; } else if (restServer.arg(i) == "off") { output = OFF; } } } auto ipAddr = IPAddress(192,168,140,79); SNMP::Message *snmp_msg = mpod.output(output); snmp.send(snmp_msg, ipAddr, SNMP::PORT::SNMP); delete snmp_msg; success = true; } String http_msg = "{\n"; http_msg += "\"target\":\"" + ipAddr.toString() + "\","; http_msg += "\"arguments\":{\"output\":" + String(output) + "},\n"; http_msg += "\"success\":" + String(success); http_msg += "\n}"; restServer.send(200, "text/json", http_msg); } void pollMPODChannel() { auto ret = mpod.toJSON(); String http_msg = "{\n"; http_msg += ret; http_msg += ",\"success\": 1"; http_msg += "\n}"; restServer.send(200, "text/json", http_msg); }