Добавляем системные вызовы setInterval и doByInterval

Для возможности изменения интервала выполнения doByInterval
и вызова его вне плана
This commit is contained in:
2025-05-29 18:57:46 +03:00
parent 6194169990
commit 1a79776bfb
2 changed files with 27 additions and 6 deletions

View File

@@ -291,10 +291,8 @@ class CallExprAST : public ExprAST {
ret.valD = Item->getIntFromNet(); ret.valD = Item->getIntFromNet();
ret.isDecimal = true; ret.isDecimal = true;
return &ret; return &ret;
}
} else if (Cmd == F("doByInterval")) { // вызываем системную функцию периодического выполнения вне таймера
// вызываем системную функцию периодического выполнения вне таймера
if (Cmd == F("doByInterval")) {
Item->doByInterval(); Item->doByInterval();
ret = Item->value; ret = Item->value;
return &ret; return &ret;
@@ -311,6 +309,15 @@ class CallExprAST : public ExprAST {
return nullptr; // ArgsAsIoTValue.push_back(zeroIotVal); 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); // вызываем команду из модуля напрямую с передачей всех аргументов 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); // 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_mqttPub,
sysop_getUptime, sysop_getUptime,
sysop_mqttIsConnect, sysop_mqttIsConnect,
sysop_wifiIsConnect sysop_wifiIsConnect,
sysop_setInterval
}; };
IoTValue sysExecute(SysOp command, std::vector<IoTValue> &param) { IoTValue sysExecute(SysOp command, std::vector<IoTValue> &param) {
@@ -456,7 +464,12 @@ IoTValue sysExecute(SysOp command, std::vector<IoTValue> &param) {
break; break;
case sysop_wifiIsConnect: case sysop_wifiIsConnect:
value.valD = isNetworkActive(); value.valD = isNetworkActive();
break; break;
case sysop_setInterval:
if (param.size() == 1) {
}
break;
} }
return value; return value;
@@ -515,6 +528,8 @@ class SysCallExprAST : public ExprAST {
operation = sysop_mqttIsConnect; operation = sysop_mqttIsConnect;
else if (Callee == F("wifiIsConnect")) else if (Callee == F("wifiIsConnect"))
operation = sysop_wifiIsConnect; operation = sysop_wifiIsConnect;
else if (Callee == F("setInterval"))
operation = sysop_setInterval;
else else
operation = sysop_notfound; operation = sysop_notfound;
} }

View File

@@ -14,6 +14,12 @@
"descr": "Получаем количество секунд доверия к значениям элемента. При -2 доверие полное, при -1 время доверия истекло. При >0 время обратного отсчета. Используется только совместно с ИД элемента: ID.getIntFromNet()", "descr": "Получаем количество секунд доверия к значениям элемента. При -2 доверие полное, при -1 время доверия истекло. При >0 время обратного отсчета. Используется только совместно с ИД элемента: ID.getIntFromNet()",
"params": [] "params": []
}, },
{
"name": "setInterval",
"descr": "Меняем интервал выполнения периодиеских операций элемента в секундах. Используется только совместно с ИД элемента: ID.setInterval(5)",
"params": ["Секунды"],
"return": "установленный интервал"
},
{ {
"name": "doByInterval", "name": "doByInterval",
"descr": "Выполняем интервальное действие модуля вне плана. Используется только совместно с ИД элемента: ID.doByInterval()", "descr": "Выполняем интервальное действие модуля вне плана. Используется только совместно с ИД элемента: ID.doByInterval()",