Добрый день.
Подскажите по правилу, после выполнения правила из Вебки, оно повторяется ежедневно.
Что я не учел?
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"];