Научите/поправьте скрипт K4 - реле основного света,
K5 - подсветка зеркала
K7 - вентилятор
- как поставить таймер на отключение вентилятора на 30 секунд? Проверить состояние реле света, если =0 то запустить таймер и отключить. поможите?
var motion_timer_1_timeout_ms = 40 * 1000;
var motion_timer_1_id = null;
// по включению света в ванной - подключается реле зеркала и реле вентилятора
// по выключению света - выключается реле зеркала и через 40 секунд реле вентилятора
defineRule("mirror_bath_change", {
whenChanged: "wb-mr14_26/Input 4 counter",
then: function (newValue, devName, cellName) {
// Если меняется значение
if (newValue) {
dev["wb-mr14_26"]["K5"]=!dev["wb-mr14_26"]["K5"] ;
// какой обработчик вставить сюда ????
dev["wb-mr14_26"]["K7"]=!dev["wb-mr14_26"]["K7"];
if (motion_timer_1_id)
{
clearTimeout(motion_timer_1_id);
}
//
// motion_timer_1_id = setTimeout(function () {
// dev["wb-mr14_26"]["K7"] = 0;
// motion_timer_1_id = null;
// }, motion_timer_1_timeout_ms);
// Если меняется значение
}
}
});
Добрый день! для этого вам потребуется 2 правила. Но я бы рекомендовал вам использовать выключатель с фиксацией. предлагаю решение для него. может понравится?
var timer_svet_ms = 30 * 1000;
var timer_svet = null;
defineRule(“mirror_bath_change_start”,
{
when: function ()
{
return dev[“wb-mr14_26”][“Input 4”] ==1; //выключатель включён
},
then: function()
if (timer_svet) //если передумали выключать и снова включили свет
{
clearTimeout(timer_svet);
}
dev[“wb-mr14_26”][“K4”] =1;
dev[“wb-mr14_26”][“K5”] =1;
dev[“wb-mr14_26”][“K7”] =1; //включили всё, что нужно
}
});
defineRule(“mirror_bath_change_stop”,
{
when: function ()
{
return dev[“wb-mr14_26”][“Input 4”] ==0 && dev[“wb-mr14_26”][“K4” ==0; //если перевели выключатель в состояние выключено и если выключился свет
},
then: function()
{
if (timer_svet)
{
clearTimeout(timer_svet);
}
timer_svet = setTimeout(function ()
{
dev[“wb-mr14_26”][“K5”] =0; //выключили свет над зеркалом
dev[“wb-mr14_26”][“K7”] =0; //выключили вентилятор
timer_svet = null;
},
timer_svet_ms);
}
});
Спасибо за идею, сегодня обдумаю. но скорее всего буду делать под нефиксируемый выключатель.
Вопрос собственно был наверное в If конструкции
нужно было поставить для сравнения величин ==, а я ставил = и у меня свет сразу выключался при включении =)
я где то читал что если вызывать dev[“wb-mr14_26”][“Input 4”] ==1, то это дополнительно нагружает стек mqtt команд. Если это не сильно влияет, то попробую через if конструкцию.
все заработало, спасибо за совет !!!
var vent_timer_1_timeout_ms = 30 * 1000;
var vent_timer_1_id = null;
var relay_on = false;
// по включению света в ванной - подключается реле зеркала и реле вентилятора
// по выключению света - выключается реле зеркала и через 40 секунд реле вентилятора
defineRule("mirror_bath_change", {
whenChanged: "wb-mr14_26/Input 4 counter",
then: function (newValue, devName, cellName) {
// Если меняется значение
// Изменяем состояние реле доп подсветки симметрично основному свету
dev["wb-mr14_26"]["K5"]=!dev["wb-mr14_26"]["K5"] ;
relay_on = dev["wb-mr14_26"]["K4"];
log("Состояние реле 4: "+ relay_on);
if (dev["wb-mr14_26"]["K4"]==true) {
log("Включаем вентилятор K7");
log("Состояние реле 4: "+ relay_on);
dev["wb-mr14_26"]["K7"]=1;
}
else
{
log("Выключаем вентилятор K7 !!!!");
log("Состояние реле 4: "+ relay_on);
if (vent_timer_1_id)
{
clearTimeout(vent_timer_1_id);
}
vent_timer_1_id = setTimeout(function () {
dev["wb-mr14_26"]["K7"] = 0;
vent_timer_1_id = null;
}, vent_timer_1_timeout_ms);
}
}
});
Приветствую!
Спасибо разработчикам за отличный пример сложного скрипта!
подскажите как модифицировать данный пример на 3 точки подключения последовательно?
И если прошло время - не отключать все последовательно, а все разом?
var button_timer_delay = 1500 //ms; задержка для включения второго реле
var button_timer_id = null //идентификатор таймера
defineRule("switch_relay_13_14", {
whenChanged: "wb-mr14_26/Input 14 counter", //Следим за Input 14
then: function(newValue, devName, cellName) {
if (newValue && !button_timer_id) {
log("switch_relay_13_14: Счетчик входа 14 изменил свое значение: ", newValue);
dev["wb-mr14_26"]["K13"] = !dev["wb-mr14_26"]["K13"];
button_timer_id = setTimeout(function() {
log("switch_relay_13_14: Закончился таймаут: ", button_timer_id);
button_timer_id = null;
}, button_timer_delay);
log("Запускаем таймер", button_timer_id);
} else if (newValue && button_timer_id) {
dev["wb-mr14_26"]["K14"] = dev["wb-mr14_26"]["K13"];
log("switch_relay_13_14: Отключаем таймаут: ", button_timer_id);
clearTimeout(button_timer_id);
button_timer_id = null;
}
}
});