2022-03-26 20:58:15 +03:00
|
|
|
#include "Global.h"
|
|
|
|
|
#include "classes/IoTItem.h"
|
|
|
|
|
|
|
|
|
|
extern IoTGpio IoTgpio;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Timer : public IoTItem {
|
|
|
|
|
private:
|
|
|
|
|
bool _unfin = false;
|
|
|
|
|
bool _ticker = false;
|
2022-03-26 21:35:51 +03:00
|
|
|
bool _repeat = false;
|
2022-03-27 10:47:21 +03:00
|
|
|
bool _needSave = false;
|
2022-04-27 14:17:49 +03:00
|
|
|
bool _pause = false;
|
|
|
|
|
int _initValue;
|
2022-03-26 20:58:15 +03:00
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
Timer(String parameters): IoTItem(parameters) {
|
2022-04-27 14:17:49 +03:00
|
|
|
jsonRead(parameters, "countDown", _initValue);
|
|
|
|
|
value.valD = _initValue;
|
|
|
|
|
|
2022-03-26 20:58:15 +03:00
|
|
|
jsonRead(parameters, "ticker", _ticker);
|
2022-03-26 21:35:51 +03:00
|
|
|
jsonRead(parameters, "repeat", _repeat);
|
2022-03-26 20:58:15 +03:00
|
|
|
_unfin = !value.valD;
|
2022-03-27 10:47:21 +03:00
|
|
|
jsonRead(parameters, "needSave", _needSave); // нужно сохранять счетчик в постоянную память
|
2022-03-26 20:58:15 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void doByInterval() {
|
2022-04-27 14:17:49 +03:00
|
|
|
if (!_unfin && value.valD && !_pause) {
|
2022-03-26 20:58:15 +03:00
|
|
|
value.valD--;
|
2022-03-27 10:47:21 +03:00
|
|
|
if (_needSave) needSave = true;
|
2022-04-27 15:56:34 +03:00
|
|
|
if (value.valD <= 0) {
|
2022-03-26 21:35:51 +03:00
|
|
|
regEvent(value.valD, "Time's up");
|
2022-04-27 14:17:49 +03:00
|
|
|
if (_repeat) value.valD = _initValue;
|
2022-03-26 21:35:51 +03:00
|
|
|
}
|
2022-03-26 20:58:15 +03:00
|
|
|
}
|
|
|
|
|
|
2022-04-27 14:17:49 +03:00
|
|
|
if (_ticker && !_pause) regEvent(value.valD, "Timer tick");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
IoTValue execute(String command, std::vector<IoTValue> ¶m) {
|
|
|
|
|
if (command == "stop") {
|
|
|
|
|
_pause = true;
|
|
|
|
|
} else if (command == "reset") {
|
|
|
|
|
_pause = false;
|
|
|
|
|
value.valD = _initValue;
|
|
|
|
|
} else if (command == "continue") {
|
|
|
|
|
_pause = false;
|
|
|
|
|
} else if (command == "int") {
|
|
|
|
|
if (param.size()) {
|
|
|
|
|
setInterval(param[0].valD);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return {};
|
2022-03-26 20:58:15 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
~Timer() {};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
void* getAPI_Timer(String subtype, String param) {
|
|
|
|
|
if (subtype == F("Timer")) {
|
|
|
|
|
return new Timer(param);
|
|
|
|
|
} else {
|
|
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
}
|