webserver.cpp 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. #include <user_config.h>
  2. #include <SmingCore/SmingCore.h>
  3. #include "../include/configuration.h"
  4. #include "webserver.h"
  5. bool serverStarted = false;
  6. HttpServer server;
  7. extern float SensorT, SensorH, SensorHI, SensorCR;
  8. extern String StrCF;
  9. extern time_t NTPLastUpdate;
  10. /*
  11. * Index page.
  12. * Show dht22 data as integer.
  13. */
  14. void onIndex(HttpRequest &request, HttpResponse &response)
  15. {
  16. TemplateFileStream *tmpl = new TemplateFileStream("index.html");
  17. auto &vars = tmpl->variables();
  18. vars["T"] = String(SensorT, 0);
  19. vars["RH"] = String(SensorH, 0);
  20. vars["HI"] = String(SensorHI, 0);
  21. vars["CR"] = String(SensorCR, 0);
  22. vars["CF"] = StrCF; // ýòî ïåðâîå ìåñòî, ãäå îíî èñïîëüçóåòñÿ
  23. vars["ADC"] = String(system_adc_read());
  24. vars["VDD"] = String(system_get_vdd33());
  25. vars["LASTNTP"] = String(SystemClock.now() - NTPLastUpdate);
  26. response.sendTemplate(tmpl);
  27. }
  28. /*
  29. * Configuration page.
  30. */
  31. void onConfiguration(HttpRequest &request, HttpResponse &response)
  32. {
  33. ClockConfig cfg = loadConfig();
  34. if (request.getRequestMethod() == RequestMethod::POST)
  35. {
  36. // Update config
  37. if (request.getPostParameter("SSID").length() > 0) // Network
  38. {
  39. cfg.NetworkSSID = request.getPostParameter("SSID");
  40. cfg.NetworkPassword = request.getPostParameter("Password");
  41. }
  42. if (request.getPostParameter("TZ").length() > 0) // Correction
  43. {
  44. cfg.AddTZ = request.getPostParameter("TZ").toFloat();
  45. }
  46. if (request.getPostParameter("BLow").length() > 0) // Low brightness level.
  47. {
  48. cfg.BrightnessLow = request.getPostParameter("BLow").toInt();
  49. }
  50. if (request.getPostParameter("BMid").length() > 0) // Middle brightness level.
  51. {
  52. cfg.BrightnessMiddle = request.getPostParameter("BMid").toInt();
  53. }
  54. if (request.getPostParameter("BHigh").length() > 0) // High brightness level.
  55. {
  56. cfg.BrightnessHigh = request.getPostParameter("BHigh").toInt();
  57. }
  58. if (request.getPostParameter("LLow").length() > 0) // Low light level trh.
  59. {
  60. cfg.LightTrhLow = request.getPostParameter("LLow").toInt();
  61. }
  62. if (request.getPostParameter("LHigh").length() > 0) // High light level trh.
  63. {
  64. cfg.LightTrhHigh = request.getPostParameter("LHigh").toInt();
  65. }
  66. saveConfig(cfg);
  67. SystemClock.setTimeZone(cfg.AddTZ);
  68. response.redirect();
  69. }
  70. TemplateFileStream *tmpl = new TemplateFileStream("config.html");
  71. auto &vars = tmpl->variables();
  72. vars["SSID"] = cfg.NetworkSSID;
  73. vars["TZ"] = String(cfg.AddTZ, 2);
  74. vars["LLow"] = String(cfg.LightTrhLow);
  75. vars["LHigh"] = String(cfg.LightTrhHigh);
  76. vars["BLow"] = String(cfg.BrightnessLow);
  77. vars["BMid"] = String(cfg.BrightnessMiddle);
  78. vars["BHigh"] = String(cfg.BrightnessHigh);
  79. response.sendTemplate(tmpl);
  80. }
  81. /*
  82. * ðîóòåð
  83. */
  84. void onFile(HttpRequest &request, HttpResponse &response)
  85. {
  86. String file = request.getPath();
  87. if (file[0] == '/')
  88. file = file.substring(1);
  89. if (file[0] == '.')
  90. response.forbidden();
  91. else
  92. {
  93. response.setCache(86400, true); // It's important to use cache for better performance.
  94. response.sendFile(file);
  95. }
  96. }
  97. /// API ///
  98. /*
  99. * API page.
  100. */
  101. void onApiDoc(HttpRequest &request, HttpResponse &response)
  102. {
  103. TemplateFileStream *tmpl = new TemplateFileStream("api.html");
  104. auto &vars = tmpl->variables();
  105. vars["IP"] = (WifiStation.isConnected() ? WifiStation.getIP() : WifiAccessPoint.getIP()).toString();
  106. response.sendTemplate(tmpl);
  107. }
  108. /*
  109. * Gt json data
  110. * äàííûå ñ äàò÷èêîâ âûäà¸ì ñ ìàêñèìàëüíûì ðàçðåøåíèåì.
  111. */
  112. void onApiSensors(HttpRequest &request, HttpResponse &response)
  113. {
  114. JsonObjectStream* stream = new JsonObjectStream();
  115. JsonObject& json = stream->getRoot();
  116. json["status"] = (bool)true;
  117. JsonObject& sensors = json.createNestedObject("sensors");
  118. sensors["temperature"] = String(SensorT, 2);
  119. sensors["humidity"] = String(SensorH, 2);
  120. sensors["heatindex"] = String(SensorHI, 2);
  121. sensors["comfortp"] = String(SensorCR, 2);
  122. sensors["comforts"] = StrCF.c_str(); // âòîðîå ìåñòî
  123. sensors["adcvalue"] = String(system_adc_read());
  124. sensors["vddvalue"] = String(system_get_vdd33());
  125. time_t now = SystemClock.now();
  126. sensors["datetime"] = String(now);
  127. sensors["lastntp"] = String(now - NTPLastUpdate);
  128. response.sendJsonObject(stream);
  129. }
  130. /*
  131. * Óïðàâëåíèå âûâîäîì. êàíäèäàò íà óäàëåíèå.
  132. */
  133. void onApiOutput(HttpRequest &request, HttpResponse &response)
  134. {
  135. int val = request.getQueryParameter("control", "-1").toInt();
  136. if (val == 0 || val == 1)
  137. digitalWrite(CONTROL_PIN, val == 1);
  138. else
  139. val = -1;
  140. JsonObjectStream* stream = new JsonObjectStream();
  141. JsonObject& json = stream->getRoot();
  142. json["status"] = val != -1;
  143. if (val == -1) json["error"] = "Wrong control parameter value, please use: ?control=0|1";
  144. response.sendJsonObject(stream);
  145. }
  146. void startWebServer()
  147. {
  148. if (serverStarted) return;
  149. server.listen(80);
  150. server.addPath("/", onIndex);
  151. server.addPath("/api", onApiDoc);
  152. server.addPath("/api/sensors", onApiSensors);
  153. server.addPath("/api/output", onApiOutput);
  154. server.addPath("/config", onConfiguration);
  155. server.setDefaultHandler(onFile);
  156. serverStarted = true;
  157. /*
  158. if (WifiStation.isEnabled())
  159. debugf("STA: %s", WifiStation.getIP().toString().c_str());
  160. if (WifiAccessPoint.isEnabled())
  161. debugf("AP: %s", WifiAccessPoint.getIP().toString().c_str());
  162. */
  163. }