Но теперь другой интересный момент.
Написал такой код для отключения вентилятора по таймеру.
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
, таймер останавливается, и вентилятор включается. При этом не учитывается, что вентилятор может быть включен вручную через другое реле.
Для корректной работы системы необходимо разделить логику управления вентилятором по таймеру и ручному управлению реле. Измените код следующим образом:
- Таймер: Таймер должен запускаться только в случае необходимости, когда состояние реле
wb-mr6cv3_88/K6
изменяется на false
. Таймер должен отключать вентилятор по истечении установленного времени.
- Ручное управление: Когда состояние реле
wb-mr6cv3_88/K6
изменяется на true
, убедитесь, что вентилятор включается, но при этом таймер не должен отключать вентилятор, если его включение произошло вручную через другое реле.
- Разделение логики: Разделите управление вентилятором на две части:
Добрый день, удалось ли решить проблему?