Правило для регламентного обслуживания водянных завтворов

Добрый день.

Подскажите по правилу, после выполнения правила из Вебки, оно повторяется ежедневно.
Что я не учел?

ValveMaintenance.js
// Инициализация переменных
var logEnabled = true; // Флаг, определяющий, включено ли логирование
var scriptName = "ValveMaintenance"; // Название вашего скрипта
var lightSensor = "DatVan/Illuminance"; // Переменная для датчика освещенности
var lightThreshold = 50; // Пороговое значение уровня света
var relay = "relle_2_moshnoe/K2";
var checkDelay = 60000; // Задержка перед повторной проверкой (60 секунд)
var valveOperationDelay = 30000; // Задержка перед операциями с клапанами (30 секунд)
var counterThreshold = 0.1; // Порог изменения показаний счётчиков
var schedulePeriod = "@monthly"; // Периодичность выполнения скрипта (каждую неделю)

// Переменные для клапанов
var voda1K1 = dev["voda_1"]["K1"];
var voda1K2 = dev["voda_1"]["K2"];
var voda2K1 = dev["voda_2"]["K1"];
var voda2K2 = dev["voda_2"]["K2"];

// Функция логирования действий скриптов
function logAction(action) {
  if (logEnabled) {
    log(scriptName + ": " + action);
  }
}


defineVirtualDevice("ValveMaintenance", {
  title: "Управление обслуживанием водяных задвижек",
  cells: {
    logEnabled: {
      type: "switch",
      title: "Логирование",
      value: logEnabled,
      readonly: false
    },
    manualTrigger: {
      type: "pushbutton",
      title: "Запустить обслуживание"
    },
    lastSuccessfulRun: {
      type: "text",
      title: "Последний успешный запуск",
      value: "не выполнено"
    },
    nextScheduledRun: {
      type: "text",
      title: "Следующий запланированный запуск",
      value: "не запланировано"
    }
  }
});

// Обработчик изменения значения для логирования
defineRule("log_control", {
  whenChanged: "ValveMaintenance/logEnabled",
  then: function (newValue, devName, cellName) {
    logEnabled = newValue;
    log(scriptName + ": Логирование " + (logEnabled ? "включено" : "отключено") + " через управление виртуальным устройством.");
  }
});

// Функция выполнения обслуживания
function performMaintenance() {
  logAction("Начало процедуры обслуживания");
  var initialInput1 = dev["schetchik"]["Input 1 counter"];
  var initialInput2 = dev["schetchik"]["Input 2 counter"];
  var lightValue = dev[lightSensor]; // Значение датчика освещенности
  logAction("Проверка показаний счётчиков и уровня освещенности");

  setTimeout(function() {
    var newInput1 = dev["schetchik"]["Input 1 counter"];
    var newInput2 = dev["schetchik"]["Input 2 counter"];
    logAction("Проверка показаний счётчиков");

    if (Math.abs(newInput1 - initialInput1) < counterThreshold && Math.abs(newInput2 - initialInput2) < counterThreshold && !dev[relay] && lightValue <= lightThreshold) {
  dev["voda_1"]["K1"] = false; // Обновляем значение виртуального устройства для клапана voda_1/K1
  dev["voda_1"]["K2"] = false; // Обновляем значение виртуального устройства для клапана voda_1/K2
  logAction("Закрытие клапанов voda_1");

  setTimeout(function() {
    dev["voda_2"]["K1"] = true;
    dev["voda_2"]["K2"] = true;
    logAction("Открытие клапанов voda_2 для циркуляции");

    setTimeout(function() {
      dev["voda_2"]["K1"] = false; 
      dev["voda_2"]["K2"] = false;
      logAction("Закрытие клапанов voda_2 после циркуляции");

      setTimeout(function() {
        dev["voda_1"]["K1"] = true;
        dev["voda_1"]["K2"] = true; 
        var currentDate = new Date();
        dev["ValveMaintenance"]["lastSuccessfulRun"] = currentDate.toISOString();
        dev["ValveMaintenance"]["nextScheduledRun"] = "не запланировано";
        logAction("Обслуживание клапанов завершено успешно");
      }, valveOperationDelay);
    }, valveOperationDelay);
  }, valveOperationDelay);
} else {
  var delayedDate = new Date(Date.now() + 24 * 60 * 60 * 1000);
  dev["ValveMaintenance"]["nextScheduledRun"] = delayedDate.toISOString();
  logAction("Обслуживание отложено");
}
  }, checkDelay);
}

// Правило для ручного запуска обслуживания
defineRule("manualTriggerRule", {
  whenChanged: "ValveMaintenance/manualTrigger",
  then: function() {
    logAction("Активирован ручной запуск обслуживания");
    performMaintenance();
  }
});

// Правило для автоматического запуска обслуживания по расписанию
defineRule("scheduledMaintenance", {
  when: cron(schedulePeriod),
  then: function() {
    logAction("Автоматический запуск обслуживания по расписанию");
    performMaintenance();
  }
});

// Инициализация переменных для счётчиков
global.counter1 = dev["schetchik"]["Input 1 counter"];
global.counter2 = dev["schetchik"]["Input 2 counter"];

Добрый день.

Не ясен вопрос: что вы ожидаете от скрипта и что происходит. Опишите подробнее.

К сожалению, мы не оказываем консультаций по написанию скриптов и их функциональности. Если у вас вас возникнут не ожидаемые ошибки при написании кода, постараемся помочь с решением проблемы.