Приветствую" Нужно напоминать Н раз о не закрытой двери. Написал правило, но в таком виде оно почему-то не работает? Подскажите, пожалуйста, в чём проблема? Спасибо!
var timer_kl_ms = 120 * 1000; // таймер кладовки
var timer_kl = null;
var timer_kl1_ms = 30 * 1000; // таймер напоминания
var timer_kl1 = null;
var x_kl =0; // переменная
var in_l_kl = "wb-gpio/EXT3_IN1"; //геркон на двери
var out_l_kl = "wb-mr6c_10/K4"; //лампа в кладовке
defineRule("svet_kladovka",
{
whenChanged: in_l_kl,
then: function (newValue, devName, cellName)
{
if (dev[in_l_kl] ==false)
{
dev[out_l_kl] = true;
runShellCommand("mpg123 /mnt/data/sounds/kladovka.mp3");
if (timer_kl)
{
clearTimeout(timer_kl);
}
if (timer_kl1)
{
clearTimeout(timer_kl1);
}
timer_kl = setTimeout(function ()
{
dev[out_l_kl] = false;
runShellCommand("mpg123 /mnt/data/sounds/kladovka.mp3");
timer_kl = null;
x_kl =1;
},
timer_kl_ms);
if (x_kl >=1 && x_kl <5)
{
timer_kl1 = setTimeout(function ()
{
runShellCommand("mpg123 /mnt/data/sounds/kladovka.mp3");
timer_kl1 = null;
x_kl = x_kl +1;
},
timer_kl1_ms);
}
}
else
{
dev[out_l_kl] = false;
x_kl =0;
if (timer_kl)
{
clearTimeout(timer_kl);
}
if (timer_kl1)
{
clearTimeout(timer_kl1);
}
}
}
});
Здравствуйте.
Простите за долгий ответ.
К сожалению, код без комментариев сложно читается. Из вашего описания блок-схема алгоритма управления не очевидна.
Вы можете конкретизировать вопрос? Упростив правило и локализовав место, где не происходит того, что вы ожидаете?
Нужно, чтобы напоминание сработало 4 раза и затем остановилось. не выполняется условие:
if (x_kl >=1 && x_kl <5)
Требуется, чтобы после сработки первого таймера, запустился второй, и отработал 4 раза, после чего отключился.
в моём примере отрабатывается только первый таймер. как создать условие для повторения функции определённое количество раз?
У вас получается такая последовательность: когда дверь открывается, взводится timer_kl. Когда он сработает, значение x_kl инкрементируется. Но проверка if (x_kl >=1 && x_kl <5) проводится только в момент открытия двери. А при инициализации скрипта, и при закрытии двери, x_kl обнуляется. Соответственно, оно всегда == 0. Поэтому условие не выполняется.