diff --git a/.vscode/extensions.json b/.vscode/extensions.json deleted file mode 100644 index 080e70d0..00000000 --- a/.vscode/extensions.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - // See http://go.microsoft.com/fwlink/?LinkId=827846 - // for the documentation about the extensions.json format - "recommendations": [ - "platformio.platformio-ide" - ], - "unwantedRecommendations": [ - "ms-vscode.cpptools-extension-pack" - ] -} diff --git a/.vscode/settings.json b/.vscode/settings.json index 116834c5..72690792 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,13 +1,15 @@ { "files.associations": { - "*.tcc": "cpp", - "fstream": "cpp", - "ratio": "cpp", "system_error": "cpp", - "array": "cpp", - "functional": "cpp", - "tuple": "cpp", - "type_traits": "cpp", - "utility": "cpp" + "xlocale": "cpp", + "deque": "cpp", + "initializer_list": "cpp", + "list": "cpp", + "vector": "cpp", + "xhash": "cpp", + "xiosbase": "cpp", + "xstring": "cpp", + "xtree": "cpp", + "xutility": "cpp" } } \ No newline at end of file diff --git a/platformio.ini b/platformio.ini index e49cd758..6ea3592c 100644 --- a/platformio.ini +++ b/platformio.ini @@ -7,7 +7,7 @@ build_flags = -Desp8266_4mb="esp8266_4mb" framework = arduino board = nodemcuv2 board_build.ldscript = eagle.flash.4m1m.ld -platform = espressif8266 @2.6.3 +platform = espressif8266 @4.0.1 monitor_filters = esp8266_exception_decoder upload_speed = 921600 monitor_speed = 115200 @@ -27,7 +27,7 @@ lib_deps = build_flags = -Desp32_4mb="esp32_4mb" framework = arduino board = esp32dev -platform = espressif32 @3.3.0 +platform = espressif32 monitor_filters = esp32_exception_decoder upload_speed = 921600 monitor_speed = 115200 diff --git a/src/WsServer.cpp b/src/WsServer.cpp index fb549f6c..c2e62877 100644 --- a/src/WsServer.cpp +++ b/src/WsServer.cpp @@ -299,7 +299,8 @@ void hexdump(const void* mem, uint32_t len, uint8_t cols = 16) { //посылка данных из файла в бинарном виде void sendFileToWs(const char* filename, uint8_t num, size_t frameSize) { - standWebSocket.sendTXT(num, "/st" + String(filename)); + String st = "/st" + String(filename); + standWebSocket.sendTXT(num, st); String path = filepath(filename); auto file = FileFS.open(path, "r"); if (!file) { @@ -315,17 +316,20 @@ void sendFileToWs(const char* filename, uint8_t num, size_t frameSize) { countRead = file.read(payload, sizeof(payload)); } file.close(); - standWebSocket.sendTXT(num, "/end" + String(filename)); + String end = "/end" + String(filename); + standWebSocket.sendTXT(num, end); } //посылка данных из string void sendStringToWs(const String& msg, uint8_t num, String name) { - standWebSocket.sendTXT(num, "/st" + String(name)); + String st = "/st" + String(name); + standWebSocket.sendTXT(num, st); size_t size = msg.length(); char dataArray[size]; msg.toCharArray(dataArray, size); standWebSocket.sendBIN(num, (uint8_t*)dataArray, size); - standWebSocket.sendTXT(num, "/end" + String(name)); + String end = "/end" + String(name); + standWebSocket.sendTXT(num, end); } // void sendMark(const char* filename, const char* mark, uint8_t num) { diff --git a/src/classes/IoTScenario.cpp b/src/classes/IoTScenario.cpp index a6102fb2..a7bacf70 100644 --- a/src/classes/IoTScenario.cpp +++ b/src/classes/IoTScenario.cpp @@ -5,7 +5,6 @@ #include "utils/FileUtils.h" #include "NTP.h" - bool isIotScenException = false; // признак исключения и попытки прекратить выполнение сценария заранее // Лексический анализатор возвращает токены [0-255], если это неизвестны, @@ -46,7 +45,7 @@ class NumberExprAST : public ExprAST { IoTValue Val; public: - NumberExprAST(String val) { + NumberExprAST(String val) { Val.valD = strtod(val.c_str(), 0); Val.valS = val; } @@ -147,7 +146,7 @@ class BinaryExprAST : public ExprAST { if (RHS == nullptr || LHS == nullptr) return nullptr; IoTValue *rhs = RHS->exec(); // получаем значение правого операнда для возможного использования в операции присваивания - + if (Op == '=' && LHS->setValue(rhs)) { // если установка значения не поддерживается, т.е. слева не переменная, то работаем по другим комбинациям далее return rhs; // иначе возвращаем присвоенное значение справа } @@ -470,7 +469,7 @@ class SysCallExprAST : public ExprAST { } IoTValue *exec() { - //Serial.printf("Call from SysCallExprAST exec %d\n", operation); + // Serial.printf("Call from SysCallExprAST exec %d\n", operation); if (isIotScenException) return nullptr; // если прерывание, то сразу выходим @@ -594,17 +593,20 @@ int IoTScenario::getLastChar() { LastChar = file.read(); if (LastChar == 10) curLine++; return LastChar; - } else return EOF; + } else + return EOF; } else if (mode == 1) { if (charCount < strFromFile.length()) { LastChar = strFromFile.charAt(charCount); - //Serial.printf("%d, ", LastChar); + // Serial.printf("%d, ", LastChar); if (LastChar == 10) curLine++; charCount++; return LastChar; - } else return EOF; + } else + return EOF; + } else { + return 0; } - } /// gettok - Возвращает следующий токен из стандартного потока ввода. @@ -627,12 +629,13 @@ int IoTScenario::gettok() { return tok_identifier; } - NumStr=""; + NumStr = ""; if (LastChar == '-') { LastChar = getLastChar(); - if (isdigit(LastChar)) NumStr = "-"; - else return '-'; - + if (isdigit(LastChar)) + NumStr = "-"; + else + return '-'; } if (isdigit(LastChar)) { // Число: [0-9.]+ do { @@ -703,7 +706,7 @@ int IoTScenario::gettok() { } else return '>'; } - + // В противном случае просто возвращаем символ как значение ASCII int ThisChar = LastChar; LastChar = getLastChar(); @@ -776,8 +779,7 @@ ExprAST *IoTScenario::ParseIdentifierExpr(String *IDNames, bool callFromConditio if (CurTok == ')') break; - if (CurTok != ','){ - + if (CurTok != ',') { return Error("Expected ')' or ',' in argument list"); } getNextToken(); @@ -810,7 +812,7 @@ ExprAST *IoTScenario::ParseParenExpr(String *IDNames, bool callFromCondition) { if (CurTok != ')') return Error("expected ')'"); - //getNextToken(); // получаем ). + // getNextToken(); // получаем ). return V; } @@ -820,26 +822,24 @@ ExprAST *IoTScenario::ParseBracketsExpr(String *IDNames, bool callFromCondition) getNextToken(); // получаем {. std::vector bracketsList; - - while (CurTok != '}') { - ExprAST *Expr = ParseExpression(IDNames, callFromCondition); - if (!Expr) return nullptr; - bracketsList.push_back(Expr); - - //if (CurTok == '}') break; - //Serial.printf("ParseBracketsExpr CurTok = %d \n", CurTok); + while (CurTok != '}') { + ExprAST *Expr = ParseExpression(IDNames, callFromCondition); + if (!Expr) return nullptr; + bracketsList.push_back(Expr); + // if (CurTok == '}') break; + // Serial.printf("ParseBracketsExpr CurTok = %d \n", CurTok); - //if (CurTok != ';') - // return Error("Expected ';' in operation list"); - - //int ttok = getNextToken(); - if (CurTok == tok_eof) { - return Error("Expected '}'"); - } + // if (CurTok != ';') + // return Error("Expected ';' in operation list"); + + // int ttok = getNextToken(); + if (CurTok == tok_eof) { + return Error("Expected '}'"); } + } getNextToken(); // получаем }. return new BracketsExprAST(bracketsList); @@ -957,7 +957,6 @@ ExprAST *IoTScenario::ParseExpression(String *IDNames, bool callFromCondition) { return ParseBinOpRHS(0, LHS, IDNames, callFromCondition); } - void IoTScenario::loadScenario(String fileName) { // подготавливаем контекст для чтения и интерпретации файла isIotScenException = false; @@ -977,7 +976,7 @@ void IoTScenario::loadScenario(String fileName) { // подготавливае strFromFile = file.readString(); Serial.printf("strFromFile: %s, %s\n", strFromFile.c_str(), fileName.c_str()); file.close(); - } + } } void IoTScenario::exec(String eventIdName) { // посимвольно считываем и сразу интерпретируем сценарий в дерево AST @@ -988,11 +987,11 @@ void IoTScenario::exec(String eventIdName) { // посимвольно счит curLine = 1; charCount = 0; - if (mode == 0) file.seek(0); - + if (mode == 0) file.seek(0); + if (mode < 2) { while (CurTok != EOF) { - switch (CurTok) { + switch (CurTok) { case tok_if: { IDNames = ""; // сбрасываем накопитель встречающихся идентификаторов в условии ExprAST *tmpAST = ParseIfExpr(&IDNames); @@ -1001,15 +1000,18 @@ void IoTScenario::exec(String eventIdName) { // посимвольно счит tmpAST->exec(); } delete tmpAST; - } else getNextToken(); - break;} - default: getNextToken(); break; + } else + getNextToken(); + break; + } + default: + getNextToken(); + break; } } } } - IoTScenario::IoTScenario() { // Задаём стандартные бинарные операторы. // 1 - наименьший приоритет. diff --git a/src/modules/sensors/Bme280/Bme280.cpp b/src/modules/sensors/Bme280/Bme280.cpp index c9e16d33..5d4d11ad 100644 --- a/src/modules/sensors/Bme280/Bme280.cpp +++ b/src/modules/sensors/Bme280/Bme280.cpp @@ -29,7 +29,7 @@ class Bme280t : public IoTItem { SerialPrint("E", "Sensor Bme280t", "Error"); } - ~Bme280t() {}; + ~Bme280t(){}; }; class Bme280h : public IoTItem { @@ -49,7 +49,7 @@ class Bme280h : public IoTItem { SerialPrint("E", "Sensor Bme280h", "Error"); } - ~Bme280h() {}; + ~Bme280h(){}; }; class Bme280p : public IoTItem { @@ -70,28 +70,27 @@ class Bme280p : public IoTItem { SerialPrint("E", "Sensor Bme280p", "Error"); } - ~Bme280p() {}; + ~Bme280p(){}; }; - -void* getAPI_Bme280(String subtype, String param) { - if (subtype == F("Bme280t") || subtype == F("Bme280h") || subtype == F("Bme280p")) { - String addr; - jsonRead(param, "addr", addr); - - if (bmes.find(addr) == bmes.end()) { - bmes[addr] = new Adafruit_BME280(); - bmes[addr]->begin(hexStringToUint8(addr)); - } - - if (subtype == F("Bme280t")) { - return new Bme280t(bmes[addr], param); - } else if (subtype == F("Bme280h")) { - return new Bme280h(bmes[addr], param); - } else if (subtype == F("Bme280p")) { - return new Bme280p(bmes[addr], param); - } - } else { - return nullptr; - } +void* getAPI_Bme280(String subtype, String param) { + // if (subtype == F("Bme280t") || subtype == F("Bme280h") || subtype == F("Bme280p")) { + // String addr; + // jsonRead(param, "addr", addr); + // + // if (bmes.find(addr) == bmes.end()) { + // bmes[addr] = new Adafruit_BME280(); + // bmes[addr]->begin(hexStringToUint8(addr)); + // } + // + // if (subtype == F("Bme280t")) { + // return new Bme280t(bmes[addr], param); + // } else if (subtype == F("Bme280h")) { + // return new Bme280h(bmes[addr], param); + // } else if (subtype == F("Bme280p")) { + // return new Bme280p(bmes[addr], param); + // } + //} else { + return nullptr; + //} } diff --git a/src/modules/sensors/Bmp280/Bmp280.cpp b/src/modules/sensors/Bmp280/Bmp280.cpp index d67a583c..e6ff58f4 100644 --- a/src/modules/sensors/Bmp280/Bmp280.cpp +++ b/src/modules/sensors/Bmp280/Bmp280.cpp @@ -54,21 +54,21 @@ class Bmp280p : public IoTItem { }; void* getAPI_Bmp280(String subtype, String param) { - if (subtype == F("Bmp280t") || subtype == F("Bmp280p")) { - String addr; - jsonRead(param, "addr", addr); - - if (bmps.find(addr) == bmps.end()) { - bmps[addr] = new Adafruit_BMP280(); - bmps[addr]->begin(hexStringToUint8(addr)); - } - - if (subtype == F("Bmp280t")) { - return new Bmp280t(bmps[addr], param); - } else if (subtype == F("Bmp280p")) { - return new Bmp280p(bmps[addr], param); - } - } else { - return nullptr; - } + // if (subtype == F("Bmp280t") || subtype == F("Bmp280p")) { + // String addr; + // jsonRead(param, "addr", addr); + // + // if (bmps.find(addr) == bmps.end()) { + // bmps[addr] = new Adafruit_BMP280(); + // bmps[addr]->begin(hexStringToUint8(addr)); + // } + // + // if (subtype == F("Bmp280t")) { + // return new Bmp280t(bmps[addr], param); + // } else if (subtype == F("Bmp280p")) { + // return new Bmp280p(bmps[addr], param); + // } + //} else { + return nullptr; + //} } diff --git a/src/modules/sensors/Dht1122/Dht1122.cpp b/src/modules/sensors/Dht1122/Dht1122.cpp index 9c96f77f..33aed240 100644 --- a/src/modules/sensors/Dht1122/Dht1122.cpp +++ b/src/modules/sensors/Dht1122/Dht1122.cpp @@ -4,77 +4,77 @@ https://github.com/beegee-tokyo/arduino-DHTesp ******************************************************************/ - #include "Global.h" #include "classes/IoTItem.h" #include "DHTesp.h" #include - std::map dhts; class Dht1122t : public IoTItem { private: - DHTesp* _dht; - + DHTesp* _dht; + public: - Dht1122t(DHTesp* dht, String parameters): IoTItem(parameters) { + Dht1122t(DHTesp* dht, String parameters) : IoTItem(parameters) { _dht = dht; } - + void doByInterval() { value.valD = _dht->getTemperature(); - if (String(value.valD) != "nan") regEvent(value.valD, "Dht1122t"); - else SerialPrint("E", "Sensor DHTt", "Error"); + if (String(value.valD) != "nan") + regEvent(value.valD, "Dht1122t"); + else + SerialPrint("E", "Sensor DHTt", "Error"); } - ~Dht1122t() {}; + ~Dht1122t(){}; }; - class Dht1122h : public IoTItem { private: - DHTesp* _dht; + DHTesp* _dht; public: - Dht1122h(DHTesp* dht, String parameters): IoTItem(parameters) { + Dht1122h(DHTesp* dht, String parameters) : IoTItem(parameters) { _dht = dht; } - + void doByInterval() { value.valD = _dht->getHumidity(); - if (String(value.valD) != "nan") regEvent(value.valD, "Dht1122h"); - else SerialPrint("E", "Sensor DHTh", "Error"); + if (String(value.valD) != "nan") + regEvent(value.valD, "Dht1122h"); + else + SerialPrint("E", "Sensor DHTh", "Error"); } - ~Dht1122h() {}; + ~Dht1122h(){}; }; - -void* getAPI_Dht1122(String subtype, String param) { - if (subtype == F("Dht1122t") || subtype == F("Dht1122h")) { - int pin; - String senstype; - jsonRead(param, "pin", pin); - jsonRead(param, "senstype", senstype); - - if (dhts.find(pin) == dhts.end()) { - dhts[pin] = new DHTesp(); - - if (senstype == "dht11") { - dhts[pin]->setup(pin, DHTesp::DHT11); - } else if (senstype == "dht22") { - dhts[pin]->setup(pin, DHTesp::DHT22); - } - } - - if (subtype == F("Dht1122t")) { - return new Dht1122t(dhts[pin], param); - } else if (subtype == F("Dht1122h")) { - return new Dht1122h(dhts[pin], param); - } - } else { - return nullptr; - } +void* getAPI_Dht1122(String subtype, String param) { + // if (subtype == F("Dht1122t") || subtype == F("Dht1122h")) { + // int pin; + // String senstype; + // jsonRead(param, "pin", pin); + // jsonRead(param, "senstype", senstype); + // + // if (dhts.find(pin) == dhts.end()) { + // dhts[pin] = new DHTesp(); + // + // if (senstype == "dht11") { + // dhts[pin]->setup(pin, DHTesp::DHT11); + // } else if (senstype == "dht22") { + // dhts[pin]->setup(pin, DHTesp::DHT22); + // } + // } + // + // if (subtype == F("Dht1122t")) { + // return new Dht1122t(dhts[pin], param); + // } else if (subtype == F("Dht1122h")) { + // return new Dht1122h(dhts[pin], param); + // } + //} else { + return nullptr; + //} } diff --git a/src/modules/sensors/GY21/GY21.cpp b/src/modules/sensors/GY21/GY21.cpp index 16a363e9..ba663972 100644 --- a/src/modules/sensors/GY21/GY21.cpp +++ b/src/modules/sensors/GY21/GY21.cpp @@ -15,45 +15,49 @@ GY21* sensor = nullptr; class GY21t : public IoTItem { public: - GY21t(String parameters): IoTItem(parameters) { } - + GY21t(String parameters) : IoTItem(parameters) {} + void doByInterval() { - //wire->read(); + // wire->read(); value.valD = sensor->GY21_Temperature(); - if (value.valD < 300) regEvent(value.valD, "GY21"); // TODO: найти способ понимания ошибки получения данных - else SerialPrint("E", "Sensor GY21t", "Error"); + if (value.valD < 300) + regEvent(value.valD, "GY21"); // TODO: найти способ понимания ошибки получения данных + else + SerialPrint("E", "Sensor GY21t", "Error"); } - ~GY21t() {}; + ~GY21t(){}; }; class GY21h : public IoTItem { public: - GY21h(String parameters): IoTItem(parameters) { } - - void doByInterval() { - //sht->read(); - value.valD = sensor->GY21_Humidity(); - if (value.valD != 0) regEvent(value.valD, "GY21h"); // TODO: найти способ понимания ошибки получения данных - else SerialPrint("E", "Sensor GY21h", "Error"); - } + GY21h(String parameters) : IoTItem(parameters) {} - ~GY21h() {}; + void doByInterval() { + // sht->read(); + value.valD = sensor->GY21_Humidity(); + if (value.valD != 0) + regEvent(value.valD, "GY21h"); // TODO: найти способ понимания ошибки получения данных + else + SerialPrint("E", "Sensor GY21h", "Error"); + } + + ~GY21h(){}; }; void* getAPI_GY21(String subtype, String param) { - if (subtype == F("GY21t") || subtype == F("GY21h")) { - if (!sensor) { - sensor = new GY21; - if (sensor) Wire.begin(SDA, SCL); - } - - if (subtype == F("GY21t")) { - return new GY21t(param); - } else if (subtype == F("GY21h")) { - return new GY21h(param); - } - } else { - return nullptr; - } + // if (subtype == F("GY21t") || subtype == F("GY21h")) { + // if (!sensor) { + // sensor = new GY21; + // if (sensor) Wire.begin(SDA, SCL); + // } + // + // if (subtype == F("GY21t")) { + // return new GY21t(param); + // } else if (subtype == F("GY21h")) { + // return new GY21h(param); + // } + //} else { + return nullptr; + //} } \ No newline at end of file diff --git a/src/modules/sensors/Sht20/Sht20.cpp b/src/modules/sensors/Sht20/Sht20.cpp index bcba7c57..aa781a2e 100644 --- a/src/modules/sensors/Sht20/Sht20.cpp +++ b/src/modules/sensors/Sht20/Sht20.cpp @@ -4,51 +4,53 @@ #include "Wire.h" #include "SHT2x.h" - SHT2x* sht = nullptr; class Sht20t : public IoTItem { public: - Sht20t(String parameters): IoTItem(parameters) { } - + Sht20t(String parameters) : IoTItem(parameters) {} + void doByInterval() { sht->read(); value.valD = sht->getTemperature(); - if (value.valD > -46.85F) regEvent(value.valD, "Sht20t"); - else SerialPrint("E", "Sensor Sht20t", "Error"); + if (value.valD > -46.85F) + regEvent(value.valD, "Sht20t"); + else + SerialPrint("E", "Sensor Sht20t", "Error"); } - ~Sht20t() {}; + ~Sht20t(){}; }; class Sht20h : public IoTItem { public: - Sht20h(String parameters): IoTItem(parameters) { } - + Sht20h(String parameters) : IoTItem(parameters) {} + void doByInterval() { sht->read(); value.valD = sht->getHumidity(); - if (value.valD != -6) regEvent(value.valD, "Sht20h"); - else SerialPrint("E", "Sensor Sht20h", "Error"); - } + if (value.valD != -6) + regEvent(value.valD, "Sht20h"); + else + SerialPrint("E", "Sensor Sht20h", "Error"); + } - ~Sht20h() {}; + ~Sht20h(){}; }; - void* getAPI_Sht20(String subtype, String param) { - if (subtype == F("Sht20t") || subtype == F("Sht20h")) { - if (!sht) { - sht = new SHT2x; - if (sht) sht->begin(); - } - - if (subtype == F("Sht20t")) { - return new Sht20t(param); - } else if (subtype == F("Sht20h")) { - return new Sht20h(param); - } - } else { - return nullptr; - } + // if (subtype == F("Sht20t") || subtype == F("Sht20h")) { + // if (!sht) { + // sht = new SHT2x; + // if (sht) sht->begin(); + // } + // + // if (subtype == F("Sht20t")) { + // return new Sht20t(param); + // } else if (subtype == F("Sht20h")) { + // return new Sht20h(param); + // } + //} else { + return nullptr; + //} } diff --git a/src/utils/SerialPrint.cpp b/src/utils/SerialPrint.cpp index 1c196e8a..ce713c12 100644 --- a/src/utils/SerialPrint.cpp +++ b/src/utils/SerialPrint.cpp @@ -12,7 +12,8 @@ void SerialPrint(String errorLevel, String module, String msg) { if (isNetworkActive()) { if (jsonReadInt(settingsFlashJson, F("log")) != 0) { - standWebSocket.broadcastTXT("/log|" + tosend); + String pl = "/log|" + tosend; + standWebSocket.broadcastTXT(pl); } } //}