diff --git a/src/EventsAndOrders.cpp b/src/EventsAndOrders.cpp index 5fc634a1..aa3ebfe5 100644 --- a/src/EventsAndOrders.cpp +++ b/src/EventsAndOrders.cpp @@ -30,7 +30,7 @@ void handleOrder() { if (item) { String valStr = selectToMarkerLast(order, " "); IoTValue value; - if (value.isDecimal = isDigitStr(valStr)) + if (value.isDecimal = isDigitDotCommaStr(valStr)) value.valD = valStr.toFloat(); else value.valS = valStr; diff --git a/src/classes/IoTScenario.cpp b/src/classes/IoTScenario.cpp index 22b5b73d..48835001 100644 --- a/src/classes/IoTScenario.cpp +++ b/src/classes/IoTScenario.cpp @@ -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"); } // Вызов функции.