diff --git a/Cmd.ino b/Cmd.ino index bd6f9e73..90ec9fd9 100644 --- a/Cmd.ino +++ b/Cmd.ino @@ -270,20 +270,27 @@ void inputTime() { page_name.replace("#", " "); String start_state = sCmd.next(); String page_number = sCmd.next(); - start_state.replace(":", "."); jsonWrite(configJson, "timeSet" + number, start_state); - start_state.replace(".", ":"); createViget (viget_name, page_name, page_number, "vigets/viget.inputTime.json", "timeSet" + number); } void timeSet() { String number = sCmd.next(); String value = sCmd.next(); - value.replace(":", "."); jsonWrite(configJson, "timeSet" + number, value); - value.replace(".", ":"); sendSTATUS("timeSet" + number, value); } +void handle_time_init() { + ts.add(TIME, 1000, [&](void*) { + + String tmp = GetTime(); + tmp.replace(":", "-"); + jsonWrite(configJson, "timenowSet", tmp); + eventGen ("timenowSet", ""); + + }, nullptr, true); +} + //===================================================================================================================================== //=========================================Добавление текстового виджета============================================================ void text() { @@ -305,25 +312,17 @@ void textSet() { if (text.indexOf("-time") >= 0) { text.replace("-time", ""); + text.replace("#", " "); String time = GetTime(); time.replace(":", "."); - text = GetDataDigital() + " " + time + " " + text; + text = text + " " + GetDataDigital() + " " + time; } jsonWrite(configJson, "textSet" + number, text); sendSTATUS("textSet" + number, text); } -void handle_time_init() { - ts.add(TIME, 1000, [&](void*) { - String tmp = GetTimeWOsec(); - tmp.replace(":", "."); - jsonWrite(configJson, "timenowSet", tmp); - eventGen ("timenowSet", ""); - - }, nullptr, true); -} //==================================================================================================================================================== /* void inputText() { diff --git a/Init.ino b/Init.ino index a1e28379..5f483c25 100644 --- a/Init.ino +++ b/Init.ino @@ -61,7 +61,8 @@ void prsets_init() { writeFile("firmware.scenario.txt", readFile("configs/relay.scenario.txt", 2048)); Device_init(); Scenario_init(); - request->send(200, "text/text", "OK"); // отправляем ответ о выполнении + String tmp = ""; + request->redirect("/page.htm?configuration"); }); server.on("/relay_timer", HTTP_GET, [](AsyncWebServerRequest * request) { @@ -69,7 +70,7 @@ void prsets_init() { writeFile("firmware.scenario.txt", readFile("configs/relay_t.scenario.txt", 2048)); Device_init(); Scenario_init(); - request->send(200, "text/text", "OK"); // отправляем ответ о выполнении + request->redirect("/page.htm?configuration"); }); server.on("/relay_countdown", HTTP_GET, [](AsyncWebServerRequest * request) { @@ -77,7 +78,7 @@ void prsets_init() { writeFile("firmware.scenario.txt", readFile("configs/relay_c.scenario.txt", 2048)); Device_init(); Scenario_init(); - request->send(200, "text/text", "OK"); // отправляем ответ о выполнении + request->redirect("/page.htm?configuration"); }); server.on("/relay_several", HTTP_GET, [](AsyncWebServerRequest * request) { @@ -85,7 +86,7 @@ void prsets_init() { writeFile("firmware.scenario.txt", readFile("configs/relay_s.scenario.txt", 2048)); Device_init(); Scenario_init(); - request->send(200, "text/text", "OK"); // отправляем ответ о выполнении + request->redirect("/page.htm?configuration"); }); server.on("/relay_switch", HTTP_GET, [](AsyncWebServerRequest * request) { @@ -93,7 +94,7 @@ void prsets_init() { writeFile("firmware.scenario.txt", readFile("configs/relay_sw.scenario.txt", 2048)); Device_init(); Scenario_init(); - request->send(200, "text/text", "OK"); // отправляем ответ о выполнении + request->redirect("/page.htm?configuration"); }); server.on("/relay_button_remote", HTTP_GET, [](AsyncWebServerRequest * request) { @@ -101,7 +102,7 @@ void prsets_init() { writeFile("firmware.scenario.txt", readFile("configs/relay_br.scenario.txt", 2048)); Device_init(); Scenario_init(); - request->send(200, "text/text", "OK"); // отправляем ответ о выполнении + request->redirect("/page.htm?configuration"); }); server.on("/relay_switch_remote", HTTP_GET, [](AsyncWebServerRequest * request) { @@ -109,7 +110,15 @@ void prsets_init() { writeFile("firmware.scenario.txt", readFile("configs/relay_sr.scenario.txt", 2048)); Device_init(); Scenario_init(); - request->send(200, "text/text", "OK"); // отправляем ответ о выполнении + request->redirect("/page.htm?configuration"); + }); + + server.on("/pwm", HTTP_GET, [](AsyncWebServerRequest * request) { + writeFile("firmware.config.txt", readFile("configs/pwm.config.txt", 2048)); + writeFile("firmware.scenario.txt", readFile("configs/pwm.scenario.txt", 2048)); + Device_init(); + Scenario_init(); + request->redirect("/page.htm?configuration"); }); //part 2=============================================================================== @@ -119,7 +128,7 @@ void prsets_init() { writeFile("firmware.scenario.txt", readFile("configs/dht11.scenario.txt", 2048)); Device_init(); Scenario_init(); - request->send(200, "text/text", "OK"); // отправляем ответ о выполнении + request->redirect("/page.htm?configuration"); }); server.on("/dht22", HTTP_GET, [](AsyncWebServerRequest * request) { @@ -127,28 +136,58 @@ void prsets_init() { writeFile("firmware.scenario.txt", readFile("configs/dht22.scenario.txt", 2048)); Device_init(); Scenario_init(); - request->send(200, "text/text", "OK"); // отправляем ответ о выполнении + request->redirect("/page.htm?configuration"); }); + server.on("/analog", HTTP_GET, [](AsyncWebServerRequest * request) { + writeFile("firmware.config.txt", readFile("configs/analog.config.txt", 2048)); + writeFile("firmware.scenario.txt", readFile("configs/analog.scenario.txt", 2048)); + Device_init(); + Scenario_init(); + request->redirect("/page.htm?configuration"); + }); server.on("/dallas", HTTP_GET, [](AsyncWebServerRequest * request) { writeFile("firmware.config.txt", readFile("configs/dallas.config.txt", 2048)); writeFile("firmware.scenario.txt", readFile("configs/dallas.scenario.txt", 2048)); Device_init(); Scenario_init(); - request->send(200, "text/text", "OK"); // отправляем ответ о выполнении + request->redirect("/page.htm?configuration"); }); - - server.on("/termostat", HTTP_GET, [](AsyncWebServerRequest * request) { writeFile("firmware.config.txt", readFile("configs/termostat.config.txt", 2048)); writeFile("firmware.scenario.txt", readFile("configs/termostat.scenario.txt", 2048)); Device_init(); Scenario_init(); - request->send(200, "text/text", "OK"); // отправляем ответ о выполнении + request->redirect("/page.htm?configuration"); }); + server.on("/level", HTTP_GET, [](AsyncWebServerRequest * request) { + writeFile("firmware.config.txt", readFile("configs/level.config.txt", 2048)); + writeFile("firmware.scenario.txt", readFile("configs/level.scenario.txt", 2048)); + Device_init(); + Scenario_init(); + request->redirect("/page.htm?configuration"); + }); + + server.on("/moution_relay", HTTP_GET, [](AsyncWebServerRequest * request) { + writeFile("firmware.config.txt", readFile("configs/moution_r.config.txt", 2048)); + writeFile("firmware.scenario.txt", readFile("configs/moution_r.scenario.txt", 2048)); + Device_init(); + Scenario_init(); + request->redirect("/page.htm?configuration"); + }); + + server.on("/moution_security", HTTP_GET, [](AsyncWebServerRequest * request) { + writeFile("firmware.config.txt", readFile("configs/moution_s.config.txt", 2048)); + writeFile("firmware.scenario.txt", readFile("configs/moution_s.scenario.txt", 2048)); + Device_init(); + Scenario_init(); + request->redirect("/page.htm?configuration"); + }); + + //default=============================================================================== server.on("/default", HTTP_GET, [](AsyncWebServerRequest * request) { @@ -156,7 +195,7 @@ void prsets_init() { writeFile("firmware.scenario.txt", readFile("configs/firmware.scenario.txt", 2048)); Device_init(); Scenario_init(); - request->send(200, "text/text", "OK"); // отправляем ответ о выполнении + request->redirect("/page.htm?configuration"); }); } @@ -189,10 +228,10 @@ void up_time() { void statistics() { String urls = "http://backup.privet.lv/visitors/?"; - + urls += WiFi.macAddress().c_str(); urls += "&"; - + #ifdef ESP8266 urls += "iot-manager_esp8266"; #endif @@ -200,7 +239,7 @@ void statistics() { urls += "iot-manager_esp32"; #endif urls += "&"; - + #ifdef ESP8266 urls += ESP.getResetReason(); #endif @@ -208,7 +247,7 @@ void statistics() { urls += "unknow"; #endif urls += "&"; - + urls += DATE_COMPILING; String stat = getURL(urls); } diff --git a/Sensors.ino b/Sensors.ino index 0453aa5e..b67fd036 100644 --- a/Sensors.ino +++ b/Sensors.ino @@ -77,7 +77,7 @@ void level() { level = map(distance_cm, jsonReadtoInt(optionJson, "empty_level"), jsonReadtoInt(optionJson, "full_level"), 0, 100); - //jsonWrite(configJson, "level", level); + jsonWrite(configJson, "level", level); //if (level_old != level) { eventGen ("level", ""); sendSTATUS("level", String(level)); diff --git a/Timers.ino b/Timers.ino index 06507ef5..94049ae4 100644 --- a/Timers.ino +++ b/Timers.ino @@ -131,6 +131,8 @@ int readTimer(int number) { }*/ //------------------------------таймеры------------------------------------------------------ + +/* void time() { String time_number = sCmd.next(); @@ -183,3 +185,4 @@ void time() { } }, nullptr, true); } +*/ diff --git a/Upgrade.ino b/Upgrade.ino new file mode 100644 index 00000000..17fdc72d --- /dev/null +++ b/Upgrade.ino @@ -0,0 +1,156 @@ +void initUpgrade() { + + server.on("/upgrade", HTTP_GET, [](AsyncWebServerRequest * request) { + + Serial.println("start update..."); + + //WiFiClient client_for; + + //httpUpdate.rebootOnUpdate(false); + + //t_httpUpdate_return ret = httpUpdate.updateSpiffs(client_for, "http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin"); + + //if (ret == HTTP_UPDATE_OK) { + + Serial.println("update Spiffs done!"); + + //t_httpUpdate_return ret = httpUpdate.update(client_for, "http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.ino.bin"); + + // switch (ret) { + // case HTTP_UPDATE_FAILED: + // Serial.printf("HTTP_UPDATE_FAILED Error (%d): %s", httpUpdate.getLastError(), httpUpdate.getLastErrorString().c_str()); + // break; + + // case HTTP_UPDATE_NO_UPDATES: + // Serial.println("HTTP_UPDATE_NO_UPDATES"); + // break; + + // case HTTP_UPDATE_OK: + // Serial.println("HTTP_UPDATE_OK"); + // break; + // } + + // } + + //UpdateStatus(ret); + + /* #ifdef ESP8266 + String new_version = getURL("http://91.204.228.124:1100/update/esp8266/version.txt"); + #endif + + #ifdef ESP32 + String new_version = getURL("http://91.204.228.124:1100/update/esp32/version.txt"); + #endif + + Serial.println(new_version); + + String tmp = "{}"; + if (new_version == firmware_version) { + jsonWrite(tmp, "title", " Установленна последняя версия: " + new_version); + jsonWrite(tmp, "class", "pop-up"); + } else { + jsonWrite(tmp, "title", " Начитаню обновление до версии: " + new_version); + jsonWrite(tmp, "class", "pop-up"); + webUpgrade(); + }*/ + + request->send(200, "text/text", "ok"); + }); + +} + +void UpdateStatus(t_httpUpdate_return set) { + switch (set) { + case HTTP_UPDATE_FAILED: + Serial.printf("HTTP_UPDATE_FAILED Error (%d): %s\n", httpUpdate.getLastError(), httpUpdate.getLastErrorString().c_str()); + break; + + case HTTP_UPDATE_NO_UPDATES: + Serial.println("HTTP_UPDATE_NO_UPDATES"); + break; + + case HTTP_UPDATE_OK: + Serial.println("HTTP_UPDATE_OK"); + break; + } +} +/* + // ----------------------- Обновление с сайта + void webUpgrade() { + + #ifdef ESP8266 + String spiffsData = "http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin"; + String buildData = "http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.ino.bin"; + #endif + + #ifdef ESP32 + String spiffsData = "http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin"; + String buildData = "http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.ino.bin"; + #endif + + if (spiffsData != "") { // Если нужно прошить FS + String scenario_for_update; + String config_for_update; + String configSetup_for_update; + Serial.println(spiffsData); + scenario_for_update = readFile("firmware.scenario.txt", 2048); + config_for_update = readFile("config.all.txt", 2048); + configSetup_for_update = configSetup; + ESPhttpUpdate.rebootOnUpdate(false); // Отключим перезагрузку после обновления + updateHTTP(spiffsData, true); + writeFile("firmware.scenario.txt", scenario_for_update); + writeFile("config.all.txt", config_for_update); + writeFile("config.json", configSetup_for_update); + saveConfig(); + } + + if (buildData != "") { // Если нужно прошить build + Serial.println(buildData); + ESPhttpUpdate.rebootOnUpdate(true); // Включим перезагрузку после обновления + updateHTTP(buildData, false); + } + } + // ------------------ Обновление по url + void updateHTTP(String url, boolean mode) { + if (url == "") return; + ESPhttpUpdate.setLedPin(LED_BUILTIN, LOW); + if (mode) { + Serial.println("Update Spiffs..."); + t_httpUpdate_return ret = ESPhttpUpdate.updateSpiffs(url); + UpdateStatus(ret , "Spiffs"); + } else { + Serial.println("Update Build..."); + t_httpUpdate_return ret = ESPhttpUpdate.update(url); + UpdateStatus(ret , "build"); + } + } + void UpdateStatus(t_httpUpdate_return set, String mode) { + + switch (set) { + + case HTTP_UPDATE_FAILED: + Serial.println(mode + "_FAILED"); + var = "{}"; + jsonWrite(var, "title", "_FAILED"); + jsonWrite(var, "class", "pop-up"); + //request->send(200, "text/text", var); + break; + + case HTTP_UPDATE_NO_UPDATES: + Serial.println(mode + "_NO_UPDATES"); + var = "{}"; + jsonWrite(var, "title", "_NO_UPDATES"); + jsonWrite(var, "class", "pop-up"); + //request->send(200, "text/text", var); + break; + + case HTTP_UPDATE_OK: + Serial.println(mode + "_UPDATE_OK"); + var = "{}"; + jsonWrite(var, "title", "_UPDATE_OK"); + jsonWrite(var, "class", "pop-up"); + //request->send(200, "text/text", var); + break; + } + } +*/ diff --git a/data/.exclude.files b/data/.exclude.files new file mode 100644 index 00000000..955397fa --- /dev/null +++ b/data/.exclude.files @@ -0,0 +1,2 @@ +/*.js.gz +/.exclude.files diff --git a/data/ace.js.gz b/data/ace.js.gz new file mode 100644 index 00000000..7b175c1c Binary files /dev/null and b/data/ace.js.gz differ diff --git a/data/configs/analog.config.txt b/data/configs/analog.config.txt new file mode 100644 index 00000000..04e9e814 --- /dev/null +++ b/data/configs/analog.config.txt @@ -0,0 +1,7 @@ +analog 0 Аналоговый#вход,#% Датчики progress-round 310 620 1 100 1 + +//если датчик углекислого газа выдает напряжение от 1 вольта до 2 вольт, то значит +//значение чтения аналогового входа будут примерно равным +//при 1 вольте - 310, а при 2 вольтах - 620 (считаем по пропорции) +//данная строка переведет диапазон 310-620 в диапазон 1-100 и отобразит в приложении +//варианты отображения: any-data, progress-round, progress-line diff --git a/data/configs/analog.scenario.txt b/data/configs/analog.scenario.txt new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/data/configs/analog.scenario.txt @@ -0,0 +1 @@ + diff --git a/data/configs/dallas.config.txt b/data/configs/dallas.config.txt index e69de29b..373709a1 100644 --- a/data/configs/dallas.config.txt +++ b/data/configs/dallas.config.txt @@ -0,0 +1,4 @@ +dallas 2 Водонагреватель,#t°C Датчики any-data 1 + +//2 - номер пина датчика +//варианты отображения: any-data, progress-round, progress-line \ No newline at end of file diff --git a/data/configs/dallas.scenario.txt b/data/configs/dallas.scenario.txt index e69de29b..8b137891 100644 --- a/data/configs/dallas.scenario.txt +++ b/data/configs/dallas.scenario.txt @@ -0,0 +1 @@ + diff --git a/data/configs/dht11.config.txt b/data/configs/dht11.config.txt index d93d69e3..1638b67e 100644 --- a/data/configs/dht11.config.txt +++ b/data/configs/dht11.config.txt @@ -2,4 +2,7 @@ dhtT DHT11 2 Температура#DHT,#t°C Датчики any-data 1 dhtH DHT11 2 Влажность#DHT,#% Датчики any-data 2 dhtComfort Степень#комфорта: Датчики 3 dhtPerception Восприятие: Датчики 4 -dhtDewpoint Точка#росы: Датчики 5 \ No newline at end of file +dhtDewpoint Точка#росы: Датчики 5 + +//2 - номер пина датчика +//варианты отображения: any-data, progress-round, progress-line \ No newline at end of file diff --git a/data/configs/dht22.config.txt b/data/configs/dht22.config.txt index eba7dcaf..2ffd81cb 100644 --- a/data/configs/dht22.config.txt +++ b/data/configs/dht22.config.txt @@ -2,4 +2,7 @@ dhtT DHT22 2 Температура#DHT,#t°C Датчики any-data 1 dhtH DHT22 2 Влажность#DHT,#% Датчики any-data 2 dhtComfort Степень#комфорта: Датчики 3 dhtPerception Восприятие: Датчики 4 -dhtDewpoint Точка#росы: Датчики 5 \ No newline at end of file +dhtDewpoint Точка#росы: Датчики 5 + +//2 - номер пина датчика +//варианты отображения: any-data, progress-round, progress-line \ No newline at end of file diff --git a/data/configs/firmware.config.txt b/data/configs/firmware.config.txt index 23cbe46e..f1d2f0c0 100644 --- a/data/configs/firmware.config.txt +++ b/data/configs/firmware.config.txt @@ -4,27 +4,21 @@ button 3 14 Кухня Реле 0 3 pwm 1 3 Яркость#коредор: Реле 1023 4 pwm 2 4 Яркость#ванная: Реле 510 5 //--------------------------------------------------------------------- -//analog 0 Аналоговый#вход,#% Датчики progress-round 1 1024 1 1024 6 +analog 0 Аналоговый#вход,#% Датчики progress-round 1 1024 1 1024 6 inputDigit digit1 При#скольки#включить? Датчики 10 7 inputDigit digit2 При#скольки#выключить? Датчики 0 8 button 4 na Нагреватель Датчики 0 9 -//dallas 2 Водонагреватель,#t°C Датчики any-data 10 -//dhtT DHT11 2 Температура#DHT,#t°C Датчики any-data 11 -//dhtH DHT11 2 Влажность#DHT,#% Датчики any-data 12 -//dhtComfort Степень#комфорта: Датчики 12 -//dhtPerception Восприятие: Датчики 13 -//dhtDewpoint Точка#росы: Датчики 14 -//level Вода#в#баке,#% Датчики any-data 125 20 15 //--------------------------------------------------------------------- button 5 na Вкл#обратный#таймер Таймеры 0 16 inputDigit digit3 Через#сколько#секунд#включить? Таймеры 5 17 button 6 na Включится#по#таймеру Таймеры 0 18 -inputTime time1 Во#сколько#включить? Таймеры 20.30 19 +inputTime time1 Во#сколько#включить? Таймеры 20-30-00 19 button 7 5 Включится#по#таймеру Таймеры 0 20 //--------------------------------------------------------------------- switch 1 0 20 -textSet 1 неопределено -text 1 Квартира Двери 22 +text 1 Вход: Охрана 20 +textSet 1 не#обнаружено-time +button 8 na Сбросить Охрана 0 21 //--------------------------------------------------------------------- -button 8 scenario Вкл#выкл#все#сценарии Сценарии 1 23 -button 9 line1,line2, Вкл#выкл#выбранные#сценарии Сценарии 1 24 \ No newline at end of file +button 9 scenario Вкл#выкл#все#сценарии Сценарии 1 23 +button 10 line1,line2, Вкл#выкл#выбранные#сценарии Сценарии 1 24 \ No newline at end of file diff --git a/data/configs/firmware.scenario.txt b/data/configs/firmware.scenario.txt index 5e31ed48..5a4f387d 100644 --- a/data/configs/firmware.scenario.txt +++ b/data/configs/firmware.scenario.txt @@ -24,9 +24,10 @@ timenow = time1 buttonSet 7 1 end switch1 = 1 -textSet 1 закрыто-time -push закрыто вход +textSet 1 обнаружено#движение-time +push Внимание обнаружено#движение! end -switch1 = 0 -textSet 1 открыто-time +button8 = 1 +textSet 1 не#обнаружено-time +buttonSet 8 0 end \ No newline at end of file diff --git a/data/configs/level.config.txt b/data/configs/level.config.txt new file mode 100644 index 00000000..c86567c7 --- /dev/null +++ b/data/configs/level.config.txt @@ -0,0 +1,10 @@ +level Вода#в#баке,#% Датчики any-data 125 20 1 +inputDigit digit1 При#скольки#выключить? Датчики 95 2 +inputDigit digit2 При#скольки#включить? Датчики 10 3 +button 1 5 Насос Датчики 0 4 +button 2 line1,line2, Автоматический#режим Датчики 1 5 + +//125 - это расстояние от датчика до дна бака в сантиметрах +//20 - это расстояние от датчика до поверхности воды когда бак полный в сантиметрах +//вывод данных будет в процентах заполнения бака +//варианты отображения: any-data, progress-round, progress-line \ No newline at end of file diff --git a/data/configs/level.scenario.txt b/data/configs/level.scenario.txt new file mode 100644 index 00000000..5950baaa --- /dev/null +++ b/data/configs/level.scenario.txt @@ -0,0 +1,6 @@ +level > digit1 +buttonSet 1 0 +end +level < digit2 +buttonSet 1 1 +end \ No newline at end of file diff --git a/data/configs/moution_r.config.txt b/data/configs/moution_r.config.txt new file mode 100644 index 00000000..fa0b78ac --- /dev/null +++ b/data/configs/moution_r.config.txt @@ -0,0 +1,11 @@ +button 1 5 Прихожая Освещение 0 1 +inputDigit digit1 Задержка#выключения Освещение 30 2 +switch 1 0 10 + +//0 - номер пина датчика движения +//5 - номер пина реле +//при срабатывании датчика движения включится реле и обратный таймер на 30 сек +//если движение не будет обнаружено повтороно в течении 30 секунд - свет выключится +//если движение повторится в течении 30 секунд то таймер продлится опять на 30 сек +//свет выключится только в том случае если в комнате все замрет на 30 сек +//задержку выключения можно будет настраивать в приложении \ No newline at end of file diff --git a/data/configs/moution_r.scenario.txt b/data/configs/moution_r.scenario.txt new file mode 100644 index 00000000..899b7035 --- /dev/null +++ b/data/configs/moution_r.scenario.txt @@ -0,0 +1,7 @@ +switch1 = 1 +timerStart 1 digit1 sec +buttonSet 1 1 +end +timer1 = 0 +buttonSet 1 0 +end \ No newline at end of file diff --git a/data/configs/moution_s.config.txt b/data/configs/moution_s.config.txt new file mode 100644 index 00000000..1b0395e3 --- /dev/null +++ b/data/configs/moution_s.config.txt @@ -0,0 +1,10 @@ +switch 1 0 20 +text 1 Вход: Охрана 1 +textSet 1 не#обнаружено-time +button 1 na Сбросить Охрана 0 2 + +//0 - номер пина датчика +//при срабатывании датчика движения устройство пошлет пуш и в приложении будет +//написано в текстовом поле, что движение было обнаружено, так же будет зафиксирован +//момент времени срабатывания датчика +//перевести датчик снова в режим ожидания движения можно нажав кнопку сброса в приложении \ No newline at end of file diff --git a/data/configs/moution_s.scenario.txt b/data/configs/moution_s.scenario.txt new file mode 100644 index 00000000..8a99cb60 --- /dev/null +++ b/data/configs/moution_s.scenario.txt @@ -0,0 +1,8 @@ +switch1 = 1 +textSet 1 обнаружено#движение-time +push Внимание обнаружено#движение! +end +button1 = 1 +textSet 1 не#обнаружено-time +buttonSet 1 0 +end \ No newline at end of file diff --git a/data/configs/pwm.config.txt b/data/configs/pwm.config.txt new file mode 100644 index 00000000..09eef72c --- /dev/null +++ b/data/configs/pwm.config.txt @@ -0,0 +1,6 @@ +pwm 1 3 Яркость#коредор: Реле 1023 1 +pwm 2 4 Яркость#ванная: Реле 510 2 + +//в приложении появятся ползунки, соответствующее значение pwm +//будет установленно на пинах 3 и 4 +//1023 и 510 это начальные значения после загрузки модуля \ No newline at end of file diff --git a/data/configs/pwm.scenario.txt b/data/configs/pwm.scenario.txt new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/data/configs/pwm.scenario.txt @@ -0,0 +1 @@ + diff --git a/data/configs/relay.config.txt b/data/configs/relay.config.txt index 62e0f234..733f4c95 100644 --- a/data/configs/relay.config.txt +++ b/data/configs/relay.config.txt @@ -1 +1,3 @@ -button 1 5 Включить#реле Реле 0 1 \ No newline at end of file +button 1 5 Включить#реле Реле 0 1 + +//это простая кнопка номер 1 управляющая пином 5 имеющая начальное состояние 0 \ No newline at end of file diff --git a/data/configs/relay_br.config.txt b/data/configs/relay_br.config.txt index 051c96e2..db812455 100644 --- a/data/configs/relay_br.config.txt +++ b/data/configs/relay_br.config.txt @@ -1 +1,6 @@ -button 1 5 Включить#все Реле 0 1 \ No newline at end of file +button 1 5 Включить#все Реле 0 1 + + +//что бы использовать эту конфигурацию на другой esp необходимо активировать пресет +//"Вкл. выкл. локального реле", затем в сценарии данного модуля подставить Device ID +//того esp, кнопка на этом девайсе будет выключать другие устройства по воздуху \ No newline at end of file diff --git a/data/configs/relay_c.config.txt b/data/configs/relay_c.config.txt index 1a2553a3..9f0c5c45 100644 --- a/data/configs/relay_c.config.txt +++ b/data/configs/relay_c.config.txt @@ -1,2 +1,4 @@ button 1 5 Вкл#на#время Таймеры 0 1 -inputDigit digit1 Через#сколько#секунд#выключить? Таймеры 5 2 \ No newline at end of file +inputDigit digit1 Через#сколько#секунд#выключить? Таймеры 5 2 + +//в сценариях можно поменять на sec, min или hours если нужны другие размерности времени \ No newline at end of file diff --git a/data/configs/relay_rm.config.txt b/data/configs/relay_rm.config.txt index bc49233e..92abc26d 100644 --- a/data/configs/relay_rm.config.txt +++ b/data/configs/relay_rm.config.txt @@ -1 +1,3 @@ -switch 1 0 10 \ No newline at end of file +switch 1 0 10 + +//физическая кнопка номер 1 подключенная к пину 0, задержка от дребезга 10 мс \ No newline at end of file diff --git a/data/configs/relay_s.config.txt b/data/configs/relay_s.config.txt index fab26af7..b0978b0d 100644 --- a/data/configs/relay_s.config.txt +++ b/data/configs/relay_s.config.txt @@ -1 +1,3 @@ -button 1 na Включить#все Освещение 0 1 \ No newline at end of file +button 1 na Включить#все Освещение 0 1 + +//при нажатии на эту кнопку пины номер 5 и 13 поведут себя как установленно в сценариях \ No newline at end of file diff --git a/data/configs/relay_sr.config.txt b/data/configs/relay_sr.config.txt index bc49233e..739a1424 100644 --- a/data/configs/relay_sr.config.txt +++ b/data/configs/relay_sr.config.txt @@ -1 +1,6 @@ -switch 1 0 10 \ No newline at end of file +switch 1 0 10 + +//что бы использовать эту конфигурацию на другой esp необходимо активировать пресет +//"Вкл. выкл. локального реле", затем в сценарии данного модуля подставить Device ID +//того esp, к данному модулю нужно подключить кнопку к пину 0 и тогда +//один девайс будет управлять другим по воздуху \ No newline at end of file diff --git a/data/configs/relay_sw.config.txt b/data/configs/relay_sw.config.txt index 9156708c..5ef7e5f5 100644 --- a/data/configs/relay_sw.config.txt +++ b/data/configs/relay_sw.config.txt @@ -1,2 +1,4 @@ button 1 13 Включить#реле Реле 0 1 -switch 1 0 10 \ No newline at end of file +switch 1 0 10 + +//можно управлять реле на пине 13 кнопкой на пине 0 или кнопкой в приложении \ No newline at end of file diff --git a/data/configs/relay_t.config.txt b/data/configs/relay_t.config.txt index 0d7e58a1..1e54f5dd 100644 --- a/data/configs/relay_t.config.txt +++ b/data/configs/relay_t.config.txt @@ -1,3 +1,6 @@ -inputTime time1 Во#сколько#включить? Таймеры 20.30 1 -inputTime time2 Во#сколько#выключить? Таймеры 20.35 2 -button 1 5 Включится#по#таймеру Таймеры 0 3 \ No newline at end of file +inputTime time1 Во#сколько#включить? Таймеры 20-30-00 1 +inputTime time2 Во#сколько#выключить? Таймеры 20-35-00 2 +button 1 5 Кнопка#(по#таймеру) Таймеры 0 3 + +//время в приложение необходимо вводить в строгом формате: ЧЧ-ММ-СС +//можно создавать любое количество таймеров, копируя строку inputTime... \ No newline at end of file diff --git a/data/configs/termostat.config.txt b/data/configs/termostat.config.txt index 96537d82..70de213c 100644 --- a/data/configs/termostat.config.txt +++ b/data/configs/termostat.config.txt @@ -1,4 +1,12 @@ dallas 2 Водонагреватель,#t°C Термостат any-data 1 -inputDigit digit1 При#скольки#включить? Термостат 40 2 -inputDigit digit2 При#скольки#выключить? Термостат 20 3 -button 1 5 Нагреватель Термостат 0 4 \ No newline at end of file +inputDigit digit1 При#скольки#выключить? Термостат 40 2 +inputDigit digit2 При#скольки#включить? Термостат 20 3 +button 1 5 Нагреватель Термостат 0 4 +button 2 line1,line2, Автоматический#режим Термостат 1 5 + + +//2 - номер пина датчика +//5 - номер пина реле +//это термостат который будет держать температуру между двумя +//установленными в приложении значениями, так же можно выключить +//автоматический режим, и тогда нагреватель будет управляться в ручную \ No newline at end of file diff --git a/data/configs/termostat.scenario.txt b/data/configs/termostat.scenario.txt index f3c03f1b..60782623 100644 --- a/data/configs/termostat.scenario.txt +++ b/data/configs/termostat.scenario.txt @@ -1,6 +1,6 @@ dallas > digit1 -buttonSet 1 1 +buttonSet 1 0 end dallas < digit2 -buttonSet 1 0 +buttonSet 1 1 end \ No newline at end of file diff --git a/data/configuration.json b/data/configuration.json index de86d685..843e77e1 100644 --- a/data/configuration.json +++ b/data/configuration.json @@ -4,6 +4,7 @@ "/config.live.json", "/config.setup.json", "/config.option.json" + ], "class":"col-sm-offset-1 col-sm-10", "content": [ @@ -29,115 +30,30 @@ }, { - "type": "h2", - "title": "Чтобы превратить ESP во что либо из списка, нажмите на соответствующию кнопку:" - }, - { - "type": "h4", - "title": "Раздел 1. Управление нагрузкой" - }, - { - "type": "button", - "title": "Вкл. выкл. локального реле", - "action": "/relay", - "class": "btn btn-block btn-primary" - }, - { - "type": "button", - "title": "Вкл. выкл. локального реле в определенное время", - "action": "/relay_timer", - "class": "btn btn-block btn-primary" - }, - { - "type": "button", - "title": "Вкл. выкл. локального реле на определенный период времени", - "action": "/relay_countdown", - "class": "btn btn-block btn-primary" - }, - { - "type": "button", - "title": "Вкл. выкл. нескольких локальных реле кнопкой в приложении", - "action": "/relay_several", - "class": "btn btn-block btn-primary" - }, - { - "type": "button", - "title": "Вкл. выкл. локального реле физической кнопкой (кнопка так же дублируется в приложении)", - "action": "/relay_switch", - "class": "btn btn-block btn-primary" - }, - { - "type": "button", - "title": "Вкл. выкл. нескольких удаленных реле кнопкой в приложении (нужно указать Device ID)", - "action": "/relay_button_remote", - "class": "btn btn-block btn-primary" - }, - { - "type": "button", - "title": "Вкл. выкл. нескольких удаленных реле физической кнопкой (нужно указать Device ID)", - "action": "/relay_switch_remote", - "class": "btn btn-block btn-primary" - }, - { - "type": "h4", - "title": "Раздел 2. Сенсоры" - }, - { - "type": "button", - "title": "Сенсор DHT11", - "action": "/dht11", - "class": "btn btn-block btn-primary" - }, - { - "type": "button", - "title": "Сенсор DHT22, DHT33, DHT44, AM2302, RHT03", - "action": "/dht22", - "class": "btn btn-block btn-primary" - }, - { - "type": "button", - "title": "Сенсор DS18B20", - "action": "/dallas", - "class": "btn btn-block btn-primary" - }, - { - "type": "button", - "title": "Термостат на DS18B20", - "action": "/termostat", - "class": "btn btn-block btn-primary" - }, - { - "type": "button", - "title": "Датчик движения включающий свет", - "action": "/moution-relay", - "class": "btn btn-block btn-primary" - }, - { - "type": "button", - "title": "Охранный датчик движения", - "action": "/moution-security", - "class": "btn btn-block btn-primary" - }, - { - "type": "button", - "title": "Выключатель", - "action": "/switch", - "class": "btn btn-block btn-primary" - }, - - - { - "type": "hr" - }, - { - "type": "button", - "title": "Сбросить сценарии и конфигурации по умолчанию", - "action": "/default", - "class": "btn btn-block btn-danger" - }, - - { - "type": "hr" + "type":"dropdown", + "name":"help-url", + "class":"btn btn-warning btn-lg", + "style":"display:inline", + "title": { + "#":"Выбирите то, во что Вы хотите превратить ESP ", + "/relay":"Вкл. выкл. локального реле", + "/relay_timer":"Вкл. выкл. локального реле в определенное время", + "/relay_countdown":"Вкл. выкл. локального реле на определенный период времени", + "/relay_several":"Вкл. выкл. нескольких локальных реле кнопкой в приложении", + "/relay_switch":"Вкл. выкл. локального реле физической кнопкой (кнопка так же дублируется в приложении)", + "/relay_button_remote":"Вкл. выкл. нескольких удаленных реле кнопкой в приложении (нужно указать Device ID)", + "/relay_switch_remote":"Вкл. выкл. нескольких удаленных реле физической кнопкой (нужно указать Device ID)", + "/pwm":"Широтно импульсная модуляция", + "/dht11":"Сенсор DHT11", + "/dht22":"Сенсор DHT22, DHT33, DHT44, AM2302, RHT03", + "/analog":"Аналоговый сенсор", + "/dallas":"Сенсор DS18B20", + "/termostat":"Термостат на DS18B20 с переключением в ручной режим", + "/level":"Контроль уровня в баке на сенсорах: JSN-SR04T, HC-SR04, HY-SRF05 (управление насосом)", + "/moution_relay":"Датчик движения включающий свет", + "/moution_security":"Охранный датчик движения", + "/default":"Настройки по умолчанию" + } }, { "type": "h2", @@ -180,71 +96,6 @@ "action": "/scenario?status=1", "class":"btn btn-block btn-success" }, - { - "type": "hr" - }, - -{ - "type": "h2", -"title": "Данные модулей" - }, -{ - "type": "hr" - }, -{ - "type": "h4", - "title": "Модуль уровня воды (level)", -"style": "width:100%" - }, - - { - "type": "h6", - "title": "Расстояние от датчика до воды: {{level_in}} см" - }, -{ - "type": "h6", - "title": " Заполнение бака: {{level}} %" - }, -{ - "type": "hr" - }, -{ - "type": "h4", - "title": "Модуль аналогового входа (analog)", -"style": "width:100%" - }, -{ - "type": "h6", - "title": "Прочитанное значение: {{analog_in}}" - }, -{ - "type": "h6", - "title": "Преобразованное значение: {{analog}}" - }, - { - "type": "hr" - }, -{ - "type": "h4", - "title": "Модуль температурного датчика (dallas)", -"style": "width:100%" - }, -{ - "type": "h6", - "title": "Текущее значение: {{dallas}} °C" - }, -{ - "type": "hr" - }, -{ - "type": "h4", - "title": "Модуль pH сенсора от df robot (ph)", -"style": "width:100%" - }, -{ - "type": "h6", - "title": "Текущее значение: {{ph}}" - }, { "type": "hr" }, diff --git a/data/edit.htm b/data/edit.htm new file mode 100644 index 00000000..5e2f46ce --- /dev/null +++ b/data/edit.htm @@ -0,0 +1,572 @@ + + +
+