From 1a79776bfbd8e7e9489b986c703745aa73023c3c Mon Sep 17 00:00:00 2001 From: Ilya Date: Thu, 29 May 2025 18:57:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=20=D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D0=BD=D1=8B?= =?UTF-8?q?=D0=B5=20=D0=B2=D1=8B=D0=B7=D0=BE=D0=B2=D1=8B=20setInterval=20?= =?UTF-8?q?=D0=B8=20doByInterval=20=D0=94=D0=BB=D1=8F=20=D0=B2=D0=BE=D0=B7?= =?UTF-8?q?=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20=D0=B8=D0=B7?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B8=D0=BD=D1=82?= =?UTF-8?q?=D0=B5=D1=80=D0=B2=D0=B0=D0=BB=D0=B0=20=D0=B2=D1=8B=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20doByInterval=20=D0=B8=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B7=D0=BE=D0=B2=D0=B0=20=D0=B5=D0=B3=D0=BE=20?= =?UTF-8?q?=D0=B2=D0=BD=D0=B5=20=D0=BF=D0=BB=D0=B0=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/classes/IoTScenario.cpp | 27 +++++++++++++++++++++------ src/modules/sceninfo.json | 6 ++++++ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/classes/IoTScenario.cpp b/src/classes/IoTScenario.cpp index 7245b2f8..7efa73ca 100644 --- a/src/classes/IoTScenario.cpp +++ b/src/classes/IoTScenario.cpp @@ -291,10 +291,8 @@ class CallExprAST : public ExprAST { ret.valD = Item->getIntFromNet(); ret.isDecimal = true; return &ret; - } - - // вызываем системную функцию периодического выполнения вне таймера - if (Cmd == F("doByInterval")) { + + } else if (Cmd == F("doByInterval")) { // вызываем системную функцию периодического выполнения вне таймера Item->doByInterval(); ret = Item->value; return &ret; @@ -311,6 +309,15 @@ class CallExprAST : public ExprAST { return nullptr; // ArgsAsIoTValue.push_back(zeroIotVal); } + if (Cmd == F("setInterval")) { // меняем интервал выполнения задач модуля налету + if (ArgsAsIoTValue.size() == 1) { + Item->setInterval(ArgsAsIoTValue[0].valD); + ret.valD = Item->getInterval(); + ret.isDecimal = true; + return &ret; + } + } + ret = Item->execute(Cmd, ArgsAsIoTValue); // вызываем команду из модуля напрямую с передачей всех аргументов // if (ret.isDecimal) Serial.printf("Call from CallExprAST ID = %s, Command = %s, exec result = %f\n", Callee.c_str(), Cmd.c_str(), ret.valD); @@ -350,7 +357,8 @@ enum SysOp { sysop_mqttPub, sysop_getUptime, sysop_mqttIsConnect, - sysop_wifiIsConnect + sysop_wifiIsConnect, + sysop_setInterval }; IoTValue sysExecute(SysOp command, std::vector ¶m) { @@ -456,7 +464,12 @@ IoTValue sysExecute(SysOp command, std::vector ¶m) { break; case sysop_wifiIsConnect: value.valD = isNetworkActive(); - break; + break; + case sysop_setInterval: + if (param.size() == 1) { + + } + break; } return value; @@ -515,6 +528,8 @@ class SysCallExprAST : public ExprAST { operation = sysop_mqttIsConnect; else if (Callee == F("wifiIsConnect")) operation = sysop_wifiIsConnect; + else if (Callee == F("setInterval")) + operation = sysop_setInterval; else operation = sysop_notfound; } diff --git a/src/modules/sceninfo.json b/src/modules/sceninfo.json index b7d0be54..bdc834e0 100644 --- a/src/modules/sceninfo.json +++ b/src/modules/sceninfo.json @@ -14,6 +14,12 @@ "descr": "Получаем количество секунд доверия к значениям элемента. При -2 доверие полное, при -1 время доверия истекло. При >0 время обратного отсчета. Используется только совместно с ИД элемента: ID.getIntFromNet()", "params": [] }, + { + "name": "setInterval", + "descr": "Меняем интервал выполнения периодиеских операций элемента в секундах. Используется только совместно с ИД элемента: ID.setInterval(5)", + "params": ["Секунды"], + "return": "установленный интервал" + }, { "name": "doByInterval", "descr": "Выполняем интервальное действие модуля вне плана. Используется только совместно с ИД элемента: ID.doByInterval()",