Добавляем чтение отсутвующих локально переменных из общего глобального хранилища.

This commit is contained in:
2022-02-23 10:43:53 +03:00
parent 23ae779b48
commit be662dd497
2 changed files with 19 additions and 4 deletions

View File

@@ -59,6 +59,7 @@ public:
class VariableExprAST : public ExprAST {
String Name;
IoTItem* Item; // ссылка на объект модуля (прямой доступ к идентификатору указанному в сценарии), если получилось найти модуль по ID
IoTValue val; // хранение данных для внешних переменных если не найдены в итемсах
public:
VariableExprAST(const String &name, IoTItem* item) : Name(name), Item(item) {}
@@ -75,7 +76,20 @@ public:
if (Item->value.isDecimal)
Serial.printf("Call from VariableExprAST: %s = %f\n", Name.c_str(), Item->value.valD);
else Serial.printf("Call from VariableExprAST: %s = %s\n", Name.c_str(), Item->value.valS.c_str());
return &(Item->value);
// если Итем не был найден по ID (Item == nulptr) значит либо опечатка, либо это ИД из другого контроллера, поэтому осуществляем поиск значения в
// глобальном сетевом хранилище переменных
if (Item) return &(Item->value);
else {
// смотрим в хранилище
String valueStr;
jsonRead(paramsHeapJson, Name, valueStr);
if (val.isDecimal = isDigitDotCommaStr(valueStr))
val.valD = valueStr.toFloat();
else
val.valS = valueStr;
return &val;
}
}
};
@@ -421,8 +435,9 @@ public:
}
if (CurTok != '(') { // Обычная переменная.
if (tmpItem) return new VariableExprAST(IdName, tmpItem);
else return new StringExprAST("id " + IdName + " not_found");
//if (tmpItem)
return new VariableExprAST(IdName, tmpItem);
// else return new StringExprAST("id " + IdName + " not_found");
}
// Вызов функции.