webserver.ino 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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. server.on("/ipaddr", handleGetIPAddr);
  14. /* RESTFUL API */
  15. server.on("/api/status", handleStatus);
  16. server.on("/api/power", handlePowerSequence);
  17. server.on("/api/reset", handleResetSequence);
  18. server.onNotFound(handleNotFound);
  19. }
  20. void sendOK(){
  21. server.send(200, "application/json", "\"ok\"");
  22. }
  23. /* Emulate the power button press events in hardware */
  24. void handlePowerBtnPress() {
  25. digitalWrite(PWR_BTN, HIGH);
  26. digitalWrite(BTN_LED, LOW);
  27. Serial.println("[INFO] Power button pressed");
  28. sendOK();
  29. }
  30. void handlePowerBtnRelease() {
  31. digitalWrite(PWR_BTN, LOW);
  32. digitalWrite(BTN_LED, HIGH);
  33. Serial.println("[INFO] Power button released");
  34. sendOK();
  35. }
  36. /* Emulate the reset button press events in hardware */
  37. void handleResetBtnPress() {
  38. digitalWrite(RST_BTN, HIGH);
  39. digitalWrite(BTN_LED, LOW);
  40. Serial.println("[INFO] Reset button pressed");
  41. sendOK();
  42. }
  43. void handleResetBtnRelease() {
  44. digitalWrite(RST_BTN, LOW);
  45. digitalWrite(BTN_LED, HIGH);
  46. Serial.println("[INFO] Reset button released");
  47. sendOK();
  48. }
  49. //Serving the LED status
  50. void handleStatus(){
  51. //Create a JSON object, 64 should be more than enough bytes to work with
  52. StaticJsonDocument<64> jsonDoc;
  53. jsonDoc["hdd"] = hddLedState;
  54. jsonDoc["pwr"] = pwrLedState;
  55. String jsonString;
  56. serializeJson(jsonDoc, jsonString);
  57. server.send(200, "application/json", jsonString);
  58. }
  59. //Return the ip address and mDNS name of the device
  60. void handleGetIPAddr(){
  61. String ipAddrStr = WiFi.localIP().toString();
  62. StaticJsonDocument<128> jsonDoc;
  63. jsonDoc["ipaddr"] = ipAddrStr;
  64. jsonDoc["mdns"] = MDNS_NAME + ".local";
  65. String jsonString;
  66. serializeJson(jsonDoc, jsonString);
  67. server.send(200, "application/json", jsonString);
  68. }
  69. //Handle power up sequence
  70. void handlePowerSequence() {
  71. if (server.method() == HTTP_POST) {
  72. Serial.println("[INFO] Toggling power button via RESTFUL API");
  73. pressPowerButton();
  74. sendOK();
  75. } else {
  76. server.send(405, "text/plain", "Method Not Allowed");
  77. }
  78. }
  79. //Handle reset sequence
  80. void handleResetSequence() {
  81. if (server.method() == HTTP_POST) {
  82. Serial.println("[INFO] Toggling reset button via RESTFUL API");
  83. pressResetButton();
  84. sendOK();
  85. } else {
  86. server.send(405, "text/plain", "Method Not Allowed");
  87. }
  88. }
  89. // Default not found handler
  90. void handleNotFound() {
  91. String message = "404 - Not Found\n\n";
  92. message += "URI: ";
  93. message += server.uri();
  94. message += "\nMethod: ";
  95. message += (server.method() == HTTP_GET) ? "GET" : "POST";
  96. message += "\nArguments: ";
  97. message += server.args();
  98. message += "\n";
  99. for (uint8_t i = 0; i < server.args(); i++) {
  100. message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  101. }
  102. server.send(404, "text/plain", message);
  103. }