diff --git a/PrepareProject.py b/PrepareProject.py
index d29c8da4..46157d96 100644
--- a/PrepareProject.py
+++ b/PrepareProject.py
@@ -16,6 +16,7 @@
# поддерживаемые контроллеры (профили):
# esp8266_4mb
# esp32_4mb
+# esp32s2_4mb
# esp8266_1mb
# esp8266_1mb_ota
# esp8285_1mb
@@ -23,6 +24,7 @@
# esp8266_2mb
# esp8266_2mb_ota
+
import configparser
import os, json, sys, getopt
from pathlib import Path
diff --git a/data_svelte/build/bundle.css.gz b/data_svelte/build/bundle.css.gz
index 910785a1..e98b95d1 100644
Binary files a/data_svelte/build/bundle.css.gz and b/data_svelte/build/bundle.css.gz differ
diff --git a/data_svelte/build/bundle.js.gz b/data_svelte/build/bundle.js.gz
index 2d726583..2807c59c 100644
Binary files a/data_svelte/build/bundle.js.gz and b/data_svelte/build/bundle.js.gz differ
diff --git a/data_svelte/index.html b/data_svelte/index.html
index 4a70048b..cc7dd907 100644
--- a/data_svelte/index.html
+++ b/data_svelte/index.html
@@ -4,12 +4,12 @@
-
IoT Manager 4.4.6
+ IoT Manager 4.5.0
-
+
-
+
diff --git a/data_svelte/items.json b/data_svelte/items.json
index 72366d57..ed78c67e 100644
--- a/data_svelte/items.json
+++ b/data_svelte/items.json
@@ -192,7 +192,19 @@
"header": "Сенсоры"
},
{
- "name": "13. Acs712 Ток",
+ "name": "13. A02 Дальность",
+ "type": "Reading",
+ "subtype": "A02Distance",
+ "id": "dist",
+ "widget": "anydataCm",
+ "page": "Сенсоры",
+ "descr": "Дальность",
+ "int": 5,
+ "round": 1,
+ "num": 13
+ },
+ {
+ "name": "14. Acs712 Ток",
"type": "Reading",
"subtype": "Acs712",
"id": "amp",
@@ -207,11 +219,11 @@
"sens": 100,
"adczero": 512,
"btn-setZero": "nil",
- "num": 13
+ "num": 14
},
{
"global": 0,
- "name": "14. AHTXX Температура",
+ "name": "15. AHTXX Температура",
"type": "Reading",
"subtype": "AhtXXt",
"id": "Temp20",
@@ -222,11 +234,11 @@
"addr": "0x38",
"shtType": 1,
"round": 1,
- "num": 14
+ "num": 15
},
{
"global": 0,
- "name": "15. AHTXX Влажность",
+ "name": "16. AHTXX Влажность",
"type": "Reading",
"subtype": "AhtXXh",
"id": "Hum20",
@@ -237,11 +249,11 @@
"addr": "0x38",
"shtType": 1,
"round": 1,
- "num": 15
+ "num": 16
},
{
"global": 0,
- "name": "16. Аналоговый сенсор",
+ "name": "17. Аналоговый сенсор",
"type": "Reading",
"subtype": "AnalogAdc",
"id": "t",
@@ -255,11 +267,11 @@
"pin": 0,
"int": 15,
"avgSteps": 1,
- "num": 16
+ "num": 17
},
{
"global": 0,
- "name": "17. BME280 Температура",
+ "name": "18. BME280 Температура",
"type": "Reading",
"subtype": "Bme280t",
"id": "Tmp3",
@@ -269,11 +281,11 @@
"int": 15,
"addr": "0x77",
"round": 1,
- "num": 17
+ "num": 18
},
{
"global": 0,
- "name": "18. BME280 Давление",
+ "name": "19. BME280 Давление",
"type": "Reading",
"subtype": "Bme280p",
"id": "Press3",
@@ -283,11 +295,11 @@
"int": 15,
"addr": "0x77",
"round": 1,
- "num": 18
+ "num": 19
},
{
"global": 0,
- "name": "19. BME280 Влажность",
+ "name": "20. BME280 Влажность",
"type": "Reading",
"subtype": "Bme280h",
"id": "Hum3",
@@ -297,11 +309,11 @@
"int": 15,
"addr": "0x77",
"round": 1,
- "num": 19
+ "num": 20
},
{
"global": 0,
- "name": "20. BME280 Tочка росы",
+ "name": "21. BME280 Tочка росы",
"type": "Reading",
"subtype": "Bme280dp",
"id": "Dew3",
@@ -311,11 +323,11 @@
"int": 15,
"addr": "0x77",
"round": 1,
- "num": 20
+ "num": 21
},
{
"global": 0,
- "name": "21. BMP280 Температура",
+ "name": "22. BMP280 Температура",
"type": "Reading",
"subtype": "Bmp280t",
"id": "tmp3",
@@ -325,11 +337,11 @@
"int": 15,
"addr": "0x77",
"round": 1,
- "num": 21
+ "num": 22
},
{
"global": 0,
- "name": "22. BMP280 Давление",
+ "name": "23. BMP280 Давление",
"type": "Reading",
"subtype": "Bmp280p",
"id": "Press3",
@@ -339,11 +351,11 @@
"int": 15,
"addr": "0x77",
"round": 1,
- "num": 22
+ "num": 23
},
{
"global": 0,
- "name": "23. DHT11 Температура",
+ "name": "24. DHT11 Температура",
"type": "Reading",
"subtype": "Dht1122t",
"id": "tmp3",
@@ -353,11 +365,11 @@
"int": 15,
"pin": 0,
"senstype": "dht11",
- "num": 23
+ "num": 24
},
{
"global": 0,
- "name": "24. DHT11 Влажность",
+ "name": "25. DHT11 Влажность",
"type": "Reading",
"subtype": "Dht1122h",
"id": "Hum3",
@@ -367,11 +379,11 @@
"int": 15,
"pin": 0,
"senstype": "dht11",
- "num": 24
+ "num": 25
},
{
"global": 0,
- "name": "25. DS18B20 Температура",
+ "name": "26. DS18B20 Температура",
"type": "Reading",
"subtype": "Ds18b20",
"id": "dstmp",
@@ -383,11 +395,49 @@
"index": 0,
"addr": "",
"round": 1,
- "num": 25
+ "num": 26
},
{
"global": 0,
- "name": "26. Аналоговый счетчик импульсов",
+ "name": "27. DS2423 счетчик 1",
+ "type": "Reading",
+ "subtype": "Ds2423a",
+ "id": "dscounta",
+ "widget": "anydataDef",
+ "page": "Счетчики",
+ "descr": "DS1 V",
+ "plus": 0,
+ "multiply": 1,
+ "pin": 4,
+ "index": 0,
+ "addr": "",
+ "int": 10,
+ "round": 0,
+ "needSave": 0,
+ "num": 27
+ },
+ {
+ "global": 0,
+ "name": "28. DS2423 счетчик 2",
+ "type": "Reading",
+ "subtype": "Ds2423b",
+ "id": "dscountb",
+ "widget": "anydataDef",
+ "page": "Счетчики",
+ "descr": "DS2 V",
+ "plus": 0,
+ "multiply": 1,
+ "pin": 4,
+ "index": 0,
+ "addr": "",
+ "int": 10,
+ "round": 0,
+ "needSave": 0,
+ "num": 28
+ },
+ {
+ "global": 0,
+ "name": "29. Аналоговый счетчик импульсов",
"type": "Writing",
"subtype": "Impulse",
"id": "impulse",
@@ -400,11 +450,32 @@
"pinMode": "INPUT",
"debounceDelay": 3,
"multiply": 1,
- "num": 26
+ "num": 29
},
{
"global": 0,
- "name": "27. PZEM 004t Напряжение",
+ "name": "30. Cенсор температуры NTC",
+ "type": "Reading",
+ "subtype": "Ntc",
+ "id": "Ntctmp",
+ "widget": "anydataTmp",
+ "page": "Сенсоры",
+ "descr": "NTC Температура",
+ "needSave": 0,
+ "val": "0",
+ "int": 15,
+ "pin": "35",
+ "R1": "10000",
+ "R0": "10000",
+ "Beta": "3950.0",
+ "T0": "25",
+ "Vs": "3.3",
+ "round": 1,
+ "num": 30
+ },
+ {
+ "global": 0,
+ "name": "31. PZEM 004t Напряжение",
"type": "Reading",
"subtype": "Pzem004v",
"id": "v",
@@ -414,11 +485,11 @@
"int": 15,
"addr": "0xF8",
"round": 1,
- "num": 27
+ "num": 31
},
{
"global": 0,
- "name": "28. PZEM 004t Сила тока",
+ "name": "32. PZEM 004t Сила тока",
"type": "Reading",
"subtype": "Pzem004a",
"id": "a",
@@ -428,11 +499,11 @@
"int": 15,
"addr": "0xF8",
"round": 1,
- "num": 28
+ "num": 32
},
{
"global": 0,
- "name": "29. PZEM 004t Мощность",
+ "name": "33. PZEM 004t Мощность",
"type": "Reading",
"subtype": "Pzem004w",
"id": "w",
@@ -442,11 +513,11 @@
"int": 15,
"addr": "0xF8",
"round": 1,
- "num": 29
+ "num": 33
},
{
"global": 0,
- "name": "30. PZEM 004t Энергия",
+ "name": "34. PZEM 004t Энергия",
"type": "Reading",
"subtype": "Pzem004wh",
"id": "wh",
@@ -456,11 +527,11 @@
"int": 15,
"addr": "0xF8",
"round": 1,
- "num": 30
+ "num": 34
},
{
"global": 0,
- "name": "31. PZEM 004t Частота",
+ "name": "35. PZEM 004t Частота",
"type": "Reading",
"subtype": "Pzem004hz",
"id": "hz",
@@ -470,11 +541,11 @@
"int": 15,
"addr": "0xF8",
"round": 1,
- "num": 31
+ "num": 35
},
{
"global": 0,
- "name": "32. PZEM 004t Косинус",
+ "name": "36. PZEM 004t Косинус",
"type": "Reading",
"subtype": "Pzem004pf",
"id": "pf",
@@ -484,11 +555,11 @@
"int": 15,
"addr": "0xF8",
"round": 1,
- "num": 32
+ "num": 36
},
{
"global": 0,
- "name": "33. PZEM настройка",
+ "name": "37. PZEM настройка",
"type": "Reading",
"subtype": "Pzem004cmd",
"id": "set",
@@ -500,11 +571,11 @@
"changeaddr": 0,
"setaddr": "0x01",
"reset": 0,
- "num": 33
+ "num": 37
},
{
"global": 0,
- "name": "34. Часы реального времени",
+ "name": "38. Часы реального времени",
"type": "Reading",
"subtype": "RTC",
"id": "rtc",
@@ -520,11 +591,11 @@
"int": 5,
"btn-setUTime": "0",
"btn-setSysTime": "nil",
- "num": 34
+ "num": 38
},
{
- "name": "35. (S8) Cенсор качества воздуха",
- "num": 35,
+ "name": "39. (S8) Cенсор качества воздуха",
+ "num": 39,
"type": "Reading",
"subtype": "S8co",
"id": "s8co",
@@ -538,7 +609,50 @@
},
{
"global": 0,
- "name": "36. Sht20 Температура",
+ "name": "40. SCD40 Углекислый газ",
+ "type": "Reading",
+ "subtype": "Scd40co2",
+ "id": "Scd40co2",
+ "widget": "anydataPpm",
+ "page": "Сенсоры",
+ "descr": "SCD40 Углекислый газ",
+ "int": 15,
+ "round": 0,
+ "lowPeriodic": 1,
+ "autoCalibration": 1,
+ "btn-Recalibration": 0,
+ "num": 40
+ },
+ {
+ "global": 0,
+ "name": "41. SCD40 Влажность",
+ "type": "Reading",
+ "subtype": "Scd40h",
+ "id": "Scd40h",
+ "widget": "anydataHum",
+ "page": "Сенсоры",
+ "descr": "SCD40 Влажность",
+ "int": 15,
+ "round": 1,
+ "num": 41
+ },
+ {
+ "global": 0,
+ "name": "42. SCD40 Температура",
+ "type": "Reading",
+ "subtype": "Scd40t",
+ "id": "Scd40t",
+ "widget": "anydataTmp",
+ "page": "Сенсоры",
+ "descr": "SCD40 Температура",
+ "int": 15,
+ "round": 1,
+ "offset": 4,
+ "num": 42
+ },
+ {
+ "global": 0,
+ "name": "43. Sht20 Температура",
"type": "Reading",
"subtype": "Sht20t",
"id": "tmp2",
@@ -547,11 +661,11 @@
"descr": "Температура",
"int": 15,
"round": 1,
- "num": 36
+ "num": 43
},
{
"global": 0,
- "name": "37. Sht20 Влажность",
+ "name": "44. Sht20 Влажность",
"type": "Reading",
"subtype": "Sht20h",
"id": "Hum2",
@@ -560,11 +674,11 @@
"descr": "Влажность",
"int": 15,
"round": 1,
- "num": 37
+ "num": 44
},
{
"global": 0,
- "name": "38. Sht30 Температура",
+ "name": "45. Sht30 Температура",
"type": "Reading",
"subtype": "Sht30t",
"id": "tmp30",
@@ -573,11 +687,11 @@
"descr": "SHT30 Температура",
"int": 15,
"round": 1,
- "num": 38
+ "num": 45
},
{
"global": 0,
- "name": "39. Sht30 Влажность",
+ "name": "46. Sht30 Влажность",
"type": "Reading",
"subtype": "Sht30h",
"id": "Hum30",
@@ -586,12 +700,12 @@
"descr": "SHT30 Влажность",
"int": 15,
"round": 1,
- "num": 39
+ "num": 46
},
{
"global": 0,
- "name": "40. HC-SR04 Ультразвуковой дальномер",
- "num": 40,
+ "name": "47. HC-SR04 Ультразвуковой дальномер",
+ "num": 47,
"type": "Reading",
"subtype": "Sonar",
"id": "sonar",
@@ -603,7 +717,7 @@
"int": 5
},
{
- "name": "41. UART",
+ "name": "48. UART",
"type": "Reading",
"subtype": "UART",
"page": "",
@@ -615,14 +729,14 @@
"line": 2,
"speed": 9600,
"eventFormat": 0,
- "num": 41
+ "num": 48
},
{
"header": "Исполнительные устройства"
},
{
"global": 0,
- "name": "42. Кнопка подключенная к пину",
+ "name": "49. Кнопка подключенная к пину",
"type": "Writing",
"subtype": "ButtonIn",
"id": "btn",
@@ -637,11 +751,11 @@
"debounceDelay": 50,
"fixState": 0,
"inv": 0,
- "num": 42
+ "num": 49
},
{
"global": 0,
- "name": "43. Управление пином",
+ "name": "50. Управление пином",
"type": "Writing",
"subtype": "ButtonOut",
"needSave": 0,
@@ -652,11 +766,11 @@
"int": 0,
"inv": 0,
"pin": 2,
- "num": 43
+ "num": 50
},
{
"global": 0,
- "name": "44. Пассивный звуковой извещатель",
+ "name": "51. Пассивный звуковой извещатель",
"type": "Writing",
"subtype": "Buzzer",
"id": "buzzer",
@@ -675,11 +789,11 @@
"cycle": 0,
"indication": 1,
"val": 0,
- "num": 44
+ "num": 51
},
{
"global": 0,
- "name": "45. Энкодер",
+ "name": "52. Энкодер",
"type": "Writing",
"subtype": "Encoder",
"id": "enc",
@@ -692,11 +806,11 @@
"step": 1,
"stepOnPress": 5,
"pins": "4,5,2",
- "num": 45
+ "num": 52
},
{
"global": 0,
- "name": "46. Сервопривод",
+ "name": "53. Сервопривод",
"type": "Writing",
"subtype": "IoTServo",
"id": "servo",
@@ -707,11 +821,11 @@
"pin": 12,
"apin": -1,
"amap": "0, 4096, 0, 180",
- "num": 46
+ "num": 53
},
{
"global": 0,
- "name": "47. Расширитель портов Mcp23017",
+ "name": "54. Расширитель портов Mcp23017",
"type": "Reading",
"subtype": "Mcp23017",
"id": "Mcp",
@@ -721,11 +835,11 @@
"int": "0",
"addr": "0x20",
"index": 1,
- "num": 47
+ "num": 54
},
{
"global": 0,
- "name": "48. MP3 плеер",
+ "name": "55. MP3 плеер",
"type": "Reading",
"subtype": "Mp3",
"id": "mp3",
@@ -735,11 +849,11 @@
"int": 1,
"pins": "14,12",
"volume": 20,
- "num": 48
+ "num": 55
},
{
"global": 0,
- "name": "49. Сенсорная кнопка",
+ "name": "56. Сенсорная кнопка",
"type": "Writing",
"subtype": "Multitouch",
"id": "impulse",
@@ -753,11 +867,11 @@
"pinMode": "INPUT",
"debounceDelay": 50,
"PWMDelay": 500,
- "num": 49
+ "num": 56
},
{
"global": 0,
- "name": "50. Расширитель портов Pcf8574",
+ "name": "57. Расширитель портов Pcf8574",
"type": "Reading",
"subtype": "Pcf8574",
"id": "Pcf",
@@ -767,29 +881,27 @@
"int": "0",
"addr": "0x20",
"index": 1,
- "num": 50
+ "num": 57
},
{
"global": 0,
- "name": "51. PWM ESP32",
+ "name": "58. PWM ESP8266",
"type": "Writing",
- "subtype": "Pwm32",
+ "subtype": "Pwm8266",
"id": "pwm",
"widget": "range",
"page": "Кнопки",
"descr": "PWM",
"int": 0,
- "pin": 2,
+ "pin": 15,
"freq": 5000,
- "ledChannel": 2,
- "PWM_resolution": 10,
"val": 0,
"apin": -1,
- "num": 51
+ "num": 58
},
{
"global": 0,
- "name": "52. Телеграм-Лайт",
+ "name": "59. Телеграм-Лайт",
"type": "Writing",
"subtype": "TelegramLT",
"id": "tg",
@@ -798,14 +910,14 @@
"descr": "",
"token": "",
"chatID": "",
- "num": 52
+ "num": 59
},
{
"header": "Экраны"
},
{
"global": 0,
- "name": "53. LCD экран 2004",
+ "name": "60. LCD экран 2004",
"type": "Reading",
"subtype": "Lcd2004",
"id": "Lcd",
@@ -817,10 +929,10 @@
"size": "20,4",
"coord": "0,0",
"id2show": "id датчика",
- "num": 53
+ "num": 60
},
{
- "name": "54. LCD экран 1602",
+ "name": "61. LCD экран 1602",
"type": "Reading",
"subtype": "Lcd2004",
"id": "Lcd",
@@ -832,6 +944,6 @@
"size": "16,2",
"coord": "0,0",
"id2show": "id датчика",
- "num": 54
+ "num": 61
}
]
\ No newline at end of file
diff --git a/data_svelte/myProfile.json b/data_svelte/myProfile.json
index a38c07ac..01261688 100644
--- a/data_svelte/myProfile.json
+++ b/data_svelte/myProfile.json
@@ -24,8 +24,8 @@
},
"projectProp": {
"platformio": {
- "default_envs": "esp32_4mb",
- "comments_default_envs": "choose from: esp8266_4mb or esp32_4mb or esp8266_1mb or esp8266_1mb_ota or esp8285_1mb or esp8285_1mb_ota"
+ "default_envs": "esp8266_4mb",
+ "comments_default_envs": "choose from: esp8266_4mb or esp32_4mb or esp32s2_4mb or esp8266_1mb or esp8266_1mb_ota or esp8285_1mb or esp8285_1mb_ota"
}
},
"modules": {
diff --git a/data_svelte/widgets.json b/data_svelte/widgets.json
index adf8aae5..ba91a71f 100644
--- a/data_svelte/widgets.json
+++ b/data_svelte/widgets.json
@@ -245,6 +245,17 @@
"max": 100,
"debounce": 500
},
+ {
+ "name": "range",
+ "label": "Ползунок (Servo)",
+ "widget": "range",
+ "descrColor": "red",
+ "after": "%",
+ "k": 1,
+ "min": 0,
+ "max": 180,
+ "debounce": 500
+ },
{
"name": "select",
"label": "Выпадающий",
diff --git a/data_svelte_lite/widgets copy.json b/data_svelte_lite/widgets copy.json
new file mode 100644
index 00000000..ba91a71f
--- /dev/null
+++ b/data_svelte_lite/widgets copy.json
@@ -0,0 +1,308 @@
+[
+ {
+ "name": "anydataRed",
+ "label": "Сообщение1",
+ "widget": "anydata",
+ "icon": "body",
+ "color": "red",
+ "descrColor": "red"
+ },
+ {
+ "name": "anydataDgr",
+ "label": "Сообщение2",
+ "widget": "anydata",
+ "after": "",
+ "color": "red",
+ "icon": "walk"
+ },
+ {
+ "name": "anydataDef",
+ "label": "Текст",
+ "widget": "anydata",
+ "after": "",
+ "icon": ""
+ },
+ {
+ "name": "anydataVlt",
+ "label": "Вольты",
+ "widget": "anydata",
+ "after": "V",
+ "icon": "speedometer"
+ },
+ {
+ "name": "anydataAmp",
+ "label": "Амперы",
+ "widget": "anydata",
+ "after": "A",
+ "icon": "speedometer"
+ },
+ {
+ "name": "anydataWt",
+ "label": "Ватты",
+ "widget": "anydata",
+ "after": "Wt",
+ "icon": "speedometer",
+ "color": [
+ {
+ "level": 0,
+ "value": ""
+ },
+ {
+ "level": 200,
+ "value": "#009933"
+ },
+ {
+ "level": 2000,
+ "value": "#FF9900"
+ },
+ {
+ "level": 4000,
+ "value": "red"
+ }
+ ]
+ },
+ {
+ "name": "anydataWth",
+ "label": "Энергия",
+ "widget": "anydata",
+ "after": "kWh",
+ "icon": "speedometer"
+ },
+ {
+ "name": "anydataHtz",
+ "label": "Герцы",
+ "widget": "anydata",
+ "after": "Hz",
+ "icon": "speedometer"
+ },
+ {
+ "name": "anydataTmp",
+ "label": "Температура",
+ "widget": "anydata",
+ "after": "°С",
+ "icon": "thermometer",
+ "font": "OCR A Std",
+ "color": [
+ {
+ "level": -20,
+ "value": "#0000CC"
+ },
+ {
+ "level": -10,
+ "value": "#0000CC"
+ },
+ {
+ "level": 0,
+ "value": "#0000CC"
+ },
+ {
+ "level": 12,
+ "value": "#3366FF"
+ },
+ {
+ "level": 16,
+ "value": "#33CCFF"
+ },
+ {
+ "level": 18,
+ "value": "#009933"
+ },
+ {
+ "level": 30,
+ "value": "#FF9900"
+ },
+ {
+ "level": 40,
+ "value": "red"
+ }
+ ]
+ },
+ {
+ "name": "anydataMm",
+ "label": "Давление",
+ "widget": "anydata",
+ "after": "mm",
+ "icon": "speedometer"
+ },
+ {
+ "name": "anydataHum",
+ "label": "Влажность",
+ "widget": "anydata",
+ "after": "%",
+ "icon": "water",
+ "color": "#88AADF"
+ },
+ {
+ "name": "anydataTm",
+ "label": "Время",
+ "widget": "anydata",
+ "after": "",
+ "icon": "speedometer"
+ },
+ {
+ "name": "button",
+ "label": "Кнопка",
+ "widget": "btn",
+ "size": "large",
+ "color": "green",
+ "send": "test"
+ },
+ {
+ "name": "toggle",
+ "label": "Переключатель",
+ "widget": "toggle",
+ "icon": "",
+ "iconOff": ""
+ },
+ {
+ "name": "chart1",
+ "label": "График без точек",
+ "widget": "chart",
+ "dateFormat": "HH:mm",
+ "maxCount": 86400,
+ "pointRadius": 0
+ },
+ {
+ "name": "chart2",
+ "label": "График с точками",
+ "widget": "chart",
+ "maxCount": 86400,
+ "dateFormat": "HH:mm"
+ },
+ {
+ "name": "chart3",
+ "label": "График Дневной",
+ "widget": "chart",
+ "dateFormat": "DD.MM.YYYY",
+ "maxCount": 86400,
+ "type": "bar"
+ },
+ {
+ "name": "fillgauge",
+ "label": "Бочка",
+ "widget": "fillgauge",
+ "circleColor": "#00FFFF",
+ "textColor": "#FFFFFF",
+ "waveTextColor": "#000000",
+ "waveColor": "#00FFFF"
+ },
+ {
+ "name": "inputDate",
+ "label": "Ввод даты",
+ "widget": "input",
+ "size": "small",
+ "color": "orange",
+ "type": "date"
+ },
+ {
+ "name": "inputDgt",
+ "label": "Ввод числа",
+ "widget": "input",
+ "color": "blue",
+ "type": "number"
+ },
+ {
+ "name": "inputTxt",
+ "label": "Ввод текста",
+ "widget": "input",
+ "size": "small",
+ "color": "orange",
+ "type": "text"
+ },
+ {
+ "name": "inputTm",
+ "label": "Ввод времени",
+ "widget": "input",
+ "color": "blue",
+ "type": "time"
+ },
+ {
+ "name": "progressLine",
+ "label": "Статус линия",
+ "widget": "progress-line",
+ "icon": "sunny",
+ "max": "100",
+ "stroke": "10"
+ },
+ {
+ "name": "progressRound",
+ "label": "Статус круг",
+ "widget": "progress-round",
+ "max": "100",
+ "stroke": "20",
+ "color": "#45ccce",
+ "background": "#777",
+ "semicircle": "1"
+ },
+ {
+ "name": "range",
+ "label": "Ползунок",
+ "widget": "range",
+ "descrColor": "red",
+ "after": "%",
+ "k": 0.0977,
+ "min": 0,
+ "max": 100,
+ "debounce": 500
+ },
+ {
+ "name": "range",
+ "label": "Ползунок (Servo)",
+ "widget": "range",
+ "descrColor": "red",
+ "after": "%",
+ "k": 1,
+ "min": 0,
+ "max": 180,
+ "debounce": 500
+ },
+ {
+ "name": "select",
+ "label": "Выпадающий",
+ "widget": "select",
+ "options": [
+ "Выключен",
+ "Включен"
+ ],
+ "status": 0
+ },
+ {
+ "name": "anydataPpm",
+ "label": "PPM",
+ "widget": "anydata",
+ "after": "ppm",
+ "icon": "speedometer"
+ },
+ {
+ "name": "anydatamAmp",
+ "label": "миллиАмперы",
+ "widget": "anydata",
+ "after": "mAmp",
+ "icon": "speedometer"
+ },
+ {
+ "name": "anydatamVlt",
+ "label": "миллиВольты",
+ "widget": "anydata",
+ "after": "mVlt",
+ "icon": "speedometer"
+ },
+ {
+ "name": "anydatamWt",
+ "label": "миллиВатты",
+ "widget": "anydata",
+ "after": "mWt",
+ "icon": "speedometer"
+ },
+ {
+ "name": "anydataCm",
+ "label": "Сантиметры",
+ "widget": "anydata",
+ "after": "cm",
+ "icon": "speedometer"
+ },
+ {
+ "name": "nil",
+ "label": "Без виджета"
+ }
+]
\ No newline at end of file
diff --git a/data_svelte_lite/widgets.json b/data_svelte_lite/widgets.json
index cab0dbe2..ba91a71f 100644
--- a/data_svelte_lite/widgets.json
+++ b/data_svelte_lite/widgets.json
@@ -41,13 +41,31 @@
"label": "Ватты",
"widget": "anydata",
"after": "Wt",
- "icon": "speedometer"
+ "icon": "speedometer",
+ "color": [
+ {
+ "level": 0,
+ "value": ""
+ },
+ {
+ "level": 200,
+ "value": "#009933"
+ },
+ {
+ "level": 2000,
+ "value": "#FF9900"
+ },
+ {
+ "level": 4000,
+ "value": "red"
+ }
+ ]
},
{
"name": "anydataWth",
"label": "Энергия",
"widget": "anydata",
- "after": "kWt/Hr",
+ "after": "kWh",
"icon": "speedometer"
},
{
@@ -62,7 +80,42 @@
"label": "Температура",
"widget": "anydata",
"after": "°С",
- "icon": "thermometer"
+ "icon": "thermometer",
+ "font": "OCR A Std",
+ "color": [
+ {
+ "level": -20,
+ "value": "#0000CC"
+ },
+ {
+ "level": -10,
+ "value": "#0000CC"
+ },
+ {
+ "level": 0,
+ "value": "#0000CC"
+ },
+ {
+ "level": 12,
+ "value": "#3366FF"
+ },
+ {
+ "level": 16,
+ "value": "#33CCFF"
+ },
+ {
+ "level": 18,
+ "value": "#009933"
+ },
+ {
+ "level": 30,
+ "value": "#FF9900"
+ },
+ {
+ "level": 40,
+ "value": "red"
+ }
+ ]
},
{
"name": "anydataMm",
@@ -192,6 +245,17 @@
"max": 100,
"debounce": 500
},
+ {
+ "name": "range",
+ "label": "Ползунок (Servo)",
+ "widget": "range",
+ "descrColor": "red",
+ "after": "%",
+ "k": 1,
+ "min": 0,
+ "max": 180,
+ "debounce": 500
+ },
{
"name": "select",
"label": "Выпадающий",
@@ -209,6 +273,34 @@
"after": "ppm",
"icon": "speedometer"
},
+ {
+ "name": "anydatamAmp",
+ "label": "миллиАмперы",
+ "widget": "anydata",
+ "after": "mAmp",
+ "icon": "speedometer"
+ },
+ {
+ "name": "anydatamVlt",
+ "label": "миллиВольты",
+ "widget": "anydata",
+ "after": "mVlt",
+ "icon": "speedometer"
+ },
+ {
+ "name": "anydatamWt",
+ "label": "миллиВатты",
+ "widget": "anydata",
+ "after": "mWt",
+ "icon": "speedometer"
+ },
+ {
+ "name": "anydataCm",
+ "label": "Сантиметры",
+ "widget": "anydata",
+ "after": "cm",
+ "icon": "speedometer"
+ },
{
"name": "nil",
"label": "Без виджета"
diff --git a/include/BuildTime.h b/include/BuildTime.h
new file mode 100644
index 00000000..9049b78f
--- /dev/null
+++ b/include/BuildTime.h
@@ -0,0 +1,80 @@
+/*
+ Парсинг и получение даты и времени компиляции из __DATE__ и __TIME__
+ Документация:
+ GitHub: https://github.com/GyverLibs/buildTime
+ Константы времени компиляции:
+ BUILD_YEAR - год
+ BUILD_MONTH - месяц
+ BUILD_DAY - день
+ BUILD_HOUR - час
+ BUILD_MIN - минута
+ BUILD_SEC - секунда
+
+ Исходник http://qaru.site/questions/186859/how-to-use-date-and-time-predefined-macros-in-as-two-integers-then-stringify
+ AlexGyver, alex@alexgyver.ru
+ https://alexgyver.ru/
+ MIT License
+
+ Версии:
+ v1.0 - релиз
+*/
+
+#ifndef buildTime_h
+#define buildTime_h
+// Example of __DATE__ string: "Jul 27 2012"
+// 01234567890
+
+#define BUILD_YEAR_CH0 (__DATE__[7] - '0')
+#define BUILD_YEAR_CH1 (__DATE__[8] - '0')
+#define BUILD_YEAR_CH2 (__DATE__[9] - '0')
+#define BUILD_YEAR_CH3 (__DATE__[10] - '0')
+#define BUILD_YEAR (BUILD_YEAR_CH0 * 1000 + BUILD_YEAR_CH1 * 100 + BUILD_YEAR_CH2 * 10 + BUILD_YEAR_CH3)
+
+#define BUILD_MONTH_IS_JAN (__DATE__[0] == 'J' && __DATE__[1] == 'a' && __DATE__[2] == 'n')
+#define BUILD_MONTH_IS_FEB (__DATE__[0] == 'F')
+#define BUILD_MONTH_IS_MAR (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'r')
+#define BUILD_MONTH_IS_APR (__DATE__[0] == 'A' && __DATE__[1] == 'p')
+#define BUILD_MONTH_IS_MAY (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'y')
+#define BUILD_MONTH_IS_JUN (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'n')
+#define BUILD_MONTH_IS_JUL (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'l')
+#define BUILD_MONTH_IS_AUG (__DATE__[0] == 'A' && __DATE__[1] == 'u')
+#define BUILD_MONTH_IS_SEP (__DATE__[0] == 'S')
+#define BUILD_MONTH_IS_OCT (__DATE__[0] == 'O')
+#define BUILD_MONTH_IS_NOV (__DATE__[0] == 'N')
+#define BUILD_MONTH_IS_DEC (__DATE__[0] == 'D')
+
+#define BUILD_MONTH \
+ ( \
+ (BUILD_MONTH_IS_JAN) ? 1 : (BUILD_MONTH_IS_FEB) ? 2 \
+ : (BUILD_MONTH_IS_MAR) ? 3 \
+ : (BUILD_MONTH_IS_APR) ? 4 \
+ : (BUILD_MONTH_IS_MAY) ? 5 \
+ : (BUILD_MONTH_IS_JUN) ? 6 \
+ : (BUILD_MONTH_IS_JUL) ? 7 \
+ : (BUILD_MONTH_IS_AUG) ? 8 \
+ : (BUILD_MONTH_IS_SEP) ? 9 \
+ : (BUILD_MONTH_IS_OCT) ? 10 \
+ : (BUILD_MONTH_IS_NOV) ? 11 \
+ : (BUILD_MONTH_IS_DEC) ? 12 \
+ : /* error default */ '?')
+
+#define BUILD_DAY_CH0 (((__DATE__[4] >= '0') ? (__DATE__[4]) : '0') - '0')
+#define BUILD_DAY_CH1 (__DATE__[5] - '0')
+#define BUILD_DAY (BUILD_DAY_CH0 * 10 + BUILD_DAY_CH1)
+
+// Example of __TIME__ string: "21:06:19"
+// 01234567
+
+#define BUILD_HOUR_CH0 (__TIME__[0] - '0')
+#define BUILD_HOUR_CH1 (__TIME__[1] - '0')
+#define BUILD_HOUR (BUILD_HOUR_CH0 * 10 + BUILD_HOUR_CH1)
+
+#define BUILD_MIN_CH0 (__TIME__[3] - '0')
+#define BUILD_MIN_CH1 (__TIME__[4] - '0')
+#define BUILD_MIN (BUILD_MIN_CH0 * 10 + BUILD_MIN_CH1)
+
+#define BUILD_SEC_CH0 (__TIME__[6] - '0')
+#define BUILD_SEC_CH1 (__TIME__[7] - '0')
+#define BUILD_SEC (BUILD_SEC_CH0 * 10 + BUILD_SEC_CH1)
+
+#endif
\ No newline at end of file
diff --git a/include/Const.h b/include/Const.h
index a8b2f208..47841990 100644
--- a/include/Const.h
+++ b/include/Const.h
@@ -1,7 +1,8 @@
#pragma once
+#include "BuildTime.h"
// Версия прошивки
-#define FIRMWARE_VERSION 436
+#define FIRMWARE_VERSION 450
#ifdef esp8266_1mb_ota
#define FIRMWARE_NAME "esp8266_1mb_ota"
@@ -94,4 +95,4 @@ enum distination {
TO_MQTT_WS,
};
-#define WS_BROADCAST -1
\ No newline at end of file
+#define WS_BROADCAST -1
diff --git a/iotm/esp32_4mb/400/firmware.bin b/iotm/esp32_4mb/400/firmware.bin
new file mode 100644
index 00000000..83335b7b
Binary files /dev/null and b/iotm/esp32_4mb/400/firmware.bin differ
diff --git a/iotm/esp32_4mb/400/littlefs.bin b/iotm/esp32_4mb/400/littlefs.bin
new file mode 100644
index 00000000..0d4e51e0
Binary files /dev/null and b/iotm/esp32_4mb/400/littlefs.bin differ
diff --git a/iotm/esp32_4mb/400/partitions.bin b/iotm/esp32_4mb/400/partitions.bin
new file mode 100644
index 00000000..0e52b4c4
Binary files /dev/null and b/iotm/esp32_4mb/400/partitions.bin differ
diff --git a/iotm/ver.json b/iotm/ver.json
new file mode 100644
index 00000000..128ca01f
--- /dev/null
+++ b/iotm/ver.json
@@ -0,0 +1,5 @@
+{
+ "esp32_4mb": {
+ "0": "400"
+ }
+}
\ No newline at end of file
diff --git a/myProfile.json b/myProfile.json
index a38c07ac..01261688 100644
--- a/myProfile.json
+++ b/myProfile.json
@@ -24,8 +24,8 @@
},
"projectProp": {
"platformio": {
- "default_envs": "esp32_4mb",
- "comments_default_envs": "choose from: esp8266_4mb or esp32_4mb or esp8266_1mb or esp8266_1mb_ota or esp8285_1mb or esp8285_1mb_ota"
+ "default_envs": "esp8266_4mb",
+ "comments_default_envs": "choose from: esp8266_4mb or esp32_4mb or esp32s2_4mb or esp8266_1mb or esp8266_1mb_ota or esp8285_1mb or esp8285_1mb_ota"
}
},
"modules": {
diff --git a/platformio.ini b/platformio.ini
index b49081fb..7cf8c373 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -1,5 +1,5 @@
[platformio]
-default_envs = esp32_4mb
+default_envs = esp8266_4mb
data_dir = data_svelte
[common_env_data]
@@ -180,10 +180,10 @@ lib_deps =
${env:esp32s2_4mb_fromitems.lib_deps}
build_flags =
-Desp32s2_4mb="esp32s2_4mb"
- -DARDUINO_USB_CDC_ON_BOOT=1
- -DARDUINO_USB_MODE=0
+ -DARDUINO_USB_CDC_ON_BOOT=1
+ -DARDUINO_USB_MODE=0
framework = arduino
-board = lolin_s2_mini
+board = lolin_s2_mini
platform = espressif32 @6.3.1
monitor_filters = esp32_exception_decoder
upload_speed = 921600
@@ -394,7 +394,11 @@ lib_deps =
adafruit/Adafruit BMP280 Library
beegee-tokyo/DHT sensor library for ESPx
https://github.com/milesburton/Arduino-Temperature-Control-Library
+ https://github.com/jbechter/arduino-onewire-DS2423
+ paulstoffregen/OneWire @ ^2.3.7
https://github.com/tremaru/iarduino_RTC
+ Sensirion I2C SCD4x @0.4.0
+ Sensirion Core @0.6.0
robtillaart/SHT2x@^0.1.1
WEMOS SHT3x@1.0.0
plerup/EspSoftwareSerial
@@ -421,10 +425,13 @@ build_src_filter =
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+
+
@@ -444,23 +451,42 @@ build_src_filter =
[env:esp32_4mb_fromitems]
lib_deps =
- https://github.com/enjoyneering/AHTxx.git
- adafruit/Adafruit BME280 Library
- adafruit/Adafruit BMP280 Library
- beegee-tokyo/DHT sensor library for ESPx
https://github.com/milesburton/Arduino-Temperature-Control-Library
+ https://github.com/jbechter/arduino-onewire-DS2423
+ paulstoffregen/OneWire @ ^2.3.7
https://github.com/tremaru/iarduino_RTC
- robtillaart/SHT2x@^0.1.1
WEMOS SHT3x@1.0.0
plerup/EspSoftwareSerial
gyverlibs/EncButton @ ^2.0
- https://github.com/RoboticsBrno/ServoESP32
- adafruit/Adafruit MCP23017 Arduino Library@^2.1.0
adafruit/Adafruit BusIO @ ^1.13.2
- dfrobot/DFRobotDFPlayerMini @ ^1.0.5
- adafruit/Adafruit BusIO @ ^1.13.2
- https://github.com/robotclass/RobotClass_LiquidCrystal_I2C
- marcoschwartz/LiquidCrystal_I2C@^1.1.4
+build_src_filter =
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+[env:esp32s2_4mb_fromitems]
+lib_deps =
build_src_filter =
+
+
@@ -470,33 +496,5 @@ build_src_filter =
+
+
+
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
+
- +
-[env:esp32s2_4mb_fromitems]
-lib_deps =
-build_src_filter =
diff --git a/src/DeviceList.cpp b/src/DeviceList.cpp
index 32620625..96903e16 100644
--- a/src/DeviceList.cpp
+++ b/src/DeviceList.cpp
@@ -1,9 +1,5 @@
#include "DeviceList.h"
-// данная функция не записывает поле status из этого следует что поле равно false и поэтому весь список устройств отдаваемый мк
-// уходит со статусом для всех устройств - offline
-// приложение svelte хранит свой список и в нем поддерживает корректные статусы, а при получении этого списка
-// лишь изменяет в своем те элементы массива которые добавились новые, не трогая остальные
const String getThisDevice() {
String thisDevice = "{}";
// jsonWriteStr_(thisDevice, F("devicelist_"), ""); // метка для парсинга - она не нужна теперь
@@ -11,6 +7,10 @@ const String getThisDevice() {
jsonWriteStr_(thisDevice, F("ip"), jsonReadStr(settingsFlashJson, F("ip")));
jsonWriteStr_(thisDevice, F("id"), jsonReadStr(settingsFlashJson, F("id")));
jsonWriteStr_(thisDevice, F("name"), jsonReadStr(settingsFlashJson, F("name")));
+ // приложение svelte хранит свой список и в нем поддерживает корректные статусы, а при получении этого списка
+ // лишь изменяет в своем те элементы массива которые добавились новые, не трогая остальные
+ jsonWriteBool_(thisDevice, F("status"), false);
+ jsonWriteInt_(thisDevice, F("fv"), FIRMWARE_VERSION);
thisDevice = "[" + thisDevice + "]";
return thisDevice;
}
diff --git a/src/Main.cpp b/src/Main.cpp
index 1ba43a25..6185235f 100644
--- a/src/Main.cpp
+++ b/src/Main.cpp
@@ -99,7 +99,7 @@ void setup() {
Serial.println(F("--------------started----------------"));
// создание экземпляров классов
- // myNotAsyncActions = new NotAsync(do_LAST);
+ // myNotAsyncActions = new NotAsync(do_LAST);
// инициализация файловой системы
fileSystemInit();
@@ -107,6 +107,9 @@ void setup() {
Serial.println("FIRMWARE NAME " + String(FIRMWARE_NAME));
Serial.println("FIRMWARE VERSION " + String(FIRMWARE_VERSION));
Serial.println("WEB VERSION " + getWebVersion());
+ const String buildTime = String(BUILD_DAY) + "/" + String(BUILD_MONTH) + "/" + String(BUILD_YEAR) + " " + String(BUILD_HOUR) + ":" + String(BUILD_MIN) + ":" + String(BUILD_SEC);
+ Serial.println("BUILD TIME " + buildTime);
+ jsonWriteStr_(errorsHeapJson, F("bt"), buildTime);
Serial.println(F("------------------------"));
// получение chip id
diff --git a/src/UpgradeFirm.cpp b/src/UpgradeFirm.cpp
index aec4650f..ac0ad9a7 100644
--- a/src/UpgradeFirm.cpp
+++ b/src/UpgradeFirm.cpp
@@ -48,17 +48,19 @@ bool upgradeFS() {
#endif
#ifdef ESP32
httpUpdate.rebootOnUpdate(false);
- //обновляем little fs с помощью метода обновления spiffs
+ // обновляем little fs с помощью метода обновления spiffs
HTTPUpdateResult retFS = httpUpdate.updateSpiffs(wifiClient, getBinPath("littlefs.bin"));
#endif
- //если FS обновилась успешно
+ // если FS обновилась успешно
if (retFS == HTTP_UPDATE_OK) {
SerialPrint("!!!", F("Update"), F("FS upgrade done!"));
handleUpdateStatus(true, UPDATE_FS_COMPLETED);
ret = true;
+ } else {
+ handleUpdateStatus(true, UPDATE_FS_FAILED);
}
- handleUpdateStatus(true, UPDATE_FS_FAILED);
+
return ret;
}
@@ -72,7 +74,7 @@ bool upgradeBuild() {
handleUpdateStatus(true, PATH_ERROR);
return ret;
}
-#if defined (esp8266_4mb) || defined (esp8266_1mb) || defined (esp8266_1mb_ota) || defined (esp8266_2mb) || defined (esp8266_2mb_ota)
+#if defined(esp8266_4mb) || defined(esp8266_1mb) || defined(esp8266_1mb_ota) || defined(esp8266_2mb) || defined(esp8266_2mb_ota)
ESPhttpUpdate.rebootOnUpdate(false);
t_httpUpdate_return retBuild = ESPhttpUpdate.update(wifiClient, getBinPath("firmware.bin"));
#endif
@@ -81,13 +83,14 @@ bool upgradeBuild() {
HTTPUpdateResult retBuild = httpUpdate.update(wifiClient, getBinPath("firmware.bin"));
#endif
- //если BUILD обновился успешно
+ // если BUILD обновился успешно
if (retBuild == HTTP_UPDATE_OK) {
SerialPrint("!!!", F("Update"), F("BUILD upgrade done!"));
handleUpdateStatus(true, UPDATE_BUILD_COMPLETED);
ret = true;
+ } else {
+ handleUpdateStatus(true, UPDATE_BUILD_FAILED);
}
- handleUpdateStatus(true, UPDATE_BUILD_FAILED);
return ret;
}
@@ -132,5 +135,5 @@ void saveUserDataToFlash() {
void handleUpdateStatus(bool send, int state) {
jsonWriteInt_(errorsHeapJson, F("upd"), state);
- if (!send) sendStringToWs("errors", errorsHeapJson, -1);
+ if (send) sendStringToWs("errors", errorsHeapJson, -1);
}
\ No newline at end of file
diff --git a/src/WsServer.cpp b/src/WsServer.cpp
index 822dc881..c8886ab6 100644
--- a/src/WsServer.cpp
+++ b/src/WsServer.cpp
@@ -163,9 +163,15 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t* payload, size_t length)
// Страница веб интерфейса list
//----------------------------------------------------------------------//
- // отвечаем данными на запрос страницы
+ // отвечаем данными на запрос страницы list
if (headerStr == "/list|") {
sendStringToWs("settin", settingsFlashJson, num);
+ // отправим список устройств в зависимости от того что выбрал user
+ // sendDeviceList(num);
+ }
+
+ // отвечаем на запрос списка устройств (это отдельный запрос который делает приложение при подключении)
+ if (headerStr == "/devlist|") {
// отправим список устройств в зависимости от того что выбрал user
sendDeviceList(num);
}
diff --git a/src/modules/API.cpp b/src/modules/API.cpp
index 71529d10..643660ee 100644
--- a/src/modules/API.cpp
+++ b/src/modules/API.cpp
@@ -7,6 +7,7 @@ void* getAPI_Timer(String subtype, String params);
void* getAPI_Variable(String subtype, String params);
void* getAPI_VariableColor(String subtype, String params);
void* getAPI_VButton(String subtype, String params);
+void* getAPI_A02Distance(String subtype, String params);
void* getAPI_Acs712(String subtype, String params);
void* getAPI_AhtXX(String subtype, String params);
void* getAPI_AnalogAdc(String subtype, String params);
@@ -14,10 +15,13 @@ void* getAPI_Bme280(String subtype, String params);
void* getAPI_Bmp280(String subtype, String params);
void* getAPI_Dht1122(String subtype, String params);
void* getAPI_Ds18b20(String subtype, String params);
+void* getAPI_Ds2423(String subtype, String params);
void* getAPI_Impulse(String subtype, String params);
+void* getAPI_Ntc(String subtype, String params);
void* getAPI_Pzem004(String subtype, String params);
void* getAPI_RTC(String subtype, String params);
void* getAPI_S8(String subtype, String params);
+void* getAPI_Scd40(String subtype, String params);
void* getAPI_Sht20(String subtype, String params);
void* getAPI_Sht30(String subtype, String params);
void* getAPI_Sonar(String subtype, String params);
@@ -31,7 +35,7 @@ void* getAPI_Mcp23017(String subtype, String params);
void* getAPI_Mp3(String subtype, String params);
void* getAPI_Multitouch(String subtype, String params);
void* getAPI_Pcf8574(String subtype, String params);
-void* getAPI_Pwm32(String subtype, String params);
+void* getAPI_Pwm8266(String subtype, String params);
void* getAPI_TelegramLT(String subtype, String params);
void* getAPI_Lcd2004(String subtype, String params);
@@ -44,6 +48,7 @@ if ((tmpAPI = getAPI_Timer(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_Variable(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_VariableColor(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_VButton(subtype, params)) != nullptr) return tmpAPI;
+if ((tmpAPI = getAPI_A02Distance(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_Acs712(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_AhtXX(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_AnalogAdc(subtype, params)) != nullptr) return tmpAPI;
@@ -51,10 +56,13 @@ if ((tmpAPI = getAPI_Bme280(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_Bmp280(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_Dht1122(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_Ds18b20(subtype, params)) != nullptr) return tmpAPI;
+if ((tmpAPI = getAPI_Ds2423(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_Impulse(subtype, params)) != nullptr) return tmpAPI;
+if ((tmpAPI = getAPI_Ntc(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_Pzem004(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_RTC(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_S8(subtype, params)) != nullptr) return tmpAPI;
+if ((tmpAPI = getAPI_Scd40(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_Sht20(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_Sht30(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_Sonar(subtype, params)) != nullptr) return tmpAPI;
@@ -68,7 +76,7 @@ if ((tmpAPI = getAPI_Mcp23017(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_Mp3(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_Multitouch(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_Pcf8574(subtype, params)) != nullptr) return tmpAPI;
-if ((tmpAPI = getAPI_Pwm32(subtype, params)) != nullptr) return tmpAPI;
+if ((tmpAPI = getAPI_Pwm8266(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_TelegramLT(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_Lcd2004(subtype, params)) != nullptr) return tmpAPI;
return nullptr;
diff --git a/src/modules/virtual/Cron/modinfo.json b/src/modules/virtual/Cron/modinfo.json
index dd2c3dbd..f6a3f89f 100644
--- a/src/modules/virtual/Cron/modinfo.json
+++ b/src/modules/virtual/Cron/modinfo.json
@@ -28,7 +28,7 @@
"esp8266_4mb": 15
},
"title": "Будильник типа Cron",
- "moduleDesc": "Планировщик времени для периодического выполнения заданий в определённое время. Генерирует событие в указанное время по формату Cron https://ru.wikipedia.org/wiki/Cron ",
+ "moduleDesc": "Планировщик времени для периодического выполнения заданий в определённое время. Генерирует событие в указанное время по формату Cron https://ru.wikipedia.org/wiki/Cron . Но в данной реализации есть возможность задавать секундный интервал, поэтому слева необходимо добавить еще один разряд значений секунд - подробнее в базовой библиотеке https://github.com/staticlibs/ccronexpr",
"propInfo": {
"formatNextAlarm": "Формат представления даты и времени срабатывания следующего уведомления. http://cppstudio.com/post/621/",
"needSave": "Требуется сохранять(1) или нет(0) состояние в энерго независимую память."