День добрый!
Сделал функцию чтобы при запуске лента горела дольше установленного таймера и чтобы общий таймер не отключал, применил motion_bath_off = null;
Так же пробовал clearTimeout(motion_bath_off);,но все равно срабатывает по motion_bath_off, что я не так сделал?
function fn14() {
var white2 = dev["wb-mrgbwwww-d_16"]["White 2"];
if (white2 == 255) {
dev["wb-mrgbwwww-d_16"]["White 2"] = 0;
motion117 = 1;
} else {
motion117 = 0;
motion_bath_off = null;
dev["wb-mrgbwwww-d_16"]["White 2"] = 255;
setTimeout(function() {
dev["wb-mrgbwwww-d_16"]["White 2"] = 0;
motion117 = 1;
}, 20 * 60 * 1000);
}
log("вкл функции 14");
}
А что содержится в переменной motion_bath_off? Точно ли там id этого таймера, где он, кстати, присваивается?
Просто время
var motion_bath_off = 5 * 60 * 1000;
и больше ничего
Только если еще в датчике движения, как раз задается
Нет, неверно. В clearTimeout() аргументом должен быть именно идентификатор таймера, который останавливаем. Посмотрите вот тут: Примеры правил — Wiren Board - в переменной motion_timer_1_id именно уникальный идентификатор, присваиваемый таймеру.
Если вызвать clearTimeout() с идентификатором несуществующего таймера - то ничего не произойдет.
Можете подправить код? У меня не вышло
Только функцию - нет. Надо учесть область видимости переменной, если работа с таймером проихсходит в разных - то предавать идентификатор следует через глобальные.
Я же привел ссылку на верную “эталонную” реализацию.
Может как то по другому можно реализовать?
Смысл в том что при фиксаций движения включается диодная лента на 3 минуты
Но, часто надо чтобы датчик движения не влиял на ленту и она горела 60 минут. Получается человек вне зоны действия датчика и оказывается в темноте.
Да, можно. Или два таймера или один, но запускаемый на разное время, в зависимости от какого-то условия.
В зависимости от источника события - запускать таймер, устанавливая глобальную переменную значением его идентификатора.
Дак по сути и использовал два таймера.
Когда зашёл в помещение, то уже сработал таймер (motion_bath_off )
В зависимости от ситуации, если необходимо, то нажимаешь клавишу (fn14)
Она меняет переменную motion117 с 1 на ноль, датчик не реагирует на дальнейшие движения и задаётся новый таймер, например на 20 минут.
Но, таймер motion_bath_off не обнулился и выключил через заданное им время wb-mrgbwwww-d_16 White 2
А, motion117 поменялась на 1 через 20 минут
Вот, да, потому что обнуляете несуществующий, укажите ID таймера - в этом то и дело.
Пробовал это сделать, либо ошибка, либо таймер дальше работает. Не понял как прописать
Попробуйте следующее: при создании экземпляра таймера сохранить его id.
Вывести в лог для уверенности.
Перед остановкой таймера - тоже вывести в лог id, для уверенности.