diff --git a/Cmd.ino b/Cmd.ino index c3978df8..224c14bc 100644 --- a/Cmd.ino +++ b/Cmd.ino @@ -1,9 +1,7 @@ void CMD_init() { - - + sCmd.addCommand("button", button); sCmd.addCommand("buttonSet", buttonSet); - sCmd.addCommand("pinSet", pinSet); sCmd.addCommand("pwm", pwm); @@ -12,37 +10,31 @@ void CMD_init() { sCmd.addCommand("switch", switch_); sCmd.addCommand("analog", analog); - sCmd.addCommand("ph", ph); sCmd.addCommand("level", level); sCmd.addCommand("dallas", dallas); + + sCmd.addCommand("dhtT", dhtT); + sCmd.addCommand("dhtH", dhtH); sCmd.addCommand("logging", logging); sCmd.addCommand("inputDigit", inputDigit); sCmd.addCommand("digitSet", digitSet); - - sCmd.addCommand("text", text); sCmd.addCommand("textSet", textSet); - // sCmd.addCommand("time", time); - // sCmd.addCommand("timeSet", timeSet); - sCmd.addCommand("timerStart", timerStart); sCmd.addCommand("timerStop", timerStop); sCmd.addCommand("mqtt", mqttOrderSend); sCmd.addCommand("http", httpOrderSend); - //!sCmd.addCommand("push", pushControl); - - //handleCMD_ticker(); + sCmd.addCommand("push", pushControl); + // sCmd.addCommand("time", time); + // sCmd.addCommand("timeSet", timeSet); //======новые виджеты ver2.0=======// - - - sCmd.addCommand("inputText", inputText); sCmd.addCommand("inputTextSet", inputTextSet); @@ -54,75 +46,12 @@ void CMD_init() { sCmd.addCommand("inputDate", inputDate); - //sCmd.addCommand("inputDropdown", inputDropdown); - //=================================// } -void inputText() { - String number = sCmd.next(); - String viget_name = sCmd.next(); - viget_name.replace("#", " "); - String page_name = sCmd.next(); - page_name.replace("#", " "); - String start_state = sCmd.next(); - String page_number = sCmd.next(); - jsonWrite(configJson, "inputTextSet" + number, start_state); - createViget (viget_name, page_name, page_number, "vigets/viget.inputText.json", "inputTextSet" + number); -} -void inputTextSet() { - String number = sCmd.next(); - String value = sCmd.next(); - jsonWrite(configJson, "inputTextSet" + number, value); - sendSTATUS("inputTextSet" + number, value); -} - -void inputTime() { - String number = sCmd.next(); - String viget_name = sCmd.next(); - viget_name.replace("#", " "); - String page_name = sCmd.next(); - page_name.replace("#", " "); - String start_state = sCmd.next(); - String page_number = sCmd.next(); - jsonWrite(configJson, "inputTimeSet" + number, start_state); - createViget (viget_name, page_name, page_number, "vigets/viget.inputTime.json", "inputTimeSet" + number); -} -void inputTimeSet() { - String number = sCmd.next(); - String value = sCmd.next(); - value.replace(":", "."); - jsonWrite(configJson, "inputTimeSet" + number, value); - value.replace(".", ":"); - sendSTATUS("inputTimeSet" + number, value); -} - - -void inputDate() { - String number = sCmd.next(); - String viget_name = sCmd.next(); - viget_name.replace("#", " "); - String page_name = sCmd.next(); - page_name.replace("#", " "); - String start_state = sCmd.next(); - String page_number = sCmd.next(); - jsonWrite(configJson, "inputDateSet" + number, start_state); - createViget (viget_name, page_name, page_number, "vigets/viget.inputDate.json", "inputDateSet" + number); -} -void inputDateSet() { - String number = sCmd.next(); - String value = sCmd.next(); - jsonWrite(configJson, "inputDateSet" + number, value); - sendSTATUS("inputDateSet" + number, value); -} - - - - - //========================================================================================================== //==========================================Модуль кнопок=================================================== void button() { @@ -310,7 +239,7 @@ void text() { String page_name = sCmd.next(); String page_number = sCmd.next(); - createViget (viget_name, page_name, page_number, "vigets/viget.alertsm.json", "textSet" + number); + createViget (viget_name, page_name, page_number, "vigets/viget.anydata.json", "textSet" + number); } @@ -331,6 +260,64 @@ void textSet() { sendSTATUS("textSet" + number, text); } + +//==================================================================================================================================================== +void inputText() { + String number = sCmd.next(); + String viget_name = sCmd.next(); + viget_name.replace("#", " "); + String page_name = sCmd.next(); + page_name.replace("#", " "); + String start_state = sCmd.next(); + String page_number = sCmd.next(); + jsonWrite(configJson, "inputTextSet" + number, start_state); + createViget (viget_name, page_name, page_number, "vigets/viget.inputText.json", "inputTextSet" + number); +} +void inputTextSet() { + String number = sCmd.next(); + String value = sCmd.next(); + jsonWrite(configJson, "inputTextSet" + number, value); + sendSTATUS("inputTextSet" + number, value); +} + +void inputTime() { + String number = sCmd.next(); + String viget_name = sCmd.next(); + viget_name.replace("#", " "); + String page_name = sCmd.next(); + page_name.replace("#", " "); + String start_state = sCmd.next(); + String page_number = sCmd.next(); + jsonWrite(configJson, "inputTimeSet" + number, start_state); + createViget (viget_name, page_name, page_number, "vigets/viget.inputTime.json", "inputTimeSet" + number); +} +void inputTimeSet() { + String number = sCmd.next(); + String value = sCmd.next(); + value.replace(":", "."); + jsonWrite(configJson, "inputTimeSet" + number, value); + value.replace(".", ":"); + sendSTATUS("inputTimeSet" + number, value); +} + + +void inputDate() { + String number = sCmd.next(); + String viget_name = sCmd.next(); + viget_name.replace("#", " "); + String page_name = sCmd.next(); + page_name.replace("#", " "); + String start_state = sCmd.next(); + String page_number = sCmd.next(); + jsonWrite(configJson, "inputDateSet" + number, start_state); + createViget (viget_name, page_name, page_number, "vigets/viget.inputDate.json", "inputDateSet" + number); +} +void inputDateSet() { + String number = sCmd.next(); + String value = sCmd.next(); + jsonWrite(configJson, "inputDateSet" + number, value); + sendSTATUS("inputDateSet" + number, value); +} //=================================================Глобальные команды удаленного управления=========================================================== void mqttOrderSend() { @@ -441,6 +428,8 @@ void createViget (String viget_name, String page_name, String page_number, Stri all_vigets += viget + "\r\n"; viget = ""; } + +/* void createViget (String viget_name, String page_name, String page_number, String file, String topic, String key, String value) { String viget; @@ -489,7 +478,7 @@ void createViget (String viget_name, String page_name, String page_number, Stri all_vigets += viget + "\r\n"; viget = ""; } - +*/ String vidgetConfigWrite(String viget, String key, String value) { if (viget == "") return ""; diff --git a/Init.ino b/Init.ino index dcfca754..1280d46d 100644 --- a/Init.ino +++ b/Init.ino @@ -1,6 +1,6 @@ void All_init() { - server.on("/all_modules_init", HTTP_GET, [](AsyncWebServerRequest * request) { + server.on("/all_modules_init", HTTP_GET, [](AsyncWebServerRequest * request) { Device_init(); request->send(200, "text/text", "OK"); // отправляем ответ о выполнении }); @@ -31,15 +31,17 @@ void All_init() { void Device_init() { - ts.remove(LEVEL); + //SENSORS-SECTION ts.remove(ANALOG_); - ts.remove(PH); + ts.remove(LEVEL); ts.remove(DALLAS); - + ts.remove(DHTT); + ts.remove(DHTH); + //================ + all_vigets = ""; txtExecution("config.all.txt"); //outcoming_date(); - } //-------------------------------сценарии----------------------------------------------------- diff --git a/Sensors.ino b/Sensors.ino index d6d81cbf..932d76f5 100644 --- a/Sensors.ino +++ b/Sensors.ino @@ -1,7 +1,6 @@ //=============================================================================================================================== //=========================================Модуль аналогового сенсора============================================================ void analog() { - static boolean flag = true; String pin = sCmd.next(); String viget_name = sCmd.next(); String page_name = sCmd.next(); @@ -11,29 +10,26 @@ void analog() { String analog_start_out = sCmd.next(); String analog_end_out = sCmd.next(); String page_number = sCmd.next(); - jsonWrite(optionJson, "analog_start", analog_start); jsonWrite(optionJson, "analog_end", analog_end); jsonWrite(optionJson, "analog_start_out", analog_start_out); jsonWrite(optionJson, "analog_end_out", analog_end_out); - choose_viget_and_create(viget_name, page_name, page_number, type, "analog"); - ts.add(ANALOG_, analog_update_int, [&](void*) { - static int analog_old; - +#ifdef ESP32 int analog_in = analogRead(pin.toInt()); +#endif +#ifdef ESP8266 + int analog_in = analogRead(A0); +#endif jsonWrite(configJson, "analog_in", analog_in); - int analog = map(analog_in, jsonReadtoInt(optionJson, "analog_start") , jsonReadtoInt(optionJson, "analog_end"), jsonReadtoInt(optionJson, "analog_start_out"), jsonReadtoInt(optionJson, "analog_end_out")); - jsonWrite(configJson, "analog", analog); - // if (analog_old != analog) { eventGen ("analog", ""); sendSTATUS("analog", String(analog)); @@ -41,95 +37,30 @@ void analog() { Serial.println("[i] sensor analog send date " + String(analog)); } // } - analog_old = analog; }, nullptr, true); } -//=============================================================================================================================== -//=========================================Модуль аналогового сенсора============================================================ -void ph() { - - String viget_name = sCmd.next(); - String page_name = sCmd.next(); - String type = sCmd.next(); - String offset = sCmd.next(); - String page_number = sCmd.next(); - - jsonWrite(optionJson, "ph_offset", offset); - - if (type == "text") createViget (viget_name, page_name, page_number, "vigets/viget.alertsm.json", "ph"); - if (type == "gauge") createViget (viget_name, page_name, page_number, "vigets/viget.fillgauge.json", "ph"); - if (type == "gauge2") createViget (viget_name, page_name, page_number, "vigets/viget.gauge.json", "ph"); - if (type == "termometr") createViget (viget_name, page_name, page_number, "vigets/viget.termometr.json", "ph", "titleString", viget_name); - - - ts.add(PH, ph_shooting_interval, [&](void*) { - - static float pHValue_old; - static int counter; - - float offset = jsonRead(optionJson, "ph_offset").toFloat(); - - int analog = analogRead(A0); - analog = medianFilter.filtered(analog); - float voltage = analog * 3.2 / 1024; - float pHValue = 3.5 * voltage + offset; - String pHValue_str = String(pHValue); - - pHValue_str = selectToMarkerPlus(pHValue_str, "." , 2); - - counter++; - - if (counter > ph_times_to_send) { - counter = 0; - - jsonWrite(configJson, "ph", pHValue_str); - - //if (pHValue_old != pHValue) { - - eventGen ("ph", ""); - sendSTATUS("ph", pHValue_str); - if (client.connected()) { - Serial.println("[i] sensor ph send date " + pHValue_str); - Serial.println("voltage " + String(voltage)); - } - //} - pHValue_old = pHValue; - } - }, nullptr, true); -} //=================================================================================================================================== //=========================================Модуль измерения уровня в баке============================================================ void level() { - - static boolean flag = true; String viget_name = sCmd.next(); String page_name = sCmd.next(); String type = sCmd.next(); String empty_level = sCmd.next(); String full_level = sCmd.next(); String page_number = sCmd.next(); - jsonWrite(optionJson, "empty_level", empty_level); jsonWrite(optionJson, "full_level", full_level); - pinMode(14, OUTPUT); pinMode(12, INPUT); - - if (type == "text") createViget (viget_name, page_name, page_number, "vigets/viget.alertsm.json", "level"); - if (type == "gauge") createViget (viget_name, page_name, page_number, "vigets/viget.fillgauge.json", "level"); - if (type == "gauge2") createViget (viget_name, page_name, page_number, "vigets/viget.gauge.json", "level", "maximum", "100"); - if (type == "termometr") createViget (viget_name, page_name, page_number, "vigets/viget.termometr.json", "level", "titleString", viget_name); - + choose_viget_and_create(viget_name, page_name, page_number, type, "level"); ts.add(LEVEL, tank_level_shooting_interval, [&](void*) { - long duration_; int distance_cm; int level; static int level_old; //переменная static сохраняет свое значение между вызовами функции static int counter; - digitalWrite(14, LOW); delayMicroseconds(2); digitalWrite(14, HIGH); @@ -138,21 +69,15 @@ void level() { duration_ = pulseIn(12, HIGH, 30000); // 3000 µs = 50cm // 30000 µs = 5 m distance_cm = duration_ / 29 / 2; distance_cm = medianFilter.filtered(distance_cm);//отсечение промахов медианным фильтром - counter++; - if (counter > tank_level_times_to_send) { counter = 0; jsonWrite(configJson, "level_in", distance_cm); - level = map(distance_cm, jsonReadtoInt(optionJson, "empty_level"), jsonReadtoInt(optionJson, "full_level"), 0, 100); - //jsonWrite(configJson, "level", level); - //if (level_old != level) { - eventGen ("level", ""); sendSTATUS("level", String(level)); if (client.connected()) { @@ -167,33 +92,22 @@ void level() { //========================================================================================================================================== //=========================================Модуль температурного сенсора ds18b20============================================================ void dallas() { - - static boolean flag = true; String pin = sCmd.next(); String viget_name = sCmd.next(); String page_name = sCmd.next(); String type = sCmd.next(); String page_number = sCmd.next(); - oneWire = new OneWire((uint8_t) pin.toInt()); sensors.setOneWire(oneWire); sensors.begin(); sensors.setResolution(12); - - if (type == "text") createViget (viget_name, page_name, page_number, "vigets/viget.alertsm.json", "dallas"); - if (type == "gauge") createViget (viget_name, page_name, page_number, "vigets/viget.fillgauge.json", "dallas"); - if (type == "gauge2") createViget (viget_name, page_name, page_number, "vigets/viget.gauge.json", "dallas"); - if (type == "termometr") createViget (viget_name, page_name, page_number, "vigets/viget.termometr.json", "dallas", "titleString", viget_name); - + choose_viget_and_create(viget_name, page_name, page_number, type, "dallas"); ts.add(DALLAS, temp_update_int, [&](void*) { - float temp = 0; static float temp_old; sensors.requestTemperatures(); temp = sensors.getTempCByIndex(0); - jsonWrite(configJson, "dallas", String(temp)); - //if (temp_old != temp) { eventGen ("dallas", ""); sendSTATUS("dallas", String(temp)); @@ -201,17 +115,71 @@ void dallas() { Serial.println("[i] sensor dallas send date " + String(temp)); } //} - temp_old = temp; }, nullptr, true); } +//====================================================================================================================== +//=========================================Модуль сенсоров DHT========================================================== +void dhtT() { + String pin = sCmd.next(); + String viget_name = sCmd.next(); + String page_name = sCmd.next(); + String type = sCmd.next(); + String page_number = sCmd.next(); + dht.setup(pin.toInt()); + choose_viget_and_create(viget_name, page_name, page_number, type, "dhtT"); + ts.add(DHTT, dhtT_update_int, [&](void*) { + int value = 0; + static int value_old; + value = dht.getTemperature(); + jsonWrite(configJson, "dhtT", String(value)); + //if (value_old != value) { + eventGen ("dhtT", ""); + sendSTATUS("dhtT", String(value)); + if (client.connected()) { + Serial.println("[i] sensor dhtT send date " + String(value)); + } + //} + value_old = value; + }, nullptr, true); +} + + +void dhtH() { + String pin = sCmd.next(); + String viget_name = sCmd.next(); + String page_name = sCmd.next(); + String type = sCmd.next(); + String page_number = sCmd.next(); + dht.setup(pin.toInt()); + choose_viget_and_create(viget_name, page_name, page_number, type, "dhtH"); + ts.add(DHTH, dhtH_update_int, [&](void*) { + int value = 0; + static int value_old; + value = dht.getHumidity(); + jsonWrite(configJson, "dhtH", String(value)); + //if (value_old != value) { + eventGen ("dhtH", ""); + sendSTATUS("dhtH", String(value)); + if (client.connected()) { + Serial.println("[i] sensor dhtH send date " + String(value)); + } + //} + value_old = value; + }, nullptr, true); +} + + + void choose_viget_and_create(String viget_name, String page_name, String page_number, String type, String topik) { - + + if (type == "any-data") createViget (viget_name, page_name, page_number, "vigets/viget.anydata.json", topik); if (type == "progress-line") createViget (viget_name, page_name, page_number, "vigets/viget.progressL.json", topik); - if (type == "progress-round") createViget (viget_name, page_name, page_number,"vigets/viget.progressR.json", topik); - + if (type == "progress-round") createViget (viget_name, page_name, page_number, "vigets/viget.progressR.json", topik); + + } //====================================================================================================================== //===============================================Логирование============================================================ @@ -232,12 +200,12 @@ void logging() { if (sensor_name == "level") jsonWrite(optionJson, "level_logging_count", maxCount); if (sensor_name == "dallas") jsonWrite(optionJson, "dallas_logging_count", maxCount); if (sensor_name == "ph") jsonWrite(optionJson, "ph_logging_count", maxCount); - +/* if (sensor_name == "analog") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "loganalog", "maxCount", maxCount); if (sensor_name == "level") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "loglevel", "maxCount", maxCount); if (sensor_name == "dallas") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "logdallas", "maxCount", maxCount); if (sensor_name == "ph") createViget (viget_name, page_name, page_number, "vigets/viget.chart.json", "logph", "maxCount", maxCount); - +*/ if (sensor_name == "analog") { flagLoggingAnalog = true; ts.remove(ANALOG_LOG); diff --git a/Web_server.ino b/Web_server.ino index 142472c8..1093e013 100644 --- a/Web_server.ino +++ b/Web_server.ino @@ -1,6 +1,6 @@ void Web_server_init() { -//========================================OTA============================================ + //========================================OTA============================================ #ifdef OTA_enable //Send OTA events to the browser ArduinoOTA.onStart([]() { @@ -28,14 +28,14 @@ void Web_server_init() { ArduinoOTA.begin(); #endif -//========================================MDNS============================================ + //========================================MDNS============================================ #ifdef MDNS_enable MDNS.addService("http", "tcp", 80); #endif //SPIFFS.begin(); - -//========================================WS============================================ + + //========================================WS============================================ #ifdef WS_enable ws.onEvent(onWsEvent); server.addHandler(&ws); @@ -46,12 +46,12 @@ void Web_server_init() { server.addHandler(&events); #endif -//====================================================================================== + //====================================================================================== #ifdef ESP32 - server.addHandler(new SPIFFSEditor(SPIFFS, http_username, http_password)); + server.addHandler(new SPIFFSEditor(SPIFFS, jsonRead(configSetup, "web_login").c_str(), jsonRead(configSetup, "web_pass").c_str())); #elif defined(ESP8266) - server.addHandler(new SPIFFSEditor(http_username, http_password)); + server.addHandler(new SPIFFSEditor(jsonRead(configSetup, "web_login").c_str(), jsonRead(configSetup, "web_pass").c_str())); #endif server.on("/heap", HTTP_GET, [](AsyncWebServerRequest * request) { @@ -64,7 +64,7 @@ void Web_server_init() { server.serveStatic("/", SPIFFS, "/favicon.ico").setCacheControl("max-age=31536000"); server.serveStatic("/", SPIFFS, "/").setDefaultFile("index.htm") - .setAuthentication(http_username, http_password); + .setAuthentication(jsonRead(configSetup, "web_login").c_str(), jsonRead(configSetup, "web_pass").c_str()); server.onNotFound([](AsyncWebServerRequest * request) { @@ -145,7 +145,7 @@ void Web_server_init() { request->send(200, "application/json", configSetup); }); } -//========================================WS========================================================================================= +//========================================WS========================================================================================= #ifdef WS_enable void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len) { if (type == WS_EVT_CONNECT) { diff --git a/WiFi.ino b/WiFi.ino index 86444523..6825f657 100644 --- a/WiFi.ino +++ b/WiFi.ino @@ -23,6 +23,26 @@ void WIFI_init() { request->send(200, "text/text", "OK"); // отправляем ответ о выполнении }); + // --------------------Получаем логин и пароль для web со страницы + server.on("/web", HTTP_GET, [](AsyncWebServerRequest * request) { + if (request->hasArg("web_login")) { + jsonWrite(configSetup, "web_login", request->getParam("web_login")->value()); + } + if (request->hasArg("web_pass")) { + jsonWrite(configSetup, "web_pass", request->getParam("web_pass")->value()); + } + saveConfig(); // Функция сохранения данных во Flash + //Web_server_init(); + request->send(200, "text/text", "OK"); // отправляем ответ о выполнении + }); + + server.on("/restart", HTTP_GET, [](AsyncWebServerRequest * request) { + if (request->hasArg("device")) { + if (request->getParam("device")->value() == "ok") ESP.restart(); + } + request->send(200, "text/text", "OK"); // отправляем ответ о выполнении + }); + // Попытка подключения к точке доступа @@ -86,7 +106,7 @@ bool StartAPMode() { Serial.println(myIP); if (jsonReadtoInt(optionJson, "pass_status") != 1) { - ts.add(ROUTER_SEARCHING, 30 * 1000, [&](void*) { + ts.add(ROUTER_SEARCHING, 10 * 1000, [&](void*) { Serial.println("->try find router"); if (RouterFind(jsonRead(configSetup, "ssid"))) { ts.remove(ROUTER_SEARCHING); diff --git a/data/config.all.txt b/data/config.all.txt index 8d361d0a..db0ce5c1 100644 --- a/data/config.all.txt +++ b/data/config.all.txt @@ -1,8 +1,20 @@ -button 1 na Включить#все Освещение 0 1 -button 2 13 Прихожая Освещение 0 2 -button 3 14 Кухня Освещение 0 3 -pwm 1 3 Яркость#коредор: Освещение 1023 4 -pwm 2 4 Яркость#ванная: Освещение 510 5 -analog 0 Аналоговый#вход,#% Датчики progress-round 1 1024 1 1024 6 -button 4 na вкл:#>10,##выкл:#<10 Датчики 0 7 -inputDigit digit1 введите#число Датчики 10 8 \ No newline at end of file +button 1 na Включить#все Реле 0 1 +button 2 13 Прихожая Реле 0 2 +button 3 14 Кухня Реле 0 3 +pwm 1 3 Яркость#коредор: Реле 1023 4 +pwm 2 4 Яркость#ванная: Реле 510 5 +//analog 0 Аналоговый#вход,#% Датчики progress-line 1 1024 1 1024 6 +//dallas 2 Водонагреватель,#t°C Датчики any-data 7 +dhtT 2 Температура#DHT,#t°C Датчики any-data 8 +dhtH 2 Влажность#DHT,#% Датчики any-data 9 +//level Вода#в#баке,#% Датчики any-data 125 20 10 +button 4 na вкл:#>10,##выкл:#<10 Датчики 0 11 +inputDigit digit1 При#скольки#включить? Датчики 10 12 +button 5 na Вкл#обратный#таймер Таймеры 0 13 +inputDigit digit2 Через#сколько#секунд#включить? Таймеры 5 14 +button 6 5 Включится#по#таймеру Таймеры 0 15 +switch 1 0 20 +textSet 1 неопределено +text 1 Квартира Двери 22 +button 7 scenario Вкл#выкл#все#сценарии Сценарии 1 23 +button 8 line1,line2, Вкл#выкл#выбранные#сценарии Сценарии 1 24 \ No newline at end of file diff --git a/data/config.json b/data/config.json index 8ff7a6f3..ae16f518 100644 --- a/data/config.json +++ b/data/config.json @@ -1 +1 @@ -{"SSDP":"MODULES","chipID":"4039078204","ssidAP":"WiFi","passwordAP":"","ssid":"rise","password":"hostel3333","timezone":3,"mqttServer":"m12.cloudmqtt.com","mqttPort":14053,"mqttUser":"lbscvzuj","mqttPass":"bLxlveOgaF8F","scenario":"1","timers":"0","pushingbox_id":"v670C4F8A2581A11"} \ No newline at end of file +{"SSDP":"MODULES","chipID":"905542-1458415","ssidAP":"WiFi","passwordAP":"","ssid":"rise","password":"hostel3333","timezone":3,"mqttServer":"m12.cloudmqtt.com","mqttPort":14053,"mqttUser":"lbscvzuj","mqttPass":"bLxlveOgaF8F","scenario":"1","timers":"0","pushingbox_id":"v7C133E426B0C69E","web_login":"admin","web_pass":"admin"} \ No newline at end of file diff --git a/data/scenario.all.txt b/data/scenario.all.txt index 850fc65e..af4ad0b1 100644 --- a/data/scenario.all.txt +++ b/data/scenario.all.txt @@ -13,4 +13,16 @@ buttonSet 4 1 end analog < digit1 buttonSet 4 0 +end +button5 = 1 +timerStart 1 digit2 sec +end +timer1 = 0 +buttonSet 6 1 +end +switch1 = 1 +textSet 1 закрыто +end +switch1 = 0 +textSet 1 открыто end \ No newline at end of file diff --git a/data/setup.json b/data/setup.json index c6bb2fd4..185a928b 100644 --- a/data/setup.json +++ b/data/setup.json @@ -62,65 +62,18 @@ "class": "btn btn-block btn-success", "action": "ssid?ssid=[[ssid]]&password=[[ssidPass]]" }, - { - "type": "hr" - }, - { - "type": "h2", - "title": "Временная зона GMT" - }, - { - "type": "input", - "title": "{{LangSpace}}", - "name":"timeZone", - "state": "{{timezone}}", - "pattern": "[0-9-]{1,3}" - }, - { - "type": "button", - "module":"", - "title": "Сохранить", - "class": "btn btn-block btn-success", - "action": "timeZone?timeZone=[[timeZone]]" - }, - { - "type": "link", - "title": "Автоопределение зоны", - "action": "javascript:set_time_zone(this);", - "class": "btn btn-block btn-primary" - }, - { - "type": "time", - "name":"times1", - "title": "На устройстве сейчас", - "state":"{{time}}" - }, - { - "type": "button", - "response":"[[times1]]", - "title": "Синхронизировать", - "class": "btn btn-block btn-primary", - "action": "Time" - }, - { + { "type": "hr" }, { "type": "h2", "title": "Точка доступа" }, - { - "type": "text", - "title": "После того как устройство подключается к роутеру, его Wi-Fi исчезнет.", - "class": "alert alert-warning", - "style": "width:45%;float:right;" - }, { "type": "input", "title": "Имя WI-FI сети", "name":"ssidap", "state": "{{ssidAP}}", - "style": "width:50%;display:inline", "pattern": ".{1,20}" }, { @@ -128,19 +81,41 @@ "title": "Пароль", "name":"ssidApPass", "state": "{{passwordAP}}", - "style": "width:50%;display:inline", "pattern": ".{8,20}" }, { "type": "button", "title": "Сохранить", "action": "ssidap?ssidAP=[[ssidap]]&passwordAP=[[ssidApPass]]", - "class": "btn btn-block btn-success", - "style": "width:50%;display:inline" + "class": "btn btn-block btn-success" + }, +{ + "type": "hr" }, { - "type": "hr" - }, + "type": "h2", + "title": "Логин и пароль web interface" + }, + { + "type": "input", + "title": "Логин", + "name":"web-login", + "state": "{{web_login}}", + "pattern": ".{1,20}" + }, + { + "type": "password", + "title": "Пароль", + "name":"web-pass", + "state": "{{web_pass}}", + "pattern": ".{1,20}" + }, + { + "type": "button", + "title": "Сохранить", + "action": "web?web_login=[[web-login]]&web_pass=[[web-pass]]", + "class": "btn btn-block btn-success" + }, { "type": "hr" }, diff --git a/data/vigets/viget.anydata.json b/data/vigets/viget.anydata.json new file mode 100644 index 00000000..b317f572 --- /dev/null +++ b/data/vigets/viget.anydata.json @@ -0,0 +1,5 @@ +{ + "widget" : "anydata", + "after" : "", + "icon" : "" +} \ No newline at end of file diff --git a/data/vigets/viget.inputNum.json b/data/vigets/viget.inputNum.json index d67a7e69..20196c6a 100644 --- a/data/vigets/viget.inputNum.json +++ b/data/vigets/viget.inputNum.json @@ -1,6 +1,5 @@ { - "widget" : "input", - "size" : "small", - "color" : "orange", + "widget" : "input", + "color" : "blue", "type" : "number" } \ No newline at end of file diff --git a/data/vigets/viget.toggle.json b/data/vigets/viget.toggle.json index 08d501e6..891c2c68 100644 --- a/data/vigets/viget.toggle.json +++ b/data/vigets/viget.toggle.json @@ -1,5 +1,5 @@ { "widget" : "toggle", - "icon" : "sunny", - "iconOff" : "moon" + "icon" : "", + "iconOff" : "" } \ No newline at end of file diff --git a/esp32_iot-manager_modules_firmware.ino b/esp32_iot-manager_modules_firmware.ino index cf43c1e9..29ff6469 100644 --- a/esp32_iot-manager_modules_firmware.ino +++ b/esp32_iot-manager_modules_firmware.ino @@ -5,7 +5,6 @@ void setup() { Serial.begin(115200); Serial.setDebugOutput(true); Serial.println("--------------started----------------"); - //-------------------------------------------------------------- SPIFFS.begin(); configSetup = readFile("config.json", 4096); @@ -47,25 +46,28 @@ void setup() { MQTT_init(); Serial.println("[V] MQTT_init"); //-------------------------------------------------------------- + Push_init(); + Serial.println("[V] Push_init"); + getMemoryLoad("[i] After loading"); - ts.add(TEST, 1000, [&](void*) { + // ts.add(TEST, 1000, [&](void*) { - //getMemoryLoad("[i] Periodic check"); - - }, nullptr, true); + //getMemoryLoad("[i] Periodic check"); + + // }, nullptr, true); } void loop() { - -#ifdef OTA_enable - ArduinoOTA.handle(); -#endif -#ifdef WS_enable +#ifdef OTA_enable + ArduinoOTA.handle(); +#endif + +#ifdef WS_enable ws.cleanupClients(); #endif diff --git a/main.ino b/main.ino index 53147f35..2a962fec 100644 --- a/main.ino +++ b/main.ino @@ -271,9 +271,11 @@ void getMemoryLoad(String text) { int memory_load = memory_used * 100 / all_memory; if (memory_load > 65) Serial.print("Attention!!! too match memory used!!!"); Serial.print(text + " memory used:"); - Serial.println(String(memory_load) + "%"); + Serial.print(String(memory_load) + "%; "); + Serial.print("memory remain:"); + Serial.println(String(memory_remain) + " k bytes"); } -//esp32 full memory = 362868 -//esp8266 full memory = 53312 +//esp32 full memory = 362868 k bytes +//esp8266 full memory = 53312 k bytes diff --git a/push_pushingbox.ino b/push_pushingbox.ino new file mode 100644 index 00000000..6e89ade6 --- /dev/null +++ b/push_pushingbox.ino @@ -0,0 +1,58 @@ +void Push_init() { + server.on("/pushingboxDate", HTTP_GET, [](AsyncWebServerRequest * request) { + + if (request->hasArg("pushingbox_id")) { + jsonWrite(configSetup, "pushingbox_id", request->getParam("pushingbox_id")->value()); + } + + saveConfig(); + + request->send(200, "text/text", "ok"); // отправляем ответ о выполнении + }); +} + +void pushControl() { + + String title = sCmd.next(); + title.replace("#", " "); + String body = sCmd.next(); + body.replace("#", " "); + + static String body_old; + + const char* logServer = "api.pushingbox.com"; + String deviceId = jsonRead(configSetup, "pushingbox_id"); + + Serial.println("- starting client"); + + WiFiClient client; + + Serial.println("- connecting to pushing server: " + String(logServer)); + if (client.connect(logServer, 80)) { + Serial.println("- succesfully connected"); + + String postStr = "devid="; + postStr += String(deviceId); + + postStr += "&title="; + postStr += String(title); + + postStr += "&body="; + postStr += String(body); + + postStr += "\r\n\r\n"; + + Serial.println("- sending data..."); + + client.print("POST /pushingbox HTTP/1.1\n"); + client.print("Host: api.pushingbox.com\n"); + client.print("Connection: close\n"); + client.print("Content-Type: application/x-www-form-urlencoded\n"); + client.print("Content-Length: "); + client.print(postStr.length()); + client.print("\n\n"); + client.print(postStr); + } + client.stop(); + Serial.println("- stopping the client"); +} diff --git a/set.h b/set.h index b378a4b8..a642e3ec 100644 --- a/set.h +++ b/set.h @@ -35,7 +35,7 @@ AsyncEventSource events("/events"); #include "time.h" #include TickerScheduler ts(30); -enum { ROUTER_SEARCHING, WIFI_MQTT_CONNECTION_CHECK, LEVEL, ANALOG_, PH, DALLAS, ANALOG_LOG, LEVEL_LOG, DALLAS_LOG, PH_LOG, CMD , TIMER_COUNTDOWN, TIMERS, TEST}; +enum { ROUTER_SEARCHING, WIFI_MQTT_CONNECTION_CHECK, LEVEL, ANALOG_, DALLAS, DHTT, DHTH, ANALOG_LOG, LEVEL_LOG, DALLAS_LOG, PH_LOG, CMD , TIMER_COUNTDOWN, TIMERS, TEST}; //ssl//#include "dependencies/WiFiClientSecure/WiFiClientSecure.h" //using older WiFiClientSecure #include @@ -58,9 +58,15 @@ GMedian medianFilter; #include OneWire *oneWire; DallasTemperature sensors; - - +//---------------------------------------------------------------- +#include //https://github.com/markruys/arduino-DHT +DHT dht; +//---------------------------------------------------------------- +#include "Adafruit_Si7021.h" //https://github.com/adafruit/Adafruit_Si7021 +Adafruit_Si7021 sensor_Si7021 = Adafruit_Si7021(); //----------------------------------------------------------------- + + //#define OTA_enable //----------------------------------------------------------------- //#define MDNS_enable @@ -68,9 +74,7 @@ DallasTemperature sensors; //#define WS_enable //----------------------------------------------------------------- - - -#define wifi_mqtt_reconnecting 60000 +#define wifi_mqtt_reconnecting 20000 //----------------------------------------------------------------- #define analog_update_int 5000 //----------------------------------------------------------------- @@ -82,11 +86,12 @@ DallasTemperature sensors; #define tank_level_shooting_interval 500 //интервал выстрела датчика #define tank_level_times_to_send 20 //после скольки выстрелов делать отправку данных //----------------------------------------------------------------- +#define dhtT_update_int 5000 +#define dhtH_update_int 5000 +//----------------------------------------------------------------- const char* hostName = "esp-async"; -const char* http_username = "admin"; -const char* http_password = "admin"; String configSetup = "{}"; String configJson = "{}"; @@ -96,7 +101,7 @@ String chipID = ""; String prefix = "/IoTmanager"; String prex; String ids; -//boolean busy; +//boolean busy; String all_vigets = ""; String scenario;