Оптимизируем работу с передачей строк через парамтеры функций

This commit is contained in:
2022-10-28 22:19:18 +03:00
parent a292f17285
commit 7dc21ee914
12 changed files with 54 additions and 59 deletions

View File

@@ -10,14 +10,14 @@ struct IoTValue {
class IoTItem { class IoTItem {
public: public:
IoTItem(String parameters); IoTItem(const String &parameters);
virtual ~IoTItem() {} virtual ~IoTItem() {}
virtual void loop(); virtual void loop();
virtual void doByInterval(); virtual void doByInterval();
virtual IoTValue execute(String command, std::vector<IoTValue>& param); virtual IoTValue execute(String command, std::vector<IoTValue>& param);
virtual void regEvent(String value, String consoleInfo, bool error = false); virtual void regEvent(const String& value, const String& consoleInfo, bool error = false);
virtual void regEvent(float value, String consoleInfo, bool error = false); virtual void regEvent(float value, const String& consoleInfo, bool error = false);
String getSubtype(); String getSubtype();
@@ -38,8 +38,8 @@ class IoTItem {
bool enableDoByInt = true; bool enableDoByInt = true;
virtual IoTGpio* getGpioDriver(); virtual IoTGpio* getGpioDriver();
virtual void setValue(IoTValue Value, bool generateEvent = true); virtual void setValue(const IoTValue& Value, bool generateEvent = true);
virtual void setValue(String valStr, bool generateEvent = true); virtual void setValue(const String& valStr, bool generateEvent = true);
String getRoundValue(); String getRoundValue();
//методы для графиков //методы для графиков
@@ -66,15 +66,15 @@ class IoTItem {
bool _global = false; // характеристика айтема, что ему нужно слать и принимать события из внешнего мира bool _global = false; // характеристика айтема, что ему нужно слать и принимать события из внешнего мира
}; };
IoTItem* findIoTItem(String name); // поиск экземпляра элемента модуля по имени IoTItem* findIoTItem(const String& name); // поиск экземпляра элемента модуля по имени
String getItemValue(String name); // поиск плюс получение значения String getItemValue(const String& name); // поиск плюс получение значения
bool isItemExist(String name); // существует ли айтем bool isItemExist(const String& name); // существует ли айтем
StaticJsonDocument<JSON_BUFFER_SIZE>* getLocalItemsAsJSON(); // сбор всех локальных значений Items StaticJsonDocument<JSON_BUFFER_SIZE>* getLocalItemsAsJSON(); // сбор всех локальных значений Items
class externalVariable : IoTItem { // объект, создаваемый при получении информации о событии на другом контроллере для хранения информации о событии указанное время class externalVariable : IoTItem { // объект, создаваемый при получении информации о событии на другом контроллере для хранения информации о событии указанное время
public: public:
externalVariable(String parameters); externalVariable(const String& parameters);
~externalVariable(); ~externalVariable();
void doByInterval(); // для данного класса doByInterval+int выполняет роль счетчика обратного отсчета до уничтожения void doByInterval(); // для данного класса doByInterval+int выполняет роль счетчика обратного отсчета до уничтожения
}; };

View File

@@ -10,20 +10,20 @@ extern String jsonWriteInt(String& json, String name, int value, bool e = true);
extern String jsonWriteFloat(String& json, String name, float value, bool e = true); extern String jsonWriteFloat(String& json, String name, float value, bool e = true);
extern String jsonWriteBool(String& json, String name, boolean value, bool e = true); extern String jsonWriteBool(String& json, String name, boolean value, bool e = true);
extern bool jsonRead(String& json, String key, unsigned long& value, bool e = true); extern bool jsonRead(const String& json, String key, unsigned long& value, bool e = true);
extern bool jsonRead(String& json, String key, float& value, bool e = true); extern bool jsonRead(const String& json, String key, float& value, bool e = true);
extern bool jsonRead(String& json, String key, String& value, bool e = true); extern bool jsonRead(const String& json, String key, String& value, bool e = true);
extern bool jsonRead(String& json, String key, bool& value, bool e = true); extern bool jsonRead(const String& json, String key, bool& value, bool e = true);
extern bool jsonRead(String& json, String key, int& value, bool e = true); extern bool jsonRead(const String& json, String key, int& value, bool e = true);
extern String jsonReadStr(String& json, String name, bool e = true); extern String jsonReadStr(const String& json, String name, bool e = true);
extern int jsonReadInt(String& json, String name, bool e = true); extern int jsonReadInt(const String& json, String name, bool e = true);
extern boolean jsonReadBool(String& json, String name, bool e = true); extern boolean jsonReadBool(const String& json, String name, bool e = true);
extern bool jsonWriteStr_(String& json, String name, String value, bool e = true); extern bool jsonWriteStr_(String& json, const String& name, const String& value, bool e = true);
extern bool jsonWriteBool_(String& json, String name, bool value, bool e = true); extern bool jsonWriteBool_(String& json, const String& name, bool value, bool e = true);
extern bool jsonWriteInt_(String& json, String name, int value, bool e = true); extern bool jsonWriteInt_(String& json, const String& name, int value, bool e = true);
extern bool jsonWriteFloat_(String& json, String name, float value, bool e = true); extern bool jsonWriteFloat_(String& json, const String& name, float value, bool e = true);
void writeUint8tValueToJsonString(uint8_t* payload, size_t length, size_t headerLenth, String& json); void writeUint8tValueToJsonString(uint8_t* payload, size_t length, size_t headerLenth, String& json);
extern bool jsonMergeObjects(String& json1, String& json2, bool e = true); extern bool jsonMergeObjects(String& json1, String& json2, bool e = true);
extern void jsonMergeDocs(JsonObject dest, JsonObjectConst src); extern void jsonMergeDocs(JsonObject dest, JsonObjectConst src);

View File

@@ -6,7 +6,7 @@
#include "EventsAndOrders.h" #include "EventsAndOrders.h"
//получение параметров в экземпляр класса //получение параметров в экземпляр класса
IoTItem::IoTItem(String parameters) { IoTItem::IoTItem(const String& parameters) {
jsonRead(parameters, F("int"), _interval); jsonRead(parameters, F("int"), _interval);
if (_interval == 0) enableDoByInt = false; if (_interval == 0) enableDoByInt = false;
_interval = _interval * 1000; _interval = _interval * 1000;
@@ -58,7 +58,7 @@ String IoTItem::getValue() {
} }
//определяем тип прилетевшей величины //определяем тип прилетевшей величины
void IoTItem::setValue(String valStr, bool generateEvent) { void IoTItem::setValue(const String& valStr, bool generateEvent) {
if (value.isDecimal = isDigitDotCommaStr(valStr)) { if (value.isDecimal = isDigitDotCommaStr(valStr)) {
value.valD = valStr.toFloat(); value.valD = valStr.toFloat();
} else { } else {
@@ -68,7 +68,7 @@ void IoTItem::setValue(String valStr, bool generateEvent) {
} }
// //
void IoTItem::setValue(IoTValue Value, bool generateEvent) { void IoTItem::setValue(const IoTValue& Value, bool generateEvent) {
value = Value; value = Value;
if (generateEvent) if (generateEvent)
if (value.isDecimal) { if (value.isDecimal) {
@@ -79,22 +79,17 @@ void IoTItem::setValue(IoTValue Value, bool generateEvent) {
} }
//когда событие случилось //когда событие случилось
void IoTItem::regEvent(String value, String consoleInfo, bool error) { void IoTItem::regEvent(const String& value, const String& consoleInfo, bool error) {
if (_needSave) { if (_needSave) {
jsonWriteStr_(valuesFlashJson, _id, value); jsonWriteStr_(valuesFlashJson, _id, value);
needSaveValues = true; needSaveValues = true;
} }
generateEvent(_id, value);
publishStatusMqtt(_id, value); publishStatusMqtt(_id, value);
publishStatusWs(_id, value); publishStatusWs(_id, value);
SerialPrint("i", "Sensor", consoleInfo + " '" + _id + "' data: " + value + "'"); SerialPrint("i", "Sensor", consoleInfo + " '" + _id + "' data: " + value + "'");
// проверка если global установлен то шлем всем о событии generateEvent(_id, value);
// if (_global) {
// SerialPrint("i", F("=>ALLMQTT"), "Broadcast event: ");
// }
//отправка события другим устройствам в сети если не было ошибки============================== //отправка события другим устройствам в сети если не было ошибки==============================
if (jsonReadBool(settingsFlashJson, "mqttin") && _global && !error) { if (jsonReadBool(settingsFlashJson, "mqttin") && _global && !error) {
String json = "{}"; String json = "{}";
@@ -120,7 +115,7 @@ String IoTItem::getRoundValue() {
} }
} }
void IoTItem::regEvent(float regvalue, String consoleInfo, bool error) { void IoTItem::regEvent(float regvalue, const String& consoleInfo, bool error) {
value.valD = regvalue; value.valD = regvalue;
if (_multiply) value.valD = value.valD * _multiply; if (_multiply) value.valD = value.valD * _multiply;
@@ -162,7 +157,7 @@ IoTGpio* IoTItem::getGpioDriver() {
//сетевое общение==================================================================================================================================== //сетевое общение====================================================================================================================================
externalVariable::externalVariable(String parameters) : IoTItem(parameters) { externalVariable::externalVariable(const String& parameters) : IoTItem(parameters) {
prevMillis = millis(); // запоминаем текущее значение таймера для выполения doByInterval после int сек prevMillis = millis(); // запоминаем текущее значение таймера для выполения doByInterval после int сек
iAmLocal = false; // указываем, что это сущность прилетела из сети iAmLocal = false; // указываем, что это сущность прилетела из сети
//Serial.printf("Call from externalVariable: parameters %s %d\n", parameters.c_str(), _interval); //Serial.printf("Call from externalVariable: parameters %s %d\n", parameters.c_str(), _interval);
@@ -181,7 +176,7 @@ void externalVariable::doByInterval() { // для данного класса d
IoTItem* myIoTItem; IoTItem* myIoTItem;
// поиск элемента модуля в существующей конфигурации // поиск элемента модуля в существующей конфигурации
IoTItem* findIoTItem(String name) { IoTItem* findIoTItem(const String& name) {
for (std::list<IoTItem*>::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it) { for (std::list<IoTItem*>::iterator it = IoTItems.begin(); it != IoTItems.end(); ++it) {
if ((*it)->getID() == name) return *it; if ((*it)->getID() == name) return *it;
} }
@@ -189,7 +184,7 @@ IoTItem* findIoTItem(String name) {
return nullptr; return nullptr;
} }
// поиск плюс получение значения // поиск плюс получение значения
String getItemValue(String name) { String getItemValue(const String& name) {
IoTItem* tmp = findIoTItem(name); IoTItem* tmp = findIoTItem(name);
if (tmp) if (tmp)
return tmp->getValue(); return tmp->getValue();
@@ -198,7 +193,7 @@ String getItemValue(String name) {
} }
// существует ли айтем // существует ли айтем
bool isItemExist(String name) { bool isItemExist(const String& name) {
IoTItem* tmp = findIoTItem(name); IoTItem* tmp = findIoTItem(name);
if (tmp) if (tmp)
return true; return true;

View File

@@ -68,7 +68,7 @@ class ButtonIn : public IoTItem {
_lastButtonState = _reading; _lastButtonState = _reading;
} }
void setValue(IoTValue Value, bool generateEvent = true) { void setValue(const IoTValue& Value, bool generateEvent = true) {
value = Value; value = Value;
if (generateEvent) regEvent((String)(int)value.valD, "ButtonIn"); if (generateEvent) regEvent((String)(int)value.valD, "ButtonIn");
} }

View File

@@ -37,7 +37,7 @@ class ButtonOut : public IoTItem {
return {}; // команда поддерживает возвращаемое значения. Т.е. по итогу выполнения команды или общения с внешней системой, можно вернуть значение в сценарий для дальнейшей обработки return {}; // команда поддерживает возвращаемое значения. Т.е. по итогу выполнения команды или общения с внешней системой, можно вернуть значение в сценарий для дальнейшей обработки
} }
void setValue(IoTValue Value, bool generateEvent = true) { void setValue(const IoTValue& Value, bool generateEvent = true) {
value = Value; value = Value;
IoTgpio.digitalWrite(_pin, _inv?!value.valD:value.valD); IoTgpio.digitalWrite(_pin, _inv?!value.valD:value.valD);
if (generateEvent) regEvent((String)(int)value.valD, "ButtonOut"); if (generateEvent) regEvent((String)(int)value.valD, "ButtonOut");

View File

@@ -52,7 +52,7 @@ class IoTServo : public IoTItem {
return {}; return {};
} }
void setValue(IoTValue Value, bool generateEvent = true) { void setValue(const IoTValue& Value, bool generateEvent = true) {
value = Value; value = Value;
if (value.isDecimal & (_oldValue != value.valD)) { if (value.isDecimal & (_oldValue != value.valD)) {
_oldValue = value.valD; _oldValue = value.valD;

View File

@@ -54,7 +54,7 @@ class Pwm32 : public IoTItem {
} }
} }
void setValue(IoTValue Value, bool generateEvent = true) { void setValue(const IoTValue& Value, bool generateEvent = true) {
value = Value; value = Value;
ledcWrite(_ledChannel, value.valD); ledcWrite(_ledChannel, value.valD);
if (generateEvent) regEvent(value.valD, "Pwm32"); if (generateEvent) regEvent(value.valD, "Pwm32");

View File

@@ -44,7 +44,7 @@ class Pwm8266 : public IoTItem {
} }
} }
void setValue(IoTValue Value, bool generateEvent = true) { void setValue(const IoTValue& Value, bool generateEvent = true) {
value = Value; value = Value;
IoTgpio.analogWrite(_pin, value.valD); IoTgpio.analogWrite(_pin, value.valD);
if (generateEvent) regEvent(value.valD, "Pwm8266"); if (generateEvent) regEvent(value.valD, "Pwm8266");

View File

@@ -263,7 +263,7 @@ class Loging : public IoTItem {
} }
} }
void regEvent(String value, String consoleInfo, bool error = false) { void regEvent(const String& value, const String& consoleInfo, bool error = false) {
String userDate = getItemValue(id + "-date"); String userDate = getItemValue(id + "-date");
String currentDate = getTodayDateDotFormated(); String currentDate = getTodayDateDotFormated();
//отправляем в график данные только когда выбран сегодняшний день //отправляем в график данные только когда выбран сегодняшний день
@@ -306,12 +306,12 @@ class Date : public IoTItem {
value.isDecimal = false; value.isDecimal = false;
} }
void setValue(String valStr) { void setValue(const String& valStr) {
value.valS = valStr; value.valS = valStr;
setValue(value); setValue(value);
} }
void setValue(IoTValue Value, bool generateEvent = true) { void setValue(const IoTValue& Value, bool generateEvent = true) {
value = Value; value = Value;
if (generateEvent) regEvent(value.valS, ""); if (generateEvent) regEvent(value.valS, "");
//отправка данных при изменении даты //отправка данных при изменении даты

View File

@@ -6,7 +6,7 @@ class VButton : public IoTItem {
public: public:
VButton(String parameters): IoTItem(parameters) { } VButton(String parameters): IoTItem(parameters) { }
void setValue(IoTValue Value, bool generateEvent = true) { void setValue(const IoTValue& Value, bool generateEvent = true) {
value = Value; value = Value;
if (generateEvent) regEvent((String)(int)value.valD, "VButton"); if (generateEvent) regEvent((String)(int)value.valD, "VButton");
} }

View File

@@ -9,7 +9,7 @@ class Variable : public IoTItem {
} }
// особенность данного модуля - просто хранение значения для сценария, нет событий // особенность данного модуля - просто хранение значения для сценария, нет событий
// void setValue(IoTValue Value, bool generateEvent = true) { // void setValue(const IoTValue& Value, bool generateEvent = true) {
// value = Value; // value = Value;
// } // }

View File

@@ -11,7 +11,7 @@ void jsonWriteStrDoc(DynamicJsonDocument& doc, String name, String value) {
} }
// new============================================================================== // new==============================================================================
bool jsonRead(String& json, String key, unsigned long& value, bool e) { bool jsonRead(const String& json, String key, unsigned long& value, bool e) {
bool ret = true; bool ret = true;
DynamicJsonDocument doc(JSON_BUFFER_SIZE); DynamicJsonDocument doc(JSON_BUFFER_SIZE);
DeserializationError error = deserializeJson(doc, json); DeserializationError error = deserializeJson(doc, json);
@@ -32,7 +32,7 @@ bool jsonRead(String& json, String key, unsigned long& value, bool e) {
return ret; return ret;
} }
bool jsonRead(String& json, String key, float& value, bool e) { bool jsonRead(const String& json, String key, float& value, bool e) {
bool ret = true; bool ret = true;
DynamicJsonDocument doc(JSON_BUFFER_SIZE); DynamicJsonDocument doc(JSON_BUFFER_SIZE);
DeserializationError error = deserializeJson(doc, json); DeserializationError error = deserializeJson(doc, json);
@@ -53,7 +53,7 @@ bool jsonRead(String& json, String key, float& value, bool e) {
return ret; return ret;
} }
bool jsonRead(String& json, String key, String& value, bool e) { bool jsonRead(const String& json, String key, String& value, bool e) {
bool ret = true; bool ret = true;
DynamicJsonDocument doc(JSON_BUFFER_SIZE); DynamicJsonDocument doc(JSON_BUFFER_SIZE);
DeserializationError error = deserializeJson(doc, json); DeserializationError error = deserializeJson(doc, json);
@@ -74,7 +74,7 @@ bool jsonRead(String& json, String key, String& value, bool e) {
return ret; return ret;
} }
bool jsonRead(String& json, String key, bool& value, bool e) { bool jsonRead(const String& json, String key, bool& value, bool e) {
bool ret = true; bool ret = true;
DynamicJsonDocument doc(JSON_BUFFER_SIZE); DynamicJsonDocument doc(JSON_BUFFER_SIZE);
DeserializationError error = deserializeJson(doc, json); DeserializationError error = deserializeJson(doc, json);
@@ -95,7 +95,7 @@ bool jsonRead(String& json, String key, bool& value, bool e) {
return ret; return ret;
} }
bool jsonRead(String& json, String key, int& value, bool e) { bool jsonRead(const String& json, String key, int& value, bool e) {
bool ret = true; bool ret = true;
DynamicJsonDocument doc(JSON_BUFFER_SIZE); DynamicJsonDocument doc(JSON_BUFFER_SIZE);
DeserializationError error = deserializeJson(doc, json); DeserializationError error = deserializeJson(doc, json);
@@ -117,7 +117,7 @@ bool jsonRead(String& json, String key, int& value, bool e) {
} }
// new============================================================================== // new==============================================================================
bool jsonWriteStr_(String& json, String key, String value, bool e) { bool jsonWriteStr_(String& json, const String& key, const String& value, bool e) {
bool ret = true; bool ret = true;
DynamicJsonDocument doc(JSON_BUFFER_SIZE); DynamicJsonDocument doc(JSON_BUFFER_SIZE);
DeserializationError error = deserializeJson(doc, json); DeserializationError error = deserializeJson(doc, json);
@@ -134,7 +134,7 @@ bool jsonWriteStr_(String& json, String key, String value, bool e) {
return ret; return ret;
} }
bool jsonWriteBool_(String& json, String key, bool value, bool e) { bool jsonWriteBool_(String& json, const String& key, bool value, bool e) {
bool ret = true; bool ret = true;
DynamicJsonDocument doc(JSON_BUFFER_SIZE); DynamicJsonDocument doc(JSON_BUFFER_SIZE);
DeserializationError error = deserializeJson(doc, json); DeserializationError error = deserializeJson(doc, json);
@@ -151,7 +151,7 @@ bool jsonWriteBool_(String& json, String key, bool value, bool e) {
return ret; return ret;
} }
bool jsonWriteInt_(String& json, String key, int value, bool e) { bool jsonWriteInt_(String& json, const String& key, int value, bool e) {
bool ret = true; bool ret = true;
DynamicJsonDocument doc(JSON_BUFFER_SIZE); DynamicJsonDocument doc(JSON_BUFFER_SIZE);
DeserializationError error = deserializeJson(doc, json); DeserializationError error = deserializeJson(doc, json);
@@ -168,7 +168,7 @@ bool jsonWriteInt_(String& json, String key, int value, bool e) {
return ret; return ret;
} }
bool jsonWriteFloat_(String& json, String key, float value, bool e) { bool jsonWriteFloat_(String& json, const String &key, float value, bool e) {
bool ret = true; bool ret = true;
DynamicJsonDocument doc(JSON_BUFFER_SIZE); DynamicJsonDocument doc(JSON_BUFFER_SIZE);
DeserializationError error = deserializeJson(doc, json); DeserializationError error = deserializeJson(doc, json);
@@ -220,7 +220,7 @@ void jsonMergeDocs(JsonObject dest, JsonObjectConst src) {
} }
// depricated====================================================================== // depricated======================================================================
String jsonReadStr(String& json, String name, bool e) { String jsonReadStr(const String& json, String name, bool e) {
DynamicJsonDocument doc(JSON_BUFFER_SIZE); DynamicJsonDocument doc(JSON_BUFFER_SIZE);
DeserializationError error = deserializeJson(doc, json); DeserializationError error = deserializeJson(doc, json);
if (error) { if (error) {
@@ -232,7 +232,7 @@ String jsonReadStr(String& json, String name, bool e) {
return doc[name].as<String>(); return doc[name].as<String>();
} }
boolean jsonReadBool(String& json, String name, bool e) { boolean jsonReadBool(const String& json, String name, bool e) {
DynamicJsonDocument doc(JSON_BUFFER_SIZE); DynamicJsonDocument doc(JSON_BUFFER_SIZE);
DeserializationError error = deserializeJson(doc, json); DeserializationError error = deserializeJson(doc, json);
if (error) { if (error) {
@@ -244,7 +244,7 @@ boolean jsonReadBool(String& json, String name, bool e) {
return doc[name].as<bool>(); return doc[name].as<bool>();
} }
int jsonReadInt(String& json, String name, bool e) { int jsonReadInt(const String& json, String name, bool e) {
DynamicJsonDocument doc(JSON_BUFFER_SIZE); DynamicJsonDocument doc(JSON_BUFFER_SIZE);
DeserializationError error = deserializeJson(doc, json); DeserializationError error = deserializeJson(doc, json);
if (error) { if (error) {