Newer
Older
#endif
#ifndef ICBM_GIT_TIMESTAMP
#define ICBM_GIT_TIMESTAMP "UNKNOWN"
#endif
WebServer restServer(80);
void initializeRoutes() {
restServer.on("/idn", identify);
restServer.on("/poll", pollMPODChannel);
restServer.on("/power", powerGroup);
restServer.begin();
Serial.println("REST Server Started");
}
void identify() {
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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 += "\",\n";
message += "\"inputs\":{\n";
message += "\"sib\":";
message += PINS.sib;
message += ",\n";
message += "\"plc\":";
message += PINS.plc;
message += ",\n";
message += "\"ups\":";
message += PINS.ups;
message += ",\n";
unsigned long elapsed_seconds = (millis() - PINS.last_triggered) / 1000;
message += "\"sec_since_interrupt\":";
message += elapsed_seconds;
message += "\n}";
// TODO: Add here power sequence status
// is_ramping_down
// current step
// percentage
restServer.send(200, "text/json", message);
}
unsigned long elapsed_seconds = (millis() - PINS.last_triggered) / 1000;
String content = buildPanel(PINS.sib, PINS.plc, PINS.ups, elapsed_seconds);
restServer.send(200, "text/html", content);
}
String message = "{\n";
message += "\"uri\":\"";
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
}
restServer.send(404, "text/json", message);
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;
}
} else if (restServer.argName(i) == "ch") {
channel = restServer.arg(i).toInt();
}
if (output != NONE && channel != 0) {
setChannelAndWait(&ipAddr, channel, output);
success = true; // validates input parameters, not MPOD status, reported separately
String http_msg = "{\n";
http_msg += "\"target\":\"" + ipAddr.toString() + "\",\n";
http_msg += "\"arguments\":{";
http_msg += "\"channel\":" + String(channel) + ",";
http_msg += "\"output\":" + String(output) + "},\n";
if (success) {
http_msg += ",\n";
http_msg += mpod.toJSON();
}
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
restServer.send(200, "text/json", http_msg);
}
void powerGroup() {
String output;
String group;
String ret;
bool success = false;
for (uint8_t i = 0; i < restServer.args(); i++) {
if (restServer.argName(i) == "output") {
if (restServer.arg(i) == "on" || restServer.arg(i) == "off") {
output = restServer.arg(i);
}
} else if (restServer.argName(i) == "group") {
group = restServer.arg(i);
}
}
if (output && group) {
if (output == "on") {
success = pproc.powerOn(group);
} else if (output == "off") {
success = pproc.powerOff(group);
}
}
String http_msg = "{\n";
http_msg += "\"target\":\"" + pproc.ipAddr.toString() + "\",\n";
http_msg += "\"arguments\":{";
http_msg += "\"group\":\"" + group + "\",";
http_msg += "\"output\":\"" + output + "\"},\n";
http_msg += "\"success\":" + String(success) + ",\n";
if (success) {
http_msg += "\"status\":\n";
http_msg += pproc.toJSON();
}
http_msg += "\n}";
for (uint8_t i = 0; i < restServer.args(); i++) {
if (restServer.argName(i) == "ch") {
channel = restServer.arg(i).toInt();
}
}
String ret;
ret = "\"reason\": \"Invalid channel\"";
} else {
SNMP::Message *snmp_msg = mpod.read(channel);
snmp.send(snmp_msg, ipAddr, SNMP::Port::SNMP);
delete snmp_msg;
delay(MPOD_UPDATE_LATENCY);
snmp.loop(); // Force loop to update now
ret = mpod.toJSON();
String http_msg = "{\n";
http_msg += ret;
http_msg += ",\"success\": ";
http_msg +=
",\"channel\": "; // TODO: test with invalid channel (request w/o "ch" arg). JSON invalid.