ERROR: trying to stop unknown timer

Добрый день!

Хочу реализовать сценарий выключения света в помещении, при отсутствии движения в течение 5 минут, но если кто-то войдет в помещении, то таймер должен сбросится и свет не отключится.
В отдельном правиле создал несколько виртуальный устройств, которые управляют группами освещения внешнего контроллера (dev[“light”][“kitchen”] == 100).

В тот момент, когда таймер прерывается движением в лог начинают сыпаться сообщения “ERROR: trying to stop unknown timer:” и правило де-факто перестаёт работать до перезапуска.

Изучил примеры тут и тут, но ответа на вопрос не получил.

Недавно обновился на релиз wb-2304, не помню, что проблема была на wb-2204.

var motion_timer_2_timeout_ms = 30 * 1000; // time delay after Max Motion dropped below threshold in ms
var timer2 = null;

defineRule("Kitchen_motion_light", // Switch on light when motion detected and switch off with time delay when no Max Motion below threshold and all garage doors closed
{
    whenChanged: "wb-msw-v3_79/Max Motion",
    then: function(newValue, devName, cellName) 
	{
        if (newValue > 45)         
        {
//           	if (dev["light"]["kitchen"] == 100)
//            {   
            if (timer2) {
//              log ("Kitchen timer resetted " + timer2);
              clearTimeout(timer2);
//            }                   
            }
        } 	
        else
          {
//        log ("Kitchen timer preparation " + timer2 + "/ Light: " + dev["light"]["kitchen"] + " / Max Motion: " + dev["wb-msw-v3_79"]["Max Motion"]);
         if ((dev["light"]["kitchen"] == 100) && (!timer2))
            {
//             log ("Kitchen timer activated " + timer2);
//             if (timer2) {
//             clearTimeout(timer2);
//            }  
              timer2 = setTimeout(function () 
             { dev["light"]["kitchen"] = 0;
//              log ("Kitchen timer executed " + timer2);
             timer2 = null;
              },motion_timer_2_timeout_ms);   
//              log ("Kitchen timer after execution " + timer2);
            }
        }
    }
});

Добрый день.
Тут рекомендую простой способ отладки: Выводить в лог ID создаваемого таймера, его же при срабатывании и его же перед остановкой. Вполне возможно что пытаетесь остановить уже сработавший.

Проблема решена.
Добавил присвоение значения null в части сброса таймера:

if (timer2)  {
              clearTimeout(timer2);
              timer2 = null;
            }

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