Не обнуляется таймер

День добрый!
Сделал функцию чтобы при запуске лента горела дольше установленного таймера и чтобы общий таймер не отключал, применил 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, для уверенности.

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.