Правило для управления WB-MR6C

Но теперь другой интересный момент.
Написал такой код для отключения вентилятора по таймеру.

defineRule({
whenChanged: “wb-mr6cv3_88/Input 6 Single Press Counter”,
then: function (newValue, devName, cellName) {
dev[“wb-mr6cv3_88/K6”] = !dev[“wb-mr6cv3_88/K6”];
}
});
defineRule({
whenChanged: “wb-mr6cv3_88/K6”
then function () {
if (dev[“wb-mr6cv3_88/K6”] == false) {
startTicker(“Vent1_timer”, 5000);
} else {
dev[“wb-mr6cv3_79/K6”] = true;
timers.Vent1_timer.stop();
}
}
});
defineRule({
when: function () { return timers.Vent1_timer.firing; },
then: function () {
dev[“wb-mr6cv3_79/K6”] = false;
}
});

И всё прекрасно работает, но…
Когда включаю реле 79/К6 на котором висит вентилятор вручную, не трогая реле 88/К6, то всё равно срабатывает таймер и вентилятор через таймаут отключается.
Как это возможно?

Здравствуйте! Переместили ваш вопрос в новую тему по правилу “на каждый вопрос своя тема”. Подготавливаем для вас ответ.

Добрый день!

Ваш текущий код содержит ошибку в логике работы с таймером и состоянием реле. В частности, таймер запускается при изменении состояния реле wb-mr6cv3_88/K6 на false, и он отключает вентилятор по истечении времени. Однако, при изменении состояния wb-mr6cv3_88/K6 на true, таймер останавливается, и вентилятор включается. При этом не учитывается, что вентилятор может быть включен вручную через другое реле.

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

  1. Таймер: Таймер должен запускаться только в случае необходимости, когда состояние реле wb-mr6cv3_88/K6 изменяется на false. Таймер должен отключать вентилятор по истечении установленного времени.
  2. Ручное управление: Когда состояние реле wb-mr6cv3_88/K6 изменяется на true, убедитесь, что вентилятор включается, но при этом таймер не должен отключать вентилятор, если его включение произошло вручную через другое реле.
  3. Разделение логики: Разделите управление вентилятором на две части:

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