Однократная активация правила по срабатыванию датчика движения

Я хочу, чтобы у меня насос циркуляции ГВС автоматически запускался как только датчик заметил движение в ванной.
Сделал вот такой код, но проблема в том, что он продолжает спамить каждую секунду.

defineRule("BoilerCirculationAutomaticControlRule", { 
  whenChanged: "wb-msw-v3_62/Current Motion",
  then: function (newValue, devName, cellName) {
    if (newValue > 100) {
      SendTelegramMsg('Есть движение в ванной. Уровень ' + newValue + '. Циркуляция бойлера запущена'); 
    } 
  }
});

Как сделать, чтоб он сработал один раз, а потом не обращал внимание на повторные движения?

Добрый день!

Рекомендую добавить в логику таймер срабатывания. Пример реализации можно найти в документации.

Также можно добавить флаг для проверки, чтобы при повторном запуске устройство не активировалось снова. После срабатывания таймера насос можно отключить, и при следующем движении система вновь его запустит.

Добрый день, удалось ли решить вопрос?

Здравствуйте,

я решил отказаться от активации насоса циркуляции ГВС по датчику движения, т.к. при тестировании было слишком много непреднамеренных включений.
Вторая мысль была включать циркуляцию одновременно с включением света с ванной, но тут меня смутило, что за 2 дня свет в ванной включался раз 30, а насос дёргать так часто не очень хорошо, поэтому я решил сделать по-другому.
Циркуляция работает:

  • по расписанию утром с 6 до 8 и вечером с 20 до 23
  • по двойному нажатию кнопки включения света, если хочешь помыться в другое время
var BoilerCirculationTimeout = 120000; // 120 секунд
var BoilerCirculationRelay = "wb-mr6cu_76/K4";    
var BoilerCirculationButtons = ["wb-mr6c_120/Input 4 Double Press Counter", "wb-mr6c_126/Input 6 Double Press Counter"];
var BoilerCirculationRoomNames =  ["1й этаж", "2й этаж"];

defineRule("Start circulation cron job", { 
  when: cron("0 0 6,20 * * *"), 
  then: function () {
    dev[BoilerCirculationRelay] = true;
    }
});

defineRule("Stop circulation cron job", {
  when: cron("0 0 8,23 * * *"),  
  then: function () {
    dev[BoilerCirculationRelay] = false;
    }
});

defineRule({
    whenChanged: BoilerCirculationButtons,
    then: function(newValue, devName, cellName) {
        dev[BoilerCirculationRelay] = true;
        var index = BoilerCirculationButtons.indexOf(devName + '/' + cellName);
        SendTelegramMsg('Кто-то пошёл мыться на ' + BoilerCirculationRoomNames[index]);
        setTimeout( function () { dev[BoilerCirculationRelay] = false; }, 120000 ); 
    }
});

Добрый день,

Спасибо, что поделились своим опытом!
Цикличное расписание и принудительное включение действительно, наверное, самое надежное решение.