webserver.ino 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /*
  2. Webserver.ino
  3. This script handle web serving and RESTFUL API features
  4. */
  5. void registerServeEndpoints() {
  6. server.serveStatic("/", LittleFS, "/index.html");
  7. /* Button Actions */
  8. server.on("/power/press", handlePowerBtnPress);
  9. server.on("/power/release", handlePowerBtnRelease);
  10. server.on("/reset/press", handleResetBtnPress);
  11. server.on("/reset/release", handleResetBtnRelease);
  12. server.on("/status", handleStatus);
  13. /* RESTFUL API */
  14. server.on("/api/status", handleStatus);
  15. server.on("/api/power", handlePowerSequence);
  16. server.on("/api/reset", handleResetSequence);
  17. server.onNotFound(handleNotFound);
  18. }
  19. void sendOK(){
  20. server.send(200, "application/json", "\"ok\"");
  21. }
  22. /* Emulate the power button press events in hardware */
  23. void handlePowerBtnPress() {
  24. digitalWrite(PWR_BTN, HIGH);
  25. digitalWrite(BTN_LED, LOW);
  26. Serial.println("[INFO] Power button pressed");
  27. sendOK();
  28. }
  29. void handlePowerBtnRelease() {
  30. digitalWrite(PWR_BTN, LOW);
  31. digitalWrite(BTN_LED, HIGH);
  32. Serial.println("[INFO] Power button released");
  33. sendOK();
  34. }
  35. /* Emulate the reset button press events in hardware */
  36. void handleResetBtnPress() {
  37. digitalWrite(RST_BTN, HIGH);
  38. digitalWrite(BTN_LED, LOW);
  39. Serial.println("[INFO] Reset button pressed");
  40. sendOK();
  41. }
  42. void handleResetBtnRelease() {
  43. digitalWrite(RST_BTN, LOW);
  44. digitalWrite(BTN_LED, HIGH);
  45. Serial.println("[INFO] Reset button released");
  46. sendOK();
  47. }
  48. //Serving the LED status
  49. void handleStatus(){
  50. //Create a JSON object, 64 should be more than enough bytes to work with
  51. StaticJsonDocument<64> jsonDoc;
  52. jsonDoc["hdd"] = hddLedState;
  53. jsonDoc["pwr"] = pwrLedState;
  54. String jsonString;
  55. serializeJson(jsonDoc, jsonString);
  56. server.send(200, "application/json", jsonString);
  57. }
  58. //Handle power up sequence
  59. void handlePowerSequence() {
  60. if (server.method() == HTTP_POST) {
  61. Serial.println("[INFO] Toggling power button via RESTFUL API");
  62. pressPowerButton();
  63. sendOK();
  64. } else {
  65. server.send(405, "text/plain", "Method Not Allowed");
  66. }
  67. }
  68. //Handle reset sequence
  69. void handleResetSequence() {
  70. if (server.method() == HTTP_POST) {
  71. Serial.println("[INFO] Toggling reset button via RESTFUL API");
  72. pressResetButton();
  73. sendOK();
  74. } else {
  75. server.send(405, "text/plain", "Method Not Allowed");
  76. }
  77. }
  78. // Default not found handler
  79. void handleNotFound() {
  80. String message = "404 - Not Found\n\n";
  81. message += "URI: ";
  82. message += server.uri();
  83. message += "\nMethod: ";
  84. message += (server.method() == HTTP_GET) ? "GET" : "POST";
  85. message += "\nArguments: ";
  86. message += server.args();
  87. message += "\n";
  88. for (uint8_t i = 0; i < server.args(); i++) {
  89. message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  90. }
  91. server.send(404, "text/plain", message);
  92. }