From dc8b472c0d8950e58b83464d32e57656756cfca7 Mon Sep 17 00:00:00 2001 From: biver Date: Wed, 27 Apr 2022 22:30:29 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D0=BC=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D1=83=20?= =?UTF-8?q?=D1=82=D0=B0=D0=B9=D0=BC=D0=B5=D1=80=D0=B0,=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D1=83=D1=87=D0=B8=D1=82=D1=8B=D0=B2=D0=B0=D0=BB=D0=B8=D1=81?= =?UTF-8?q?=D1=8C=20=D0=BC=D0=BD=D0=BE=D0=B3=D0=B8=D0=B5=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=B1=D0=B8=D0=BD=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BF=D0=B0?= =?UTF-8?q?=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/exec/Timer/Timer.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/modules/exec/Timer/Timer.cpp b/src/modules/exec/Timer/Timer.cpp index 8c5c3819..f8fcda17 100644 --- a/src/modules/exec/Timer/Timer.cpp +++ b/src/modules/exec/Timer/Timer.cpp @@ -16,25 +16,26 @@ class Timer : public IoTItem { public: Timer(String parameters): IoTItem(parameters) { jsonRead(parameters, "countDown", _initValue); - value.valD = _initValue; + _unfin = !_initValue; + value.valD = _initValue + _unfin?0:1; // +1 - компенсируем ранний вычет счетчика, ранний вычет, чтоб после события значение таймера не исказилось. + // +0 - если изначально установили бесконечный счет jsonRead(parameters, "ticker", _ticker); jsonRead(parameters, "repeat", _repeat); - _unfin = !value.valD; jsonRead(parameters, "needSave", _needSave); // нужно сохранять счетчик в постоянную память } void doByInterval() { - if (!_unfin && value.valD && !_pause) { + if (!_unfin && value.valD >= 0 && !_pause) { value.valD--; + if (_repeat && value.valD == -1) value.valD = _initValue; if (_needSave) needSave = true; - if (value.valD <= 0) { + if (value.valD == 0) { regEvent(value.valD, "Time's up"); - if (_repeat) value.valD = _initValue; } } - if (_ticker && !_pause) regEvent(value.valD, "Timer tick"); + if (_ticker && (value.valD > 0 || _unfin) && !_pause) regEvent(value.valD, "Timer tick"); } IoTValue execute(String command, std::vector ¶m) {