Периодический таймер для реализации "моргали"

Добрый день коллеги!
Столкнулся с задачей сделать виртуальный переключатель при значении true которого должно происходить включение одного или двух реальных реле (K1, K2 к примеру), далее через заданный промежуток времени (30 минут) реле должны выключиться и включиться через новый промежуток времени (8 мин) и так далее по кругу пока переключатель находится в значении true.
Смог реализовать вот таким правилом:

defineVirtualDevice("heater_3", {
  title: "heater_3",
  cells: {
    "Switch-ON": {
      type: "switch",
      value: "false"
    }
  }
});

defineRule({
  when: function() {
    return dev["heater_3/Switch-ON"]; 
  },
  then: function() {

    if (!timers.seconds_5.firing) {
      dev["wb-mr6c_140/K3"] = true;
      dev["wb-mr6c_140/K4"] = true;
      startTimer("seconds_5", 4000);
    }
      
      if (timers.seconds_5.firing) { 
        dev["wb-mr6c_140/K3"] = false;
        dev["wb-mr6c_140/K4"] = false;
        startTimer("seconds_1", 4000);
      }
  }
});

defineRule({
  when: function() {
    return !dev["heater_3/Switch-ON"]; 
  },
  then: function() {
      dev["wb-mr6c_140/K3"] = false;
      dev["wb-mr6c_140/K4"] = false;
      }
});

Однако при создании двух аналогичных правил столкнулся с тем что при включении обоих работает только то у которого интервалы работы таймеров меньше.
Для сравнения прикрепляю оба правила.

Но разве не проще сделать вот так: Подключение термоэлектрических сервоприводов к WBIO-DO-SSR-8 или WBIO-DO-HS-8 - #6 от пользователя BrainRoot

Смог нейти решение в telegram канале WirenBoard, реализация которая подошла:

function customHeater(name, interval, relays) {
  defineVirtualDevice(name, {
    title: name,
    cells: {
      "Switch-ON": {
        type: "switch",
        value: false
      }
    }
  });

  defineRule({
    whenChanged: name + "/Switch-ON",
    then: function (newValue, devName, cellName) {
      if (this.timer_interval) {
        clearInterval(this.timer_interval);      
      }     
      if (newValue) {
        this.timer_interval = setInterval(function () {
          relays.forEach(function(relName) {
              dev[relName] = !dev[relName];
          })
        }, interval);
      } else{
          relays.forEach(function(relName) {
              dev[relName] = false;
          })
      }
    }
  });
}

customHeater("Heater_1", 900, ["wb-mr6c_140/K3", "wb-mr6c_140/K4"]);
customHeater("Heater_11", 1500, ["wb-mr6c_140/K5", "wb-mr6c_140/K6"]);