Merge pull request #248 from IoTManagerProject/ver4dev

Ver4dev
This commit is contained in:
IoT Manager
2022-11-26 21:01:34 +01:00
committed by GitHub
23 changed files with 251 additions and 300 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -4,12 +4,12 @@
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>IoT Manager 4.4.2</title>
<title>IoT Manager 4.4.3</title>
<link rel="icon" type="image/png" href="/favicon.ico" />
<link rel="stylesheet" href="/build/bundle.css?442" />
<link rel="stylesheet" href="/build/bundle.css?443" />
<script defer src="/build/bundle.js?442"></script>
<script defer src="/build/bundle.js?443"></script>
</head>
<body></body>

View File

@@ -141,7 +141,25 @@
},
{
"global": 0,
"name": "10. Виртуальная кнопка",
"name": "10. Вывод значения",
"type": "Reading",
"subtype": "Variable",
"id": "vout",
"needSave": 0,
"widget": "anydataDef",
"page": "Вывод",
"descr": "Значение",
"int": "0",
"val": "0.0",
"map": "1024,1024,1,100",
"plus": 0,
"multiply": 1,
"round": 0,
"num": 10
},
{
"global": 0,
"name": "11. Виртуальная кнопка",
"type": "Reading",
"subtype": "VButton",
"id": "vbtn",
@@ -151,13 +169,13 @@
"descr": "Кнопка",
"int": "0",
"val": "0",
"num": 10
"num": 11
},
{
"header": "Сенсоры"
},
{
"name": "11. Acs712 Ток",
"name": "12. Acs712 Ток",
"type": "Reading",
"subtype": "Acs712",
"id": "amp",
@@ -167,11 +185,11 @@
"round": 3,
"pin": 39,
"int": 5,
"num": 11
"num": 12
},
{
"global": 0,
"name": "12. AHTXX Температура",
"name": "13. AHTXX Температура",
"type": "Reading",
"subtype": "AhtXXt",
"id": "Temp20",
@@ -182,11 +200,11 @@
"addr": "0x38",
"shtType": 1,
"round": 1,
"num": 12
"num": 13
},
{
"global": 0,
"name": "13. AHTXX Влажность",
"name": "14. AHTXX Влажность",
"type": "Reading",
"subtype": "AhtXXh",
"id": "Hum20",
@@ -197,11 +215,11 @@
"addr": "0x38",
"shtType": 1,
"round": 1,
"num": 13
"num": 14
},
{
"global": 0,
"name": "14. Аналоговый сенсор",
"name": "15. Аналоговый сенсор",
"type": "Reading",
"subtype": "AnalogAdc",
"id": "t",
@@ -215,11 +233,11 @@
"pin": 0,
"int": 15,
"avgSteps": 1,
"num": 14
"num": 15
},
{
"global": 0,
"name": "15. BME280 Температура",
"name": "16. BME280 Температура",
"type": "Reading",
"subtype": "Bme280t",
"id": "tmp3",
@@ -229,11 +247,11 @@
"int": 15,
"addr": "0x77",
"round": 1,
"num": 15
"num": 16
},
{
"global": 0,
"name": "16. BME280 Давление",
"name": "17. BME280 Давление",
"type": "Reading",
"subtype": "Bme280p",
"id": "Press3",
@@ -243,11 +261,11 @@
"int": 15,
"addr": "0x77",
"round": 1,
"num": 16
"num": 17
},
{
"global": 0,
"name": "17. BME280 Влажность",
"name": "18. BME280 Влажность",
"type": "Reading",
"subtype": "Bme280h",
"id": "Hum3",
@@ -257,11 +275,11 @@
"int": 15,
"addr": "0x77",
"round": 1,
"num": 17
"num": 18
},
{
"global": 0,
"name": "18. BMP280 Температура",
"name": "19. BMP280 Температура",
"type": "Reading",
"subtype": "Bmp280t",
"id": "tmp3",
@@ -271,11 +289,11 @@
"int": 15,
"addr": "0x77",
"round": 1,
"num": 18
"num": 19
},
{
"global": 0,
"name": "19. BMP280 Давление",
"name": "20. BMP280 Давление",
"type": "Reading",
"subtype": "Bmp280p",
"id": "Press3",
@@ -285,11 +303,11 @@
"int": 15,
"addr": "0x77",
"round": 1,
"num": 19
"num": 20
},
{
"global": 0,
"name": "20. DHT11 Температура",
"name": "21. DHT11 Температура",
"type": "Reading",
"subtype": "Dht1122t",
"id": "tmp3",
@@ -299,11 +317,11 @@
"int": 15,
"pin": 0,
"senstype": "dht11",
"num": 20
"num": 21
},
{
"global": 0,
"name": "21. DHT11 Влажность",
"name": "22. DHT11 Влажность",
"type": "Reading",
"subtype": "Dht1122h",
"id": "Hum3",
@@ -313,11 +331,11 @@
"int": 15,
"pin": 0,
"senstype": "dht11",
"num": 21
"num": 22
},
{
"global": 0,
"name": "22. DS18B20 Температура",
"name": "23. DS18B20 Температура",
"type": "Reading",
"subtype": "Ds18b20",
"id": "dstmp",
@@ -329,80 +347,11 @@
"index": 0,
"addr": "",
"round": 1,
"num": 22
},
{
"global": 0,
"name": "23. GY21 Температура",
"type": "Reading",
"subtype": "GY21t",
"id": "tmp4",
"widget": "anydataTmp",
"page": "Сенсоры",
"descr": "Температура",
"round": 1,
"int": 15,
"num": 23
},
{
"global": 0,
"name": "24. GY21 Влажность",
"type": "Reading",
"subtype": "GY21h",
"id": "Hum4",
"widget": "anydataHum",
"page": "Сенсоры",
"descr": "Влажность",
"round": 1,
"int": 15,
"num": 24
},
{
"global": 0,
"name": "25. HDC1080 Температура",
"type": "Reading",
"subtype": "Hdc1080t",
"id": "Temp1080",
"widget": "anydataTmp",
"page": "Сенсоры",
"descr": "1080 Температура",
"int": 15,
"addr": "0x40",
"round": 1,
"num": 25
},
{
"global": 0,
"name": "26. HDC1080 Влажность",
"type": "Reading",
"subtype": "Hdc1080h",
"id": "Hum1080",
"widget": "anydataHum",
"page": "Сенсоры",
"descr": "1080 Влажность",
"int": 15,
"addr": "0x40",
"round": 1,
"num": 26
},
{
"global": 0,
"name": "27. MAX6675 Температура",
"type": "Reading",
"subtype": "Max6675t",
"id": "maxtmp",
"widget": "anydataTmp",
"page": "Сенсоры",
"descr": "MAX Температура",
"int": 15,
"DO": 12,
"CS": 13,
"CLK": 14,
"num": 27
},
{
"global": 0,
"name": "28. PZEM 004t Напряжение",
"name": "24. PZEM 004t Напряжение",
"type": "Reading",
"subtype": "Pzem004v",
"id": "v",
@@ -412,11 +361,11 @@
"int": 15,
"addr": "0xF8",
"round": 1,
"num": 28
"num": 24
},
{
"global": 0,
"name": "29. PZEM 004t Сила тока",
"name": "25. PZEM 004t Сила тока",
"type": "Reading",
"subtype": "Pzem004a",
"id": "a",
@@ -426,11 +375,11 @@
"int": 15,
"addr": "0xF8",
"round": 1,
"num": 29
"num": 25
},
{
"global": 0,
"name": "30. PZEM 004t Мощность",
"name": "26. PZEM 004t Мощность",
"type": "Reading",
"subtype": "Pzem004w",
"id": "w",
@@ -440,11 +389,11 @@
"int": 15,
"addr": "0xF8",
"round": 1,
"num": 30
"num": 26
},
{
"global": 0,
"name": "31. PZEM 004t Энергия",
"name": "27. PZEM 004t Энергия",
"type": "Reading",
"subtype": "Pzem004wh",
"id": "wh",
@@ -454,11 +403,11 @@
"int": 15,
"addr": "0xF8",
"round": 1,
"num": 31
"num": 27
},
{
"global": 0,
"name": "32. PZEM 004t Частота",
"name": "28. PZEM 004t Частота",
"type": "Reading",
"subtype": "Pzem004hz",
"id": "hz",
@@ -468,11 +417,11 @@
"int": 15,
"addr": "0xF8",
"round": 1,
"num": 32
"num": 28
},
{
"global": 0,
"name": "33. PZEM 004t Косинус",
"name": "29. PZEM 004t Косинус",
"type": "Reading",
"subtype": "Pzem004pf",
"id": "pf",
@@ -482,22 +431,11 @@
"int": 15,
"addr": "0xF8",
"round": 1,
"num": 33
"num": 29
},
{
"global": 0,
"name": "34. Сканер кнопок 433 MHz",
"num": 34,
"type": "Reading",
"subtype": "RCswitch",
"id": "rsw",
"int": 500,
"pinRx": 12,
"pinTx": 12
},
{
"global": 0,
"name": "35. Sht20 Температура",
"name": "30. Sht20 Температура",
"type": "Reading",
"subtype": "Sht20t",
"id": "tmp2",
@@ -506,11 +444,11 @@
"descr": "Температура",
"int": 15,
"round": 1,
"num": 35
"num": 30
},
{
"global": 0,
"name": "36. Sht20 Влажность",
"name": "31. Sht20 Влажность",
"type": "Reading",
"subtype": "Sht20h",
"id": "Hum2",
@@ -519,11 +457,11 @@
"descr": "Влажность",
"int": 15,
"round": 1,
"num": 36
"num": 31
},
{
"global": 0,
"name": "37. Sht30 Температура",
"name": "32. Sht30 Температура",
"type": "Reading",
"subtype": "Sht30t",
"id": "tmp30",
@@ -532,11 +470,11 @@
"descr": "SHT30 Температура",
"int": 15,
"round": 1,
"num": 37
"num": 32
},
{
"global": 0,
"name": "38. Sht30 Влажность",
"name": "33. Sht30 Влажность",
"type": "Reading",
"subtype": "Sht30h",
"id": "Hum30",
@@ -545,12 +483,12 @@
"descr": "SHT30 Влажность",
"int": 15,
"round": 1,
"num": 38
"num": 33
},
{
"global": 0,
"name": "39. HC-SR04 Ультразвуковой дальномер",
"num": 39,
"name": "34. HC-SR04 Ультразвуковой дальномер",
"num": 34,
"type": "Reading",
"subtype": "Sonar",
"id": "sonar",
@@ -562,7 +500,7 @@
"int": 5
},
{
"name": "40. UART",
"name": "35. UART",
"type": "Reading",
"subtype": "UART",
"page": "",
@@ -574,14 +512,14 @@
"line": 2,
"speed": 9600,
"eventFormat": 0,
"num": 40
"num": 35
},
{
"header": "Исполнительные устройства"
},
{
"global": 0,
"name": "41. Кнопка подключенная к пину",
"name": "36. Кнопка подключенная к пину",
"type": "Writing",
"subtype": "ButtonIn",
"id": "btn",
@@ -595,11 +533,11 @@
"pinMode": "INPUT",
"debounceDelay": 50,
"fixState": 0,
"num": 41
"num": 36
},
{
"global": 0,
"name": "42. Управление пином",
"name": "37. Управление пином",
"type": "Writing",
"subtype": "ButtonOut",
"needSave": 0,
@@ -610,11 +548,11 @@
"int": 0,
"inv": 0,
"pin": 2,
"num": 42
"num": 37
},
{
"global": 0,
"name": "43. Сервопривод",
"name": "38. Сервопривод",
"type": "Writing",
"subtype": "IoTServo",
"id": "servo",
@@ -625,11 +563,11 @@
"pin": 12,
"apin": -1,
"amap": "0, 4096, 0, 180",
"num": 43
"num": 38
},
{
"global": 0,
"name": "44. Расширитель портов Mcp23017",
"name": "39. Расширитель портов Mcp23017",
"type": "Reading",
"subtype": "Mcp23017",
"id": "Mcp",
@@ -639,11 +577,11 @@
"int": "0",
"addr": "0x20",
"index": 1,
"num": 44
"num": 39
},
{
"global": 0,
"name": "45. MP3 плеер",
"name": "40. MP3 плеер",
"type": "Reading",
"subtype": "Mp3",
"id": "mp3",
@@ -653,11 +591,11 @@
"int": 1,
"pins": "14,12",
"volume": 20,
"num": 45
"num": 40
},
{
"global": 0,
"name": "46. Сенсорная кнопка",
"name": "41. Сенсорная кнопка",
"type": "Writing",
"subtype": "Multitouch",
"id": "impulse",
@@ -671,11 +609,11 @@
"pinMode": "INPUT",
"debounceDelay": 50,
"PWMDelay": 500,
"num": 46
"num": 41
},
{
"global": 0,
"name": "47. Расширитель портов Pcf8574",
"name": "42. Расширитель портов Pcf8574",
"type": "Reading",
"subtype": "Pcf8574",
"id": "Pcf",
@@ -685,11 +623,11 @@
"int": "0",
"addr": "0x20",
"index": 1,
"num": 47
"num": 42
},
{
"global": 0,
"name": "48. PWM ESP8266",
"name": "43. PWM ESP8266",
"type": "Writing",
"subtype": "Pwm8266",
"id": "pwm",
@@ -701,11 +639,11 @@
"freq": 5000,
"val": 0,
"apin": -1,
"num": 48
"num": 43
},
{
"global": 0,
"name": "49. Телеграм-Лайт",
"name": "44. Телеграм-Лайт",
"type": "Writing",
"subtype": "TelegramLT",
"id": "tg",
@@ -714,14 +652,14 @@
"descr": "",
"token": "",
"chatID": "",
"num": 49
"num": 44
},
{
"header": "Экраны"
},
{
"global": 0,
"name": "50. LCD экран 2004",
"name": "45. LCD экран 2004",
"type": "Reading",
"subtype": "Lcd2004",
"id": "Lcd",
@@ -733,10 +671,10 @@
"size": "20,4",
"coord": "0,0",
"id2show": "id датчика",
"num": 50
"num": 45
},
{
"name": "51. LCD экран 1602",
"name": "46. LCD экран 1602",
"type": "Reading",
"subtype": "Lcd2004",
"id": "Lcd",
@@ -748,26 +686,6 @@
"size": "16,2",
"coord": "0,0",
"id2show": "id датчика",
"num": 51
},
{
"global": 0,
"name": "52. Strip ws2812b",
"type": "Reading",
"subtype": "Ws2812b",
"id": "strip",
"widget": "range",
"page": "Кнопки",
"descr": "Лента",
"int": 15,
"needSave": 0,
"pin": "4",
"numLeds": "8",
"brightness": "100",
"mode": "1",
"min": "15",
"max": "30",
"idshow": "t",
"num": 52
"num": 46
}
]

1
data_svelte/layout.json Normal file
View File

@@ -0,0 +1 @@
[]

View File

@@ -8,7 +8,7 @@
"ntp": "pool.ntp.org",
"weblogin": "admin",
"webpass": "admin",
"mqttServer": "m2.wqtt.ru",
"mqttServer": "",
"mqttPort": 8021,
"mqttPrefix": "/risenew",
"mqttUser": "rise",

View File

@@ -0,0 +1 @@
[]

View File

@@ -1,7 +1,7 @@
#pragma once
//Версия прошивки
#define FIRMWARE_VERSION 432
#define FIRMWARE_VERSION 433
#ifdef esp8266_1mb_ota
#define FIRMWARE_NAME "esp8266_1mb_ota"
@@ -20,7 +20,7 @@
#endif
//Размер буфера json
#define JSON_BUFFER_SIZE 2048
#define JSON_BUFFER_SIZE 2048 //держим 2 кб не меняем
#define WEB_SOCKETS_FRAME_SIZE 2048
//#define LOOP_DEBUG
@@ -36,7 +36,6 @@
//#define REST_FILE_OPERATIONS
#define MQTT_RECONNECT_INTERVAL 20000
#define CHANGE_BROKER_AFTER 5
#define TELEMETRY_UPDATE_INTERVAL_MIN 60

View File

@@ -51,6 +51,7 @@ class IoTItem {
// хуки для системных событий
virtual void onRegEvent(IoTItem* item);
virtual void onMqttRecive(String& topic, String& msg);
//методы для графиков
virtual void publishValue();

View File

@@ -51,7 +51,7 @@ class IoTScenario {
int GetTokPrecedence();
/// Error* - Это небольшие вспомогательные функции для обработки ошибок.
ExprAST *Error(const char *Str);
ExprAST *Error(const String& Str);
/// identifierexpr
/// ::= identifier

View File

@@ -9,7 +9,7 @@
"ntp": "pool.ntp.org",
"weblogin": "admin",
"webpass": "admin",
"mqttServer": "m2.wqtt.ru",
"mqttServer": "",
"mqttPort": 8021,
"mqttPrefix": "/risenew",
"mqttUser": "rise",
@@ -101,11 +101,19 @@
},
{
"path": "src/modules/sensors/GY21",
"active": true
"active": false
},
{
"path": "src/modules/sensors/Hdc1080",
"active": true
"active": false
},
{
"path": "src/modules/sensors/Hx710",
"active": false
},
{
"path": "src/modules/sensors/Hx711",
"active": false
},
{
"path": "src/modules/sensors/Ina219",
@@ -117,7 +125,7 @@
},
{
"path": "src/modules/sensors/Max6675",
"active": true
"active": false
},
{
"path": "src/modules/sensors/Mhz19",
@@ -129,12 +137,16 @@
},
{
"path": "src/modules/sensors/RCswitch",
"active": true
"active": false
},
{
"path": "src/modules/sensors/Sds011",
"active": false
},
{
"path": "src/modules/sensors/Sgp30",
"active": false
},
{
"path": "src/modules/sensors/Sht20",
"active": true
@@ -217,7 +229,7 @@
},
{
"path": "src/modules/display/Ws2812b",
"active": true
"active": false
}
]
}

View File

@@ -144,10 +144,6 @@ lib_deps =
adafruit/Adafruit BMP280 Library
beegee-tokyo/DHT sensor library for ESPx
milesburton/DallasTemperature@^3.9.1
https://github.com/JonasGMorsch/GY-21.git
ClosedCube HDC1080
adafruit/MAX6675 library
rc-switch @ ^2.6.4
robtillaart/SHT2x@^0.1.1
WEMOS SHT3x@1.0.0
plerup/espsoftwareserial
@@ -156,7 +152,6 @@ lib_deps =
dfrobot/DFRobotDFPlayerMini @ ^1.0.5
adafruit/Adafruit BusIO @ ^1.13.2
marcoschwartz/LiquidCrystal_I2C@^1.1.4
adafruit/Adafruit NeoPixel@^1.10.6
build_src_filter =
+<modules/virtual/Cron>
+<modules/virtual/Loging>
@@ -171,11 +166,7 @@ build_src_filter =
+<modules/sensors/Bmp280>
+<modules/sensors/Dht1122>
+<modules/sensors/Ds18b20>
+<modules/sensors/GY21>
+<modules/sensors/Hdc1080>
+<modules/sensors/Max6675>
+<modules/sensors/Pzem004t>
+<modules/sensors/RCswitch>
+<modules/sensors/Sht20>
+<modules/sensors/Sht30>
+<modules/sensors/Sonar>
@@ -190,7 +181,6 @@ build_src_filter =
+<modules/exec/Pwm8266>
+<modules/exec/TelegramLT>
+<modules/display/Lcd2004>
+<modules/display/Ws2812b>
[env:esp32_4mb_fromitems]
lib_deps =
@@ -199,10 +189,6 @@ lib_deps =
adafruit/Adafruit BMP280 Library
beegee-tokyo/DHT sensor library for ESPx
milesburton/DallasTemperature@^3.9.1
https://github.com/JonasGMorsch/GY-21.git
ClosedCube HDC1080
adafruit/MAX6675 library
rc-switch @ ^2.6.4
robtillaart/SHT2x@^0.1.1
WEMOS SHT3x@1.0.0
plerup/espsoftwareserial
@@ -212,8 +198,8 @@ lib_deps =
dfrobot/DFRobotDFPlayerMini @ ^1.0.5
adafruit/Adafruit BusIO @ ^1.13.2
marcoschwartz/LiquidCrystal_I2C@^1.1.4
adafruit/Adafruit NeoPixel@^1.10.6
build_src_filter =
+<modules/virtual/Cron>
+<modules/virtual/Loging>
+<modules/virtual/LogingDaily>
+<modules/virtual/Timer>
@@ -226,11 +212,7 @@ build_src_filter =
+<modules/sensors/Bmp280>
+<modules/sensors/Dht1122>
+<modules/sensors/Ds18b20>
+<modules/sensors/GY21>
+<modules/sensors/Hdc1080>
+<modules/sensors/Max6675>
+<modules/sensors/Pzem004t>
+<modules/sensors/RCswitch>
+<modules/sensors/Sht20>
+<modules/sensors/Sht30>
+<modules/sensors/Sonar>
@@ -240,9 +222,9 @@ build_src_filter =
+<modules/exec/IoTServo>
+<modules/exec/Mcp23017>
+<modules/exec/Mp3>
+<modules/exec/Multitouch>
+<modules/exec/Pcf8574>
+<modules/exec/Pwm32>
+<modules/exec/TelegramLT>
+<modules/display/Lcd2004>
+<modules/display/Ws2812b>

View File

@@ -125,9 +125,10 @@ void mqttCallback(char* topic, uint8_t* payload, size_t length) {
payloadStr += (char)payload[i];
}
// SerialPrint("i", "=>MQTT", payloadStr);
// SerialPrint("i", F("=>MQTT"), "Msg from iotmanager: " + topicStr);
// распространяем принятое сообщение через хуки
for (std::list<IoTItem*>::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it) {
(*it)->onMqttRecive(topicStr, payloadStr);
}
if (payloadStr.startsWith("HELLO")) {
SerialPrint("i", F("MQTT"), F("Full update"));
@@ -188,7 +189,7 @@ void mqttCallback(char* topic, uint8_t* payload, size_t length) {
// loadScenario();
// SerialPrint("i", F("=>MQTT"), F("Scenario received"));
// }
//}
//}
}
boolean publish(const String& topic, const String& data) {

View File

@@ -175,6 +175,8 @@ void IoTItem::checkIntFromNet() {
void IoTItem::onRegEvent(IoTItem* item) {}
void IoTItem::onMqttRecive(String& topic, String& msg) {}
void IoTItem::publishValue() {}
void IoTItem::clearValue() {}

View File

@@ -4,6 +4,16 @@
#include "utils/FileUtils.h"
#include "NTP.h"
// вызываем все нужное пока зависаем в сценариях
void scenario_yield() {
yield();
#ifdef STANDARD_WEB_SERVER
HTTP.handleClient();
#endif
}
bool isIotScenException = false; // признак исключения и попытки прекратить выполнение сценария заранее
// Лексический анализатор возвращает токены [0-255], если это неизвестны,
@@ -286,7 +296,7 @@ class CallExprAST : public ExprAST {
//if (!ItemIsLocal) Item = findIoTItem(Callee); // пробуем найти переменную если она не локальная (могла придти по сети в процессе)
if (!Item) return nullptr; // ret = zeroIotVal; // если все же не пришла, то либо опечатка, либо уже стерлась - выходим
if (Cmd == "getIntFromNet") {
if (Cmd == F("getIntFromNet")) {
ret.valD = Item->getIntFromNet();
ret.isDecimal = true;
return &ret;
@@ -457,43 +467,43 @@ class SysCallExprAST : public ExprAST {
public:
SysCallExprAST(const String &callee, std::vector<ExprAST *> &args)
: Callee(callee), Args(args) {
if (Callee == "reboot")
if (Callee == F("reboot"))
operation = sysop_reboot;
else if (Callee == "digitalRead")
else if (Callee == F("digitalRead"))
operation = sysop_digitalRead;
else if (Callee == "analogRead")
else if (Callee == F("analogRead"))
operation = sysop_analogRead;
else if (Callee == "digitalWrite")
else if (Callee == F("digitalWrite"))
operation = sysop_digitalWrite;
else if (Callee == "digitalInvert")
else if (Callee == F("digitalInvert"))
operation = sysop_digitalInvert;
else if (Callee == "deepSleep")
else if (Callee == F("deepSleep"))
operation = sysop_deepSleep;
else if (Callee == "getTime")
else if (Callee == F("getTime"))
operation = sysop_getTime;
else if (Callee == "getHours")
else if (Callee == F("getHours"))
operation = sysop_getHours;
else if (Callee == "getMinutes")
else if (Callee == F("getMinutes"))
operation = sysop_getMinutes;
else if (Callee == "getSeconds")
else if (Callee == F("getSeconds"))
operation = sysop_getSeconds;
else if (Callee == "getMonth")
else if (Callee == F("getMonth"))
operation = sysop_getMonth;
else if (Callee == "getDay")
else if (Callee == F("getDay"))
operation = sysop_getDay;
else if (Callee == "getRSSI")
else if (Callee == F("getRSSI"))
operation = sysop_getRSSI;
else if (Callee == "getIP")
else if (Callee == F("getIP"))
operation = sysop_getIP;
else if (Callee == "mqttPub")
else if (Callee == F("mqttPub"))
operation = sysop_mqttPub;
else if (Callee == "gethhmm")
else if (Callee == F("gethhmm"))
operation = sysop_gethhmm;
else if (Callee == "gethhmmss")
else if (Callee == F("gethhmmss"))
operation = sysop_gethhmmss;
else if (Callee == "getTime")
else if (Callee == F("getTime"))
operation = sysop_getTime;
else if (Callee == "getUptime")
else if (Callee == F("getUptime"))
operation = sysop_getUptime;
else
operation = sysop_notfound;
@@ -573,6 +583,9 @@ class IfExprAST : public ExprAST {
// else if (res_ret->isDecimal) Serial.printf("Call from IfExprAST: Cond result = %f, result = %f\n", cond_ret->valD, res_ret->valD);
// else Serial.printf("Call from IfExprAST: Cond result = %f, result = %s\n", cond_ret->valD, res_ret->valS.c_str());
//Serial.printf("\n");
scenario_yield();
return cond_ret;
}
@@ -777,8 +790,8 @@ int IoTScenario::GetTokPrecedence() {
}
/// Error* - Это небольшие вспомогательные функции для обработки ошибок.
ExprAST *IoTScenario::Error(const char *Str) {
Serial.printf("Scenario error in line %d: %s\n", curLine, Str);
ExprAST *IoTScenario::Error(const String& Str) {
Serial.printf("Scenario error in line %d: %s\n", curLine, Str.c_str());
isIotScenException = true;
return nullptr;
}
@@ -821,7 +834,7 @@ ExprAST *IoTScenario::ParseIdentifierExpr(String *IDNames, bool callFromConditio
if (CurTok == ')') break;
if (CurTok != ',') {
return Error("Expected ')' or ',' in argument list");
return Error(F("Expected ')' or ',' in argument list"));
}
getNextToken();
}
@@ -878,7 +891,7 @@ ExprAST *IoTScenario::ParseBracketsExpr(String *IDNames, bool callFromCondition)
// int ttok = getNextToken();
if (CurTok == tok_eof) {
return Error("Expected '}'");
return Error(F("Expected '}'"));
}
}
@@ -933,7 +946,7 @@ ExprAST *IoTScenario::ParsePrimary(String *IDNames, bool callFromCondition) {
switch (CurTok) {
default:
Serial.println(CurTok);
return Error("unknown token when expecting an expression");
return Error(F("unknown token when expecting an expression"));
case tok_identifier: {
if (callFromCondition && IDNames) {
String tmpstr = *IDNames;
@@ -1005,13 +1018,13 @@ void IoTScenario::loadScenario(String fileName) { // подготавливае
if (file) file.close();
file = FileFS.open(fileName.c_str(), "r");
if (!file) {
Error("Open file scenario error");
Error(F("Open file scenario error"));
return;
}
} else if (mode == 1) {
file = FileFS.open(fileName.c_str(), "r");
if (!file) {
Error("Open file scenario error");
Error(F("Open file scenario error"));
return;
}
strFromFile = file.readString();

View File

@@ -13,11 +13,7 @@ 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_GY21(String subtype, String params);
void* getAPI_Hdc1080(String subtype, String params);
void* getAPI_Max6675(String subtype, String params);
void* getAPI_Pzem004(String subtype, String params);
void* getAPI_RCswitch(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);
@@ -32,7 +28,6 @@ void* getAPI_Pcf8574(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);
void* getAPI_Ws2812b(String subtype, String params);
void* getAPI(String subtype, String params) {
void* tmpAPI;
@@ -49,11 +44,7 @@ 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_GY21(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_Hdc1080(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_Max6675(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_Pzem004(subtype, params)) != nullptr) return tmpAPI;
if ((tmpAPI = getAPI_RCswitch(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,6 +59,5 @@ if ((tmpAPI = getAPI_Pcf8574(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;
if ((tmpAPI = getAPI_Ws2812b(subtype, params)) != nullptr) return tmpAPI;
return nullptr;
}

View File

@@ -1,26 +1,26 @@
{
{
"menuSection": "Экраны",
"configItem": [
{
"global": 0,
"name": "Strip ws2812b",
"type": "Reading",
"subtype": "Ws2812b",
"id": "strip",
"widget": "range",
"page": "Кнопки",
"descr": "Лента",
"int": 15,
"needSave": 0,
"pin": "4",
"numLeds": "8",
"brightness": "100",
"mode": "1",
"min": "15",
"max": "30",
"idshow": "t"
}],
{
"global": 0,
"name": "Strip ws2812b",
"type": "Reading",
"subtype": "Ws2812b",
"id": "strip",
"widget": "range",
"page": "Кнопки",
"descr": "Лента",
"int": 15,
"needSave": 0,
"pin": "4",
"numLeds": "8",
"brightness": "100",
"mode": "1",
"min": "15",
"max": "30",
"idshow": "t"
}
],
"about": {
"authorName": "Yuriy Kuneev",
"authorContact": "https://t.me/Kuneev07",
@@ -44,7 +44,9 @@
{
"name": "noShow",
"descr": "Выключить ленту",
"params": ["номер пикселя"]
"params": [
"номер пикселя"
]
},
{
"name": "noShowOne",
@@ -59,17 +61,26 @@
{
"name": "showLed",
"descr": "Зажечь один диод",
"params": ["номер пикселя","цвет 255,255,255 или red,green"]
"params": [
"номер пикселя",
"цвет 255,255,255 или red,green"
]
},
{
"name": "showLedAll",
"descr": "Зажечь все диоды",
"params": ["Цвет красного светодиода от 0 до 255","Цвет зеленого светодиода от 0 до 255","Цвет синего светодиода от 0 до 255"]
"params": [
"Цвет красного светодиода от 0 до 255",
"Цвет зеленого светодиода от 0 до 255",
"Цвет синего светодиода от 0 до 255"
]
},
{
"name": "Brightness",
"descr": "Устанавливает общую яркость ленты от 0 до 255",
"params": ["яркость от 0 до 255"]
"params": [
"яркость от 0 до 255"
]
},
{
"name": "enableIndication",
@@ -83,15 +94,13 @@
}
]
},
"defActive": true,
"defActive": false,
"usedLibs": {
"esp32_4mb": [
"adafruit/Adafruit NeoPixel@^1.10.6"
],
"esp8266_4mb": [
"adafruit/Adafruit NeoPixel@^1.10.6"
"adafruit/Adafruit NeoPixel@^1.10.6"
]
}
}

View File

@@ -47,7 +47,7 @@
"int": "Количество секунд между опросами датчика."
}
},
"defActive": true,
"defActive": false,
"usedLibs": {
"esp32_4mb": [
"https://github.com/JonasGMorsch/GY-21.git"

View File

@@ -50,7 +50,7 @@
"int": "Количество секунд между опросами датчика."
}
},
"defActive": true,
"defActive": false,
"usedLibs": {
"esp32_4mb": [
"ClosedCube HDC1080"

View File

@@ -36,7 +36,7 @@
"int": "Количество секунд между опросами датчика."
}
},
"defActive": true,
"defActive": false,
"usedLibs": {
"esp32_4mb": [
"adafruit/MAX6675 library"

View File

@@ -1,18 +1,18 @@
{
{
"menuSection": "Сенсоры",
"configItem": [{
"global": 0,
"name": "Сканер кнопок 433 MHz",
"num": 31,
"type": "Reading",
"subtype": "RCswitch",
"id": "rsw",
"int": 500,
"pinRx": 12,
"pinTx": 12
}],
"configItem": [
{
"global": 0,
"name": "Сканер кнопок 433 MHz",
"num": 31,
"type": "Reading",
"subtype": "RCswitch",
"id": "rsw",
"int": 500,
"pinRx": 12,
"pinTx": 12
}
],
"about": {
"authorName": "Serghei Crasnicov",
"authorContact": "https://t.me/Serghei63",
@@ -36,23 +36,28 @@
{
"name": "sendBitStr",
"descr": "Отправляем строку вида 000000000001010100010001",
"params": ["Строка 000000000001010100010001"]
"params": [
"Строка 000000000001010100010001"
]
},
{
"name": "sendTriState",
"descr": "отправляем строку вида 00000FFF0F0F",
"params": ["Строка 00000FFF0F0F"]
"params": [
"Строка 00000FFF0F0F"
]
},
{
"name": "sendDecimal",
"descr": "отправляем строку вида 5393",
"params": ["Код в виде числа", "Количество бит чтоб заполнить нулями"]
"params": [
"Код в виде числа",
"Количество бит чтоб заполнить нулями"
]
}
]
},
"defActive": true,
"defActive": false,
"usedLibs": {
"esp32_4mb": [
"rc-switch @ ^2.6.4"

View File

@@ -56,6 +56,23 @@
"descr": "Введите текст",
"int": "0",
"val": "текст"
},
{
"global": 0,
"name": "Вывод значения",
"type": "Reading",
"subtype": "Variable",
"id": "vout",
"needSave": 0,
"widget": "anydataDef",
"page": "Вывод",
"descr": "Значение",
"int": "0",
"val": "0.0",
"map": "1024,1024,1,100",
"plus": 0,
"multiply": 1,
"round": 0
}
],
"about": {

View File

@@ -13,7 +13,7 @@ void SerialPrint(const String& errorLevel, const String& module, const String& m
if (isNetworkActive()) {
if (jsonReadInt(settingsFlashJson, F("log")) != 0) {
sendStringToWs("corelg", tosend, -1);
sendStringToWs(F("corelg"), tosend, -1);
}
}
@@ -21,7 +21,7 @@ void SerialPrint(const String& errorLevel, const String& module, const String& m
cleanString(tosend);
// создаем событие об ошибке для возможной реакции в сценарии
if (itemId != "") {
createItemFromNet(itemId + "_onError", tosend, -4);
createItemFromNet(itemId + F("_onError"), tosend, -4);
} else {
// createItemFromNet("onError", tosend, -4);
}