From 5eb3c6d3a379205b219f13c1fbda8bfcf596e755 Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko <49808844+DmitryBorisenko33@users.noreply.github.com> Date: Mon, 4 Jan 2021 00:39:35 +0100 Subject: [PATCH] first --- .gitignore | 7 + .vscode/extensions.json | 7 + data/config.json | 37 + data/css/build.css.gz | Bin 0 -> 15958 bytes data/dev_conf.txt | 0 data/edit.htm.gz | Bin 0 -> 5455 bytes data/favicon.ico | Bin 0 -> 1150 bytes data/index.htm.gz | Bin 0 -> 2008 bytes data/index.json.gz | Bin 0 -> 543 bytes data/items/items.txt | 25 + data/js/build.chart.js.gz | Bin 0 -> 12758 bytes data/js/function.js.gz | Bin 0 -> 19540 bytes data/lang/lang.ru.json | 39 + data/presets/presets.c.txt | 47 + data/presets/presets.s.txt | 84 + data/s.conf.csv | 1 + data/s.scen.txt | 1 + data/set.dev.json.gz | Bin 0 -> 618 bytes data/set.device.json.gz | Bin 0 -> 2682 bytes data/set.manual.json.gz | Bin 0 -> 340 bytes data/set.mqtt.json.gz | Bin 0 -> 978 bytes data/set.telegram.json.gz | Bin 0 -> 907 bytes data/set.udp.json.gz | Bin 0 -> 665 bytes data/set.utilities.json.gz | Bin 0 -> 623 bytes data/set.wifi.json.gz | Bin 0 -> 1026 bytes data/widgets/alarm.json | 6 + data/widgets/anydata.json | 5 + data/widgets/anydataAlarm.json | 6 + data/widgets/anydataHum.json | 5 + data/widgets/anydataPress.json | 5 + data/widgets/anydataTemp.json | 5 + data/widgets/anydataTime.json | 5 + data/widgets/btn.json | 6 + data/widgets/chart.json | 5 + data/widgets/chart2.json | 4 + data/widgets/fillgauge.json | 7 + data/widgets/inputDate.json | 6 + data/widgets/inputDigit.json | 5 + data/widgets/inputDigitTemp.json | 7 + data/widgets/inputText.json | 6 + data/widgets/inputTime.json | 5 + data/widgets/inputTimeClock.json | 7 + data/widgets/progress-line.json | 12 + data/widgets/progress-round.json | 11 + data/widgets/range.json | 9 + data/widgets/select.json | 8 + data/widgets/toggle.json | 5 + data/widgets/toggleSunMoon.json | 5 + data_ungzip/index.json | 64 + data_ungzip/set.dev.json | 75 + data_ungzip/set.device.json | 261 +++ data_ungzip/set.manual.json | 38 + data_ungzip/set.mqtt.json | 217 +++ data_ungzip/set.telegram.json | 103 ++ data_ungzip/set.udp.json | 96 ++ data_ungzip/set.utilities.json | 109 ++ data_ungzip/set.wifi.json | 191 +++ doc/calculator.xlsx | Bin 0 -> 99742 bytes doc/conf/c001.txt | 3 + doc/conf/c002.txt | 6 + doc/conf/c003.txt | 4 + doc/conf/c004.txt | 3 + doc/conf/c005.txt | 4 + doc/conf/c006.txt | 6 + doc/conf/c007.txt | 6 + doc/conf/c008.txt | 6 + doc/conf/c009.txt | 7 + doc/conf/c010.txt | 7 + doc/conf/c011.txt | 8 + doc/conf/c012.txt | 6 + doc/conf/c013.txt | 9 + doc/conf/c014.txt | 7 + doc/conf/c015.txt | 12 + doc/conf/c016.txt | 12 + doc/conf/c017.txt | 11 + doc/conf/c018.txt | 12 + doc/conf/c019.txt | 17 + doc/conf/c020.txt | 17 + doc/conf/c021.txt | 7 + doc/conf/c100.txt | 12 + doc/conf/s001.txt | 1 + doc/conf/s002.txt | 6 + doc/conf/s003.txt | 6 + doc/conf/s004.txt | 8 + doc/conf/s005.txt | 3 + doc/conf/s006.txt | 8 + doc/conf/s007.txt | 4 + doc/conf/s008.txt | 1 + doc/conf/s009.txt | 1 + doc/conf/s010.txt | 1 + doc/conf/s011.txt | 1 + doc/conf/s012.txt | 1 + doc/conf/s013.txt | 1 + doc/conf/s014.txt | 1 + doc/conf/s015.txt | 6 + doc/conf/s016.txt | 6 + doc/conf/s017.txt | 7 + doc/conf/s018.txt | 10 + doc/conf/s019.txt | 12 + doc/conf/s020.txt | 12 + doc/conf/s021.txt | 6 + doc/conf/s100.txt | 13 + doc/eagle.txt | 24 + doc/old files/items/analog-adc.txt | 1 + doc/old files/items/bme280-hum.txt | 1 + doc/old files/items/bme280-press.txt | 1 + doc/old files/items/bme280-temp.txt | 1 + doc/old files/items/bmp280-press.txt | 1 + doc/old files/items/bmp280-temp.txt | 1 + doc/old files/items/button-in.txt | 1 + doc/old files/items/button-out.inv.txt | 1 + doc/old files/items/button-out.npin.txt | 1 + doc/old files/items/button-out.pin.txt | 1 + doc/old files/items/count-down.txt | 1 + doc/old files/items/dallas-temp.txt | 1 + doc/old files/items/dht11-hum.txt | 1 + doc/old files/items/dht11-temp.txt | 1 + doc/old files/items/dht22-hum.txt | 1 + doc/old files/items/dht22-temp.txt | 1 + doc/old files/items/impuls-out.txt | 1 + doc/old files/items/input-digit.txt | 1 + doc/old files/items/input-time.txt | 1 + doc/old files/items/logging.txt | 1 + doc/old files/items/modbus.txt | 1 + doc/old files/items/output-text.txt | 1 + doc/old files/items/pwm-out.txt | 1 + doc/old files/items/uart-button.txt | 1 + doc/old files/items/uart-widget.txt | 1 + doc/old files/items/ultrasonic-cm.txt | 1 + doc/old files/items/uptime.txt | 1 + doc/old files/presets/1.c.txt | 5 + doc/old files/presets/1.s.txt | 8 + doc/old files/presets/2.c.txt | 12 + doc/old files/presets/2.s.txt | 18 + doc/old files/presets/3.c.txt | 5 + doc/old files/presets/3.s.txt | 8 + doc/old files/presets/4.c.txt | 4 + doc/old files/presets/4.s.txt | 8 + doc/old files/presets/5.c.txt | 7 + doc/old files/presets/5.s.txt | 16 + doc/old files/presets/6.c.txt | 3 + doc/old files/presets/6.s.txt | 6 + doc/old files/presets/7.c.txt | 4 + doc/old files/presets/7.s.txt | 10 + doc/old files/presets/8.c.txt | 4 + doc/old files/presets/8.s.txt | 7 + doc/old files/presets/9.c.txt | 2 + doc/old files/presets/9.s.txt | 3 + doc/orders.xlsm | Bin 0 -> 34601 bytes doc/pictures/001 iot manager.jpeg | Bin 0 -> 21218 bytes doc/pictures/002 iot manager.jpeg | Bin 0 -> 29441 bytes doc/pictures/003 iot manager.jpeg | Bin 0 -> 32790 bytes doc/pictures/007 iot manager.jpg | Bin 0 -> 390182 bytes include/BufferExecute.h | 35 + include/Bus.h | 4 + include/Class/CallBackTest.h | 26 + include/Class/LineParsing.h | 253 +++ include/Class/NotAsync.h | 32 + include/Class/ScenarioClass3.h | 85 + include/Clock.h | 168 ++ include/Cmd.h | 64 + include/Consts.h | 127 ++ include/ESP32.h | 26 + include/ESP8266.h | 18 + include/FSEditor.h | 29 + include/FileSystem.h | 36 + include/Global.h | 152 ++ include/HttpServer.h | 9 + include/Init.h | 10 + include/ItemsList.h | 16 + include/Macro.h | 9 + include/MqttClient.h | 27 + include/MqttDiscovery.h | 8 + include/RemoteOrdersUdp.h | 9 + include/SSDP.h | 9 + include/Sensors.h | 3 + include/Servo/Servos.h | 29 + include/SoftUART.h | 18 + include/Strings_.h | 139 ++ include/Telegram.h | 13 + include/Tests.h | 3 + include/Upgrade.h | 10 + include/Utils/FileHelper.h | 46 + include/Utils/FileUtils.h | 62 + include/Utils/JsonUtils.h | 21 + include/Utils/SerialPrint.h | 3 + include/Utils/StringUtils.h | 34 + include/Utils/SysUtils.h | 19 + include/Utils/TimeUtils.h | 69 + include/Utils/Timings.h | 71 + include/Utils/WebUtils.h | 7 + include/Utils/WiFiUtils.h | 16 + include/Utils/statUtils.h | 22 + include/Web.h | 6 + include/items/ButtonInClass.h | 61 + include/items/PZEMSensor.cpp | 309 ++++ include/items/PZEMSensor.h | 51 + include/items/SensorPower.h | 32 + include/items/vButtonOut.h | 31 + include/items/vCountDown.h | 34 + include/items/vImpulsOut.h | 31 + include/items/vInOutput.h | 27 + include/items/vLogging.h | 39 + include/items/vPwmOut.h | 31 + include/items/vSensorAnalog.h | 41 + include/items/vSensorBme280.h | 39 + include/items/vSensorBmp280.h | 38 + include/items/vSensorDallas.h | 37 + include/items/vSensorDht.h | 40 + include/items/vSensorUltrasonic.h | 44 + lib/ESP8266-StringCommand/StringCommand.cpp | 137 ++ lib/ESP8266-StringCommand/StringCommand.h | 77 + lib/ESP8266-StringCommand/keywords.txt | 23 + lib/ESP8266-StringCommand/readme.md | 5 + .../scripts/install-arduino-core-esp32.sh | 36 + .../scripts/install-arduino-core-esp8266.sh | 29 + .../.github/scripts/install-arduino-ide.sh | 228 +++ .../.github/scripts/install-platformio.sh | 140 ++ .../.github/scripts/on-push.sh | 71 + lib/ESPAsyncWebServer/.github/stale.yml | 31 + .../.github/workflows/push.yml | 34 + lib/ESPAsyncWebServer/.gitignore | 2 + lib/ESPAsyncWebServer/.travis.yml | 46 + lib/ESPAsyncWebServer/CMakeLists.txt | 17 + lib/ESPAsyncWebServer/README.md | 1521 +++++++++++++++++ lib/ESPAsyncWebServer/_config.yml | 1 + lib/ESPAsyncWebServer/component.mk | 3 + .../examples/CaptivePortal/CaptivePortal.ino | 47 + .../ESP_AsyncFSBrowser/ESP_AsyncFSBrowser.ino | 221 +++ .../ESP_AsyncFSBrowser/data/.exclude.files | 2 + .../ESP_AsyncFSBrowser/data/ace.js.gz | Bin 0 -> 98943 bytes .../data/ext-searchbox.js.gz | Bin 0 -> 3131 bytes .../ESP_AsyncFSBrowser/data/favicon.ico | Bin 0 -> 1150 bytes .../ESP_AsyncFSBrowser/data/index.htm | 131 ++ .../ESP_AsyncFSBrowser/data/mode-css.js.gz | Bin 0 -> 6102 bytes .../ESP_AsyncFSBrowser/data/mode-html.js.gz | Bin 0 -> 17037 bytes .../data/mode-javascript.js.gz | Bin 0 -> 6315 bytes .../ESP_AsyncFSBrowser/data/worker-html.js.gz | Bin 0 -> 50024 bytes .../examples/regex_patterns/.test.build_flags | 1 + .../regex_patterns/regex_patterns.ino | 77 + .../examples/simple_server/simple_server.ino | 74 + lib/ESPAsyncWebServer/keywords.txt | 3 + lib/ESPAsyncWebServer/library.json | 33 + lib/ESPAsyncWebServer/library.properties | 9 + .../src/AsyncEventSource.cpp | 368 ++++ lib/ESPAsyncWebServer/src/AsyncEventSource.h | 133 ++ lib/ESPAsyncWebServer/src/AsyncJson.h | 252 +++ lib/ESPAsyncWebServer/src/AsyncWebSocket.cpp | 1303 ++++++++++++++ lib/ESPAsyncWebServer/src/AsyncWebSocket.h | 350 ++++ .../src/AsyncWebSynchronization.h | 87 + lib/ESPAsyncWebServer/src/ESPAsyncWebServer.h | 501 ++++++ lib/ESPAsyncWebServer/src/SPIFFSEditor.cpp | 544 ++++++ lib/ESPAsyncWebServer/src/SPIFFSEditor.h | 29 + lib/ESPAsyncWebServer/src/StringArray.h | 193 +++ .../src/WebAuthentication.cpp | 235 +++ lib/ESPAsyncWebServer/src/WebAuthentication.h | 34 + lib/ESPAsyncWebServer/src/WebHandlerImpl.h | 138 ++ lib/ESPAsyncWebServer/src/WebHandlers.cpp | 220 +++ lib/ESPAsyncWebServer/src/WebRequest.cpp | 1008 +++++++++++ lib/ESPAsyncWebServer/src/WebResponseImpl.h | 136 ++ lib/ESPAsyncWebServer/src/WebResponses.cpp | 699 ++++++++ lib/ESPAsyncWebServer/src/WebServer.cpp | 193 +++ lib/ESPAsyncWebServer/src/edit.htm | 627 +++++++ .../examples/GFilterRA/GFilterRA.ino | 16 + .../GLinear_arrays/GLinear_arrays.ino | 32 + .../examples/GLinear_arrays/excel.jpg | Bin 0 -> 48954 bytes .../GLinear_running/GLinear_running.ino | 34 + .../alphabeta_example/alphabeta_example.ino | 24 + .../filters_comparsion/filters_comparsion.ino | 30 + .../kalman_example/kalman_example.ino | 31 + .../median3_example/median3_example.ino | 21 + .../median_example/median_example.ino | 23 + lib/GyverFilters/keywords.txt | 28 + lib/GyverFilters/library.properties | 9 + lib/GyverFilters/src/GyverFilters.h | 28 + lib/GyverFilters/src/filters/alfaBeta.h | 37 + lib/GyverFilters/src/filters/kalman.h | 38 + lib/GyverFilters/src/filters/linear.h | 49 + lib/GyverFilters/src/filters/median.h | 35 + lib/GyverFilters/src/filters/median3.h | 30 + .../src/filters/runningAverage.cpp | 43 + lib/GyverFilters/src/filters/runningAverage.h | 24 + lib/README | 46 + lib/TickerScheduler/README.md | 81 + lib/TickerScheduler/TickerScheduler.cpp | 116 ++ lib/TickerScheduler/TickerScheduler.h | 91 + .../example/blink/blink/blink.ino | 29 + partitions_custom.csv | 6 + platformio.ini | 94 + src/BufferExecute.cpp | 166 ++ src/Bus.cpp | 41 + src/Class/CallBackTest.cpp | 49 + src/Class/LineParsing.cpp | 2 + src/Class/NotAsync.cpp | 30 + src/Class/ScenarioClass3.cpp | 33 + src/Clock.cpp | 16 + src/FSEditor.cpp | 334 ++++ src/FileSystem.cpp | 39 + src/Global.cpp | 79 + src/Init.cpp | 134 ++ src/ItemsList.cpp | 186 ++ src/MqttClient.cpp | 378 ++++ src/RemoteOrdersUdp.cpp | 110 ++ src/SSDP.cpp | 63 + src/Servo/Servs.cpp | 40 + src/SoftUART.cpp | 57 + src/Telegram.cpp | 121 ++ src/Tests.cpp | 18 + src/UpgradeFirm.cpp | 136 ++ src/Utils/FileUtils.cpp | 183 ++ src/Utils/JsonUtils.cpp | 60 + src/Utils/SerialPrint.cpp | 9 + src/Utils/StringUtils.cpp | 136 ++ src/Utils/SysUtils.cpp | 250 +++ src/Utils/TimeUtils.cpp | 237 +++ src/Utils/WebUtils.cpp | 92 + src/Utils/WiFiUtils.cpp | 173 ++ src/Utils/statUtils.cpp | 316 ++++ src/Web.cpp | 397 +++++ src/WebServer.cpp | 208 +++ src/Widgets.cpp | 92 + src/items/ButtonInClass.cpp | 25 + src/items/SensorPower.cpp | 31 + src/items/sysUptime.cpp | 20 + src/items/vButtonOut.cpp | 80 + src/items/vCountDown.cpp | 77 + src/items/vImpulsOut.cpp | 69 + src/items/vInOutput.cpp | 79 + src/items/vLogging.cpp | 190 ++ src/items/vPwmOut.cpp | 60 + src/items/vSensorAnalog.cpp | 70 + src/items/vSensorBme280.cpp | 100 ++ src/items/vSensorBmp280.cpp | 86 + src/items/vSensorDallas.cpp | 54 + src/items/vSensorDht.cpp | 94 + src/items/vSensorUltrasonic.cpp | 89 + src/main.cpp | 156 ++ tools/littlefsbuilder.py | 2 + tools/mklittlefs.exe | Bin 0 -> 982528 bytes 339 files changed, 21164 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/extensions.json create mode 100644 data/config.json create mode 100644 data/css/build.css.gz create mode 100644 data/dev_conf.txt create mode 100644 data/edit.htm.gz create mode 100644 data/favicon.ico create mode 100644 data/index.htm.gz create mode 100644 data/index.json.gz create mode 100644 data/items/items.txt create mode 100644 data/js/build.chart.js.gz create mode 100644 data/js/function.js.gz create mode 100644 data/lang/lang.ru.json create mode 100644 data/presets/presets.c.txt create mode 100644 data/presets/presets.s.txt create mode 100644 data/s.conf.csv create mode 100644 data/s.scen.txt create mode 100644 data/set.dev.json.gz create mode 100644 data/set.device.json.gz create mode 100644 data/set.manual.json.gz create mode 100644 data/set.mqtt.json.gz create mode 100644 data/set.telegram.json.gz create mode 100644 data/set.udp.json.gz create mode 100644 data/set.utilities.json.gz create mode 100644 data/set.wifi.json.gz create mode 100644 data/widgets/alarm.json create mode 100644 data/widgets/anydata.json create mode 100644 data/widgets/anydataAlarm.json create mode 100644 data/widgets/anydataHum.json create mode 100644 data/widgets/anydataPress.json create mode 100644 data/widgets/anydataTemp.json create mode 100644 data/widgets/anydataTime.json create mode 100644 data/widgets/btn.json create mode 100644 data/widgets/chart.json create mode 100644 data/widgets/chart2.json create mode 100644 data/widgets/fillgauge.json create mode 100644 data/widgets/inputDate.json create mode 100644 data/widgets/inputDigit.json create mode 100644 data/widgets/inputDigitTemp.json create mode 100644 data/widgets/inputText.json create mode 100644 data/widgets/inputTime.json create mode 100644 data/widgets/inputTimeClock.json create mode 100644 data/widgets/progress-line.json create mode 100644 data/widgets/progress-round.json create mode 100644 data/widgets/range.json create mode 100644 data/widgets/select.json create mode 100644 data/widgets/toggle.json create mode 100644 data/widgets/toggleSunMoon.json create mode 100644 data_ungzip/index.json create mode 100644 data_ungzip/set.dev.json create mode 100644 data_ungzip/set.device.json create mode 100644 data_ungzip/set.manual.json create mode 100644 data_ungzip/set.mqtt.json create mode 100644 data_ungzip/set.telegram.json create mode 100644 data_ungzip/set.udp.json create mode 100644 data_ungzip/set.utilities.json create mode 100644 data_ungzip/set.wifi.json create mode 100644 doc/calculator.xlsx create mode 100644 doc/conf/c001.txt create mode 100644 doc/conf/c002.txt create mode 100644 doc/conf/c003.txt create mode 100644 doc/conf/c004.txt create mode 100644 doc/conf/c005.txt create mode 100644 doc/conf/c006.txt create mode 100644 doc/conf/c007.txt create mode 100644 doc/conf/c008.txt create mode 100644 doc/conf/c009.txt create mode 100644 doc/conf/c010.txt create mode 100644 doc/conf/c011.txt create mode 100644 doc/conf/c012.txt create mode 100644 doc/conf/c013.txt create mode 100644 doc/conf/c014.txt create mode 100644 doc/conf/c015.txt create mode 100644 doc/conf/c016.txt create mode 100644 doc/conf/c017.txt create mode 100644 doc/conf/c018.txt create mode 100644 doc/conf/c019.txt create mode 100644 doc/conf/c020.txt create mode 100644 doc/conf/c021.txt create mode 100644 doc/conf/c100.txt create mode 100644 doc/conf/s001.txt create mode 100644 doc/conf/s002.txt create mode 100644 doc/conf/s003.txt create mode 100644 doc/conf/s004.txt create mode 100644 doc/conf/s005.txt create mode 100644 doc/conf/s006.txt create mode 100644 doc/conf/s007.txt create mode 100644 doc/conf/s008.txt create mode 100644 doc/conf/s009.txt create mode 100644 doc/conf/s010.txt create mode 100644 doc/conf/s011.txt create mode 100644 doc/conf/s012.txt create mode 100644 doc/conf/s013.txt create mode 100644 doc/conf/s014.txt create mode 100644 doc/conf/s015.txt create mode 100644 doc/conf/s016.txt create mode 100644 doc/conf/s017.txt create mode 100644 doc/conf/s018.txt create mode 100644 doc/conf/s019.txt create mode 100644 doc/conf/s020.txt create mode 100644 doc/conf/s021.txt create mode 100644 doc/conf/s100.txt create mode 100644 doc/eagle.txt create mode 100644 doc/old files/items/analog-adc.txt create mode 100644 doc/old files/items/bme280-hum.txt create mode 100644 doc/old files/items/bme280-press.txt create mode 100644 doc/old files/items/bme280-temp.txt create mode 100644 doc/old files/items/bmp280-press.txt create mode 100644 doc/old files/items/bmp280-temp.txt create mode 100644 doc/old files/items/button-in.txt create mode 100644 doc/old files/items/button-out.inv.txt create mode 100644 doc/old files/items/button-out.npin.txt create mode 100644 doc/old files/items/button-out.pin.txt create mode 100644 doc/old files/items/count-down.txt create mode 100644 doc/old files/items/dallas-temp.txt create mode 100644 doc/old files/items/dht11-hum.txt create mode 100644 doc/old files/items/dht11-temp.txt create mode 100644 doc/old files/items/dht22-hum.txt create mode 100644 doc/old files/items/dht22-temp.txt create mode 100644 doc/old files/items/impuls-out.txt create mode 100644 doc/old files/items/input-digit.txt create mode 100644 doc/old files/items/input-time.txt create mode 100644 doc/old files/items/logging.txt create mode 100644 doc/old files/items/modbus.txt create mode 100644 doc/old files/items/output-text.txt create mode 100644 doc/old files/items/pwm-out.txt create mode 100644 doc/old files/items/uart-button.txt create mode 100644 doc/old files/items/uart-widget.txt create mode 100644 doc/old files/items/ultrasonic-cm.txt create mode 100644 doc/old files/items/uptime.txt create mode 100644 doc/old files/presets/1.c.txt create mode 100644 doc/old files/presets/1.s.txt create mode 100644 doc/old files/presets/2.c.txt create mode 100644 doc/old files/presets/2.s.txt create mode 100644 doc/old files/presets/3.c.txt create mode 100644 doc/old files/presets/3.s.txt create mode 100644 doc/old files/presets/4.c.txt create mode 100644 doc/old files/presets/4.s.txt create mode 100644 doc/old files/presets/5.c.txt create mode 100644 doc/old files/presets/5.s.txt create mode 100644 doc/old files/presets/6.c.txt create mode 100644 doc/old files/presets/6.s.txt create mode 100644 doc/old files/presets/7.c.txt create mode 100644 doc/old files/presets/7.s.txt create mode 100644 doc/old files/presets/8.c.txt create mode 100644 doc/old files/presets/8.s.txt create mode 100644 doc/old files/presets/9.c.txt create mode 100644 doc/old files/presets/9.s.txt create mode 100644 doc/orders.xlsm create mode 100644 doc/pictures/001 iot manager.jpeg create mode 100644 doc/pictures/002 iot manager.jpeg create mode 100644 doc/pictures/003 iot manager.jpeg create mode 100644 doc/pictures/007 iot manager.jpg create mode 100644 include/BufferExecute.h create mode 100644 include/Bus.h create mode 100644 include/Class/CallBackTest.h create mode 100644 include/Class/LineParsing.h create mode 100644 include/Class/NotAsync.h create mode 100644 include/Class/ScenarioClass3.h create mode 100644 include/Clock.h create mode 100644 include/Cmd.h create mode 100644 include/Consts.h create mode 100644 include/ESP32.h create mode 100644 include/ESP8266.h create mode 100644 include/FSEditor.h create mode 100644 include/FileSystem.h create mode 100644 include/Global.h create mode 100644 include/HttpServer.h create mode 100644 include/Init.h create mode 100644 include/ItemsList.h create mode 100644 include/Macro.h create mode 100644 include/MqttClient.h create mode 100644 include/MqttDiscovery.h create mode 100644 include/RemoteOrdersUdp.h create mode 100644 include/SSDP.h create mode 100644 include/Sensors.h create mode 100644 include/Servo/Servos.h create mode 100644 include/SoftUART.h create mode 100644 include/Strings_.h create mode 100644 include/Telegram.h create mode 100644 include/Tests.h create mode 100644 include/Upgrade.h create mode 100644 include/Utils/FileHelper.h create mode 100644 include/Utils/FileUtils.h create mode 100644 include/Utils/JsonUtils.h create mode 100644 include/Utils/SerialPrint.h create mode 100644 include/Utils/StringUtils.h create mode 100644 include/Utils/SysUtils.h create mode 100644 include/Utils/TimeUtils.h create mode 100644 include/Utils/Timings.h create mode 100644 include/Utils/WebUtils.h create mode 100644 include/Utils/WiFiUtils.h create mode 100644 include/Utils/statUtils.h create mode 100644 include/Web.h create mode 100644 include/items/ButtonInClass.h create mode 100644 include/items/PZEMSensor.cpp create mode 100644 include/items/PZEMSensor.h create mode 100644 include/items/SensorPower.h create mode 100644 include/items/vButtonOut.h create mode 100644 include/items/vCountDown.h create mode 100644 include/items/vImpulsOut.h create mode 100644 include/items/vInOutput.h create mode 100644 include/items/vLogging.h create mode 100644 include/items/vPwmOut.h create mode 100644 include/items/vSensorAnalog.h create mode 100644 include/items/vSensorBme280.h create mode 100644 include/items/vSensorBmp280.h create mode 100644 include/items/vSensorDallas.h create mode 100644 include/items/vSensorDht.h create mode 100644 include/items/vSensorUltrasonic.h create mode 100644 lib/ESP8266-StringCommand/StringCommand.cpp create mode 100644 lib/ESP8266-StringCommand/StringCommand.h create mode 100644 lib/ESP8266-StringCommand/keywords.txt create mode 100644 lib/ESP8266-StringCommand/readme.md create mode 100644 lib/ESPAsyncWebServer/.github/scripts/install-arduino-core-esp32.sh create mode 100644 lib/ESPAsyncWebServer/.github/scripts/install-arduino-core-esp8266.sh create mode 100644 lib/ESPAsyncWebServer/.github/scripts/install-arduino-ide.sh create mode 100644 lib/ESPAsyncWebServer/.github/scripts/install-platformio.sh create mode 100644 lib/ESPAsyncWebServer/.github/scripts/on-push.sh create mode 100644 lib/ESPAsyncWebServer/.github/stale.yml create mode 100644 lib/ESPAsyncWebServer/.github/workflows/push.yml create mode 100644 lib/ESPAsyncWebServer/.gitignore create mode 100644 lib/ESPAsyncWebServer/.travis.yml create mode 100644 lib/ESPAsyncWebServer/CMakeLists.txt create mode 100644 lib/ESPAsyncWebServer/README.md create mode 100644 lib/ESPAsyncWebServer/_config.yml create mode 100644 lib/ESPAsyncWebServer/component.mk create mode 100644 lib/ESPAsyncWebServer/examples/CaptivePortal/CaptivePortal.ino create mode 100644 lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/ESP_AsyncFSBrowser.ino create mode 100644 lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/.exclude.files create mode 100644 lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/ace.js.gz create mode 100644 lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/ext-searchbox.js.gz create mode 100644 lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/favicon.ico create mode 100644 lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/index.htm create mode 100644 lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/mode-css.js.gz create mode 100644 lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/mode-html.js.gz create mode 100644 lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/mode-javascript.js.gz create mode 100644 lib/ESPAsyncWebServer/examples/ESP_AsyncFSBrowser/data/worker-html.js.gz create mode 100644 lib/ESPAsyncWebServer/examples/regex_patterns/.test.build_flags create mode 100644 lib/ESPAsyncWebServer/examples/regex_patterns/regex_patterns.ino create mode 100644 lib/ESPAsyncWebServer/examples/simple_server/simple_server.ino create mode 100644 lib/ESPAsyncWebServer/keywords.txt create mode 100644 lib/ESPAsyncWebServer/library.json create mode 100644 lib/ESPAsyncWebServer/library.properties create mode 100644 lib/ESPAsyncWebServer/src/AsyncEventSource.cpp create mode 100644 lib/ESPAsyncWebServer/src/AsyncEventSource.h create mode 100644 lib/ESPAsyncWebServer/src/AsyncJson.h create mode 100644 lib/ESPAsyncWebServer/src/AsyncWebSocket.cpp create mode 100644 lib/ESPAsyncWebServer/src/AsyncWebSocket.h create mode 100644 lib/ESPAsyncWebServer/src/AsyncWebSynchronization.h create mode 100644 lib/ESPAsyncWebServer/src/ESPAsyncWebServer.h create mode 100644 lib/ESPAsyncWebServer/src/SPIFFSEditor.cpp create mode 100644 lib/ESPAsyncWebServer/src/SPIFFSEditor.h create mode 100644 lib/ESPAsyncWebServer/src/StringArray.h create mode 100644 lib/ESPAsyncWebServer/src/WebAuthentication.cpp create mode 100644 lib/ESPAsyncWebServer/src/WebAuthentication.h create mode 100644 lib/ESPAsyncWebServer/src/WebHandlerImpl.h create mode 100644 lib/ESPAsyncWebServer/src/WebHandlers.cpp create mode 100644 lib/ESPAsyncWebServer/src/WebRequest.cpp create mode 100644 lib/ESPAsyncWebServer/src/WebResponseImpl.h create mode 100644 lib/ESPAsyncWebServer/src/WebResponses.cpp create mode 100644 lib/ESPAsyncWebServer/src/WebServer.cpp create mode 100644 lib/ESPAsyncWebServer/src/edit.htm create mode 100644 lib/GyverFilters/examples/GFilterRA/GFilterRA.ino create mode 100644 lib/GyverFilters/examples/GLinear_arrays/GLinear_arrays.ino create mode 100644 lib/GyverFilters/examples/GLinear_arrays/excel.jpg create mode 100644 lib/GyverFilters/examples/GLinear_running/GLinear_running.ino create mode 100644 lib/GyverFilters/examples/alphabeta_example/alphabeta_example.ino create mode 100644 lib/GyverFilters/examples/filters_comparsion/filters_comparsion.ino create mode 100644 lib/GyverFilters/examples/kalman_example/kalman_example.ino create mode 100644 lib/GyverFilters/examples/median3_example/median3_example.ino create mode 100644 lib/GyverFilters/examples/median_example/median_example.ino create mode 100644 lib/GyverFilters/keywords.txt create mode 100644 lib/GyverFilters/library.properties create mode 100644 lib/GyverFilters/src/GyverFilters.h create mode 100644 lib/GyverFilters/src/filters/alfaBeta.h create mode 100644 lib/GyverFilters/src/filters/kalman.h create mode 100644 lib/GyverFilters/src/filters/linear.h create mode 100644 lib/GyverFilters/src/filters/median.h create mode 100644 lib/GyverFilters/src/filters/median3.h create mode 100644 lib/GyverFilters/src/filters/runningAverage.cpp create mode 100644 lib/GyverFilters/src/filters/runningAverage.h create mode 100644 lib/README create mode 100644 lib/TickerScheduler/README.md create mode 100644 lib/TickerScheduler/TickerScheduler.cpp create mode 100644 lib/TickerScheduler/TickerScheduler.h create mode 100644 lib/TickerScheduler/example/blink/blink/blink.ino create mode 100644 partitions_custom.csv create mode 100644 platformio.ini create mode 100644 src/BufferExecute.cpp create mode 100644 src/Bus.cpp create mode 100644 src/Class/CallBackTest.cpp create mode 100644 src/Class/LineParsing.cpp create mode 100644 src/Class/NotAsync.cpp create mode 100644 src/Class/ScenarioClass3.cpp create mode 100644 src/Clock.cpp create mode 100644 src/FSEditor.cpp create mode 100644 src/FileSystem.cpp create mode 100644 src/Global.cpp create mode 100644 src/Init.cpp create mode 100644 src/ItemsList.cpp create mode 100644 src/MqttClient.cpp create mode 100644 src/RemoteOrdersUdp.cpp create mode 100644 src/SSDP.cpp create mode 100644 src/Servo/Servs.cpp create mode 100644 src/SoftUART.cpp create mode 100644 src/Telegram.cpp create mode 100644 src/Tests.cpp create mode 100644 src/UpgradeFirm.cpp create mode 100644 src/Utils/FileUtils.cpp create mode 100644 src/Utils/JsonUtils.cpp create mode 100644 src/Utils/SerialPrint.cpp create mode 100644 src/Utils/StringUtils.cpp create mode 100644 src/Utils/SysUtils.cpp create mode 100644 src/Utils/TimeUtils.cpp create mode 100644 src/Utils/WebUtils.cpp create mode 100644 src/Utils/WiFiUtils.cpp create mode 100644 src/Utils/statUtils.cpp create mode 100644 src/Web.cpp create mode 100644 src/WebServer.cpp create mode 100644 src/Widgets.cpp create mode 100644 src/items/ButtonInClass.cpp create mode 100644 src/items/SensorPower.cpp create mode 100644 src/items/sysUptime.cpp create mode 100644 src/items/vButtonOut.cpp create mode 100644 src/items/vCountDown.cpp create mode 100644 src/items/vImpulsOut.cpp create mode 100644 src/items/vInOutput.cpp create mode 100644 src/items/vLogging.cpp create mode 100644 src/items/vPwmOut.cpp create mode 100644 src/items/vSensorAnalog.cpp create mode 100644 src/items/vSensorBme280.cpp create mode 100644 src/items/vSensorBmp280.cpp create mode 100644 src/items/vSensorDallas.cpp create mode 100644 src/items/vSensorDht.cpp create mode 100644 src/items/vSensorUltrasonic.cpp create mode 100644 src/main.cpp create mode 100644 tools/littlefsbuilder.py create mode 100644 tools/mklittlefs.exe diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..65469d13 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.pio +.vscode/.browse.c_cpp.db* +.vscode/c_cpp_properties.json +.vscode/launch.json +.vscode/ipch +lib/libraies-master + diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000..e80666bf --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "platformio.platformio-ide" + ] +} diff --git a/data/config.json b/data/config.json new file mode 100644 index 00000000..139fc773 --- /dev/null +++ b/data/config.json @@ -0,0 +1,37 @@ +{ + "name": "IoTmanager", + "chipID": "", + "apssid": "IoTmanager", + "appass": "", + "routerssid": "rise", + "routerpass": "hostel3333", + "timezone": 1, + "ntp": "pool.ntp.org", + "mqttServer": "91.204.228.124", + "mqttPort": 1883, + "mqttPrefix": "/iotTest", + "mqttUser": "rise", + "mqttPass": "23ri22se32", + "mqttServer2": "", + "mqttPort2": 1883, + "mqttPrefix2": "/iotTest", + "mqttUser2": "", + "mqttPass2": "", + "scen": "1", + "telegramApi": "1416711569:AAEI0j83GmXqwzb_gnK1B0Am0gDwZoJt5xo", + "telegonof": "0", + "teleginput": "0", + "autos": "1", + "weblogin": "admin", + "webpass": "admin", + "MqttIn": "0", + "MqttOut": "0", + "blink": "0", + "oneWirePin": "2", + "serverip": "http://206.189.49.244", + "uart": "0", + "uartS": "9600", + "uartTX": "12", + "uartRX": "13", + "grafmax": "0" +} \ No newline at end of file diff --git a/data/css/build.css.gz b/data/css/build.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..b62ceaf0eb9497581ba5f66f2c28377154594560 GIT binary patch literal 15958 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 z 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 literal 0 HcmV?d00001 diff --git a/data/index.htm.gz b/data/index.htm.gz new file mode 100644 index 0000000000000000000000000000000000000000..073ff4ab3b6a4ee662c584f6498d1ff3a03a8752 GIT binary patch literal 2008 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 literal 0 HcmV?d00001 diff --git a/data/items/items.txt b/data/items/items.txt new file mode 100644 index 00000000..3b9d7ca4 --- /dev/null +++ b/data/items/items.txt @@ -0,0 +1,25 @@ +0;button-out;btnid;toggle;Кнопки;Освещение;order;gpio* +0;button-out;btnid;toggle;Кнопки;Освещение;order;gpio;inv[1]* +0;button-out;btnid;toggle;Кнопки;Освещение;order* +0;button-in;btnid;toggle;Кнопки;Освещение;order;gpio;db[20]* +0;pwm-out;pwmid;range;Ползунки;Яркость;order;gpio* +0;inoutput;dgtid;inputDigit;Ввод;Введите#цифру;order* +0;inoutput;tmid;inputTime;Ввод;Введите#время;order* +0;inoutput;txtid;anydata;Вывод;Сигнализация;order* +0;analog-adc;adcid;fillgauge;Сенсоры;Аналоговый;order;pin[0];map[0,1024,0,100];c[1];int[10]* +0;dallas-temp;tmpid;anydataTemp;Сенсоры;Температура;order;pin[2];index[0];int[10]* +0;ultrasonic-cm;cmid;anydata;Сенсоры;Расстояние;order;pin[12,13];map[0,500,0,100];c[1];int[10]* +0;dht;tmpid;anydataTemp;Сенсоры;Температура;1;c[1] +0;dht;humid;anydataHum;Сенсоры;Влажность;2;c[1];pin[2];type[dht11];int[10]* +0;dht;tmpid;anydataTemp;Сенсоры;Температура;1;c[1] +0;dht;humid;anydataHum;Сенсоры;Влажность;2;c[1];pin[2];type[dht22];int[10]* +0;bme280;tmpid;anydataTemp;Сенсоры;Температура;1;c[1] +0;bme280;humid;anydataHum;Сенсоры;Влажность;2;c[1] +0;bme280;prsid;anydataPress;Сенсоры;Давление;3;c[1];addr[0x76];int[10]* +0;bmp280;tmpid;anydataTemp;Сенсоры;Температура;1;c[1] +0;bmp280;prsid;anydataPress;Сенсоры;Давление;3;c[1];addr[0x76];int[10]* +0;impuls-out;impid;na;na;na;order;gpio* +0;count-down;cntid;anydata;Таймер;Обратный#отчет;order* +0;inoutput;txtid;anydata;Вывод;Вывод#uart;order* +0;logging;crtid;chart;Графики;История;order;val[any];int[60];cnt[100]* +0;uptime;uptid;anydataTime;Системные;%name%#uptime;order* \ No newline at end of file diff --git a/data/js/build.chart.js.gz b/data/js/build.chart.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..654707fda2db9fad70fefdfef2ddaf11d08af5c6 GIT binary patch literal 12758 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