123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- #include <SmingCore.h>
- #include "configuration.h"
- bool serverStarted = false;
- HttpServer server;
- extern float SensorT, SensorH, SensorHI, SensorCR;
- extern uint32_t SensorLux;
- extern String StrCF;
- extern time_t NTPLastUpdate;
- void onIndex(HttpRequest& request, HttpResponse& response)
- {
- TemplateFileStream* tmpl = new TemplateFileStream("index.html");
- auto& vars = tmpl->variables();
- vars["T"] = String(SensorT, 0);
- vars["RH"] = String(SensorH, 0);
- vars["HI"] = String(SensorHI, 0);
- vars["CR"] = String(SensorCR, 0);
- vars["CF"] = StrCF; // это первое место, где оно используется
- vars["LUX"] = String(SensorLux, 0);
- vars["VDD"] = String(system_get_vdd33 ());
- vars["LASTNTP"] = String (SystemClock.now () - NTPLastUpdate);
- response.sendNamedStream(tmpl);
- }
- void onConfiguration(HttpRequest& request, HttpResponse& response)
- {
- ClockConfig cfg = loadConfig();
- if(request.method == HTTP_POST) {
- debugf("Update config");
- // Update config
- // Network
- if(request.getPostParameter("SSID").length() > 0)
- {
- cfg.NetworkSSID = request.getPostParameter("SSID");
- cfg.NetworkPassword = request.getPostParameter("Password");
- }
- // Correction
- if(request.getPostParameter("TZ").length() > 0) {
- float tz = request.getPostParameter("TZ").toFloat();
- if (cfg.AddTZ != tz) {
- cfg.AddTZ = tz;
- if (cfg.AddTZ < 0 || cfg.AddTZ > 23) {
- cfg.AddTZ = 0;
- }
- SystemClock.setTimeZone(cfg.AddTZ);
- }
- }
- // Low brightness level.
- if (request.getPostParameter ("BLow").length () > 0) {
- cfg.BrightnessLow = request.getPostParameter ("BLow").toInt ();
- if (cfg.BrightnessLow < LedBrightMin || cfg.BrightnessLow > LedBrightMax) {
- cfg.BrightnessLow = LedBrightMin;
- }
- }
- // Middle brightness level.
- if (request.getPostParameter ("BMid").length () > 0) {
- cfg.BrightnessMiddle = request.getPostParameter ("BMid").toInt ();
- if (cfg.BrightnessMiddle < LedBrightMin || cfg.BrightnessMiddle > LedBrightMax) {
- cfg.BrightnessMiddle = LedBrightMiddl;
- }
- }
- // High brightness level.
- if (request.getPostParameter ("BHigh").length () > 0) {
- cfg.BrightnessHigh = request.getPostParameter ("BHigh").toInt ();
- if (cfg.BrightnessHigh < LedBrightMin || cfg.BrightnessHigh > LedBrightMax) {
- cfg.BrightnessHigh = LedBrightMax;
- }
- }
- // Low light level trh.
- if (request.getPostParameter ("LLow").length () > 0) {
- cfg.LightTrhLow = request.getPostParameter ("LLow").toInt ();
- if (cfg.LightTrhLow < MinLightThreshold || cfg.LightTrhLow > MaxLightThreshold) {
- cfg.LightTrhLow = MinLightThreshold;
- }
- }
- // High light level trh.
- if (request.getPostParameter ("LHigh").length () > 0) {
- cfg.LightTrhHigh = request.getPostParameter ("LHigh").toInt ();
- if (cfg.LightTrhHigh < MinLightThreshold || cfg.LightTrhHigh > MaxLightThreshold) {
- cfg.LightTrhHigh = MaxLightThreshold;
- }
- }
- saveConfig(cfg);
- response.headers[HTTP_HEADER_LOCATION] = "/";
- }
- debugf("Send template");
- TemplateFileStream* tmpl = new TemplateFileStream("config.html");
- auto& vars = tmpl->variables();
- vars["SSID"] = cfg.NetworkSSID;
- vars["TZ"] = String(cfg.AddTZ, 2);
- vars["LLow"] = String(cfg.LightTrhLow);
- vars["LHigh"] = String(cfg.LightTrhHigh);
- vars["BLow"] = String(cfg.BrightnessLow);
- vars["BMid"] = String(cfg.BrightnessMiddle);
- vars["BHigh"] = String(cfg.BrightnessHigh);
- response.sendNamedStream(tmpl);
- }
- /**
- * @brief Router
- */
- void onFile(HttpRequest& request, HttpResponse& response)
- {
- String file = request.uri.getRelativePath();
- if(file[0] == '.')
- response.code = HTTP_STATUS_FORBIDDEN;
- else {
- response.setCache(86400, true); // It's important to use cache for better performance.
- response.sendFile(file);
- }
- }
- /// API ///
- void onApiDoc(HttpRequest& request, HttpResponse& response)
- {
- TemplateFileStream* tmpl = new TemplateFileStream("api.html");
- auto& vars = tmpl->variables();
- vars["IP"] = (WifiStation.isConnected() ? WifiStation.getIP() : WifiAccessPoint.getIP()).toString();
- response.sendNamedStream(tmpl);
- }
- /**
- * @brief Get json data
- * данные с датчиков выдаём с максимальным разрешением.
- */
- void onApiSensors(HttpRequest& request, HttpResponse& response)
- {
- JsonObjectStream* stream = new JsonObjectStream();
- JsonObject json = stream->getRoot();
- json["status"] = (bool)true;
- JsonObject sensors = json.createNestedObject("sensors");
- sensors["temperature"] = String(SensorT, 2);
- sensors["humidity"] = String(SensorH, 2);
- sensors["heatindex"] = String(SensorHI, 2);
- sensors["comfortp"] = String(SensorCR, 2);
- sensors["comforts"] = StrCF.c_str (); //??? второе место
- sensors["luxvalue"] = String(SensorLux, 0);
- sensors["vddvalue"] = String(system_get_vdd33 ());
- time_t now = SystemClock.now();
- sensors["datetime"] = String(now);
- sensors["lastntp"] = String(now - NTPLastUpdate);
- response.sendDataStream(stream, MIME_JSON);
- }
- #include "led_spi.h"
- #include "tm1650.h"
- void onApiControl (HttpRequest &request, HttpResponse &response)
- {
- int val = request.getQueryParameter ("bright", "-1").toInt ();
- if (val < LedBrightMin) { val = LedBrightMin; }
- if (val > LedBrightMax) { val = LedBrightMax; }
- LED_SetBright(val);
- TM1650_Bright(val);
- JsonObjectStream* stream = new JsonObjectStream();
- JsonObject json = stream->getRoot();
- json["status"] = val;
- response.sendDataStream(stream, MIME_JSON);
- }
- void startWebServer()
- {
- if(serverStarted)
- return;
- server.listen(80);
- server.paths.set("/", onIndex);
- server.paths.set("/api", onApiDoc);
- server.paths.set("/api/sensors", onApiSensors);
- server.paths.set("/config", onConfiguration);
- server.paths.setDefault(onFile);
- serverStarted = true;
- if(WifiStation.isEnabled())
- debugf("STA: %s", WifiStation.getIP().toString().c_str());
- if(WifiAccessPoint.isEnabled())
- debugf("AP: %s", WifiAccessPoint.getIP().toString().c_str());
- }
|