Включение WB-MDM на 100%

День добрый!

Воспользовался вот этой темой для решения своего вопроса Включение света на 100% . Сам способ сработал, но почему не сделать это поведение стандартной опцией для димера?

В блоках настройки безопасного режима и поведении после отключения питания подобное действие есть “включить и установить уровень“. Можно ли это действие добавить в будущих прошивках и на реакцию входа?

Хочется все же такое простое действие иметь без головного контроллера, иначе грустно использовать одиноко стоящий димер, который сохраняет предыдущее состояние.

Хм есть ещё одно дополнение, решение из Включение света на 100% работает не стабильно, если добавить 3 отдельных правила на каждый канал, есть пропуски, приходится выключать и включать канал заново иначе выставляется прежний порог, если правило только 1 для одного канала то все прекрасно работает.

Переработал решение, пропуски ушли и вроде теперь все стабильно, прибил действие не ко входу а к логическому действию.

// Глобальные переменные для отслеживания состояния
var ch1_processed = false;
var ch2_processed = false;
var ch3_processed = false;

defineRule(“mdm_all_channels”, {
whenChanged: [
“wb-mdm3_41/Input 1 Single Press Counter”, “wb-mdm3_41/K1”,
“wb-mdm3_41/Input 3 Single Press Counter”, “wb-mdm3_41/K2”,
“wb-mdm3_41/Input 5 Single Press Counter”, “wb-mdm3_41/K3”
],
then: function() {
// Канал 1
if (dev[“wb-mdm3_41/Input 1 Single Press Counter”] && !dev[“wb-mdm3_41/K1”]) {
if (!ch1_processed) {
dev[“wb-mdm3_41/Channel 1”] = 100;
ch1_processed = true;
}
} else {
ch1_processed = false;
}

// Канал 2
if (dev["wb-mdm3_41/Input 3 Single Press Counter"] && !dev["wb-mdm3_41/K2"]) {
  if (!ch2_processed) {
    dev["wb-mdm3_41/Channel 2"] = 100;
    ch2_processed = true;
  }
} else {
  ch2_processed = false;
}

// Канал 3
if (dev["wb-mdm3_41/Input 5 Single Press Counter"] && !dev["wb-mdm3_41/K3"]) {
  if (!ch3_processed) {
    dev["wb-mdm3_41/Channel 3"] = 100;
    ch3_processed = true;
  }
} else {
  ch3_processed = false;
}

}
});

Мой финальный вариант того функционала, что я бы хотел увидеть в базовой прошивке диммера. Выглядит короче, но под капотом все равно генерится 3 отдельных правила.

Теперь одно одиночное нажатие добивает уровень до 100% если выход не 100 % (действие можно отключить)

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

можно вывести Single Press Counter в отдельную переменную, но это значение встречается 1 раз, не вижу смысла, просто добавьте свой триггер срабатывания.

// Конфигурация
// ADDR адрес димера wb-mdm3 в системе 
// ALWAYS режим работы. При значении true димер всегда включается на установленный уровень при нажатии
// При false включается на установленный уровень только если соответствующее реле (K1 K2 K3) выключено
var ADDR = 41;           // Адрес димера
var ALWAYS = true;       // true = всегда устанавливать уровень при нажатии

// Уровни для каждого канала (1-100)
var LEVEL1 = 100;
var LEVEL2 = 100;
var LEVEL3 = 100;

// Номера входов для каждого канала (1 3 5 для стандартной конфигурации)
// Эти переменные определяют к каким входам димера подключены кнопки
// Входы димера wb-mdm3 1 2 3 4 5 6 но реле K1 K2 K3 соответствуют входам 1 3 5
var INPUT1 = 1;
var INPUT2 = 3;
var INPUT3 = 5;

// Функция для создания правила
function createRule(channel, input, relay, level) {
  defineRule("mdm_" + channel + "_rule", {
    whenChanged: "wb-mdm3_" + ADDR + "/Input " + input + " Single Press Counter",
    then: function() {
// Условие срабатывания 
//   - если ALWAYS = true (режим всегда устанавливать уровень) то условие всегда истинно
//   - если ALWAYS = false то проверяем что реле выключено
      if (ALWAYS || !dev["wb-mdm3_" + ADDR + "/" + relay]) {
// Устанавливаем значение диммера на указанный уровень для выбранного канала
        dev["wb-mdm3_" + ADDR + "/Channel " + channel] = level;
// димер wb-mdm3 сохраняет последний уровень яркости поэтому это правило гарантирует что при каждом нажатии кнопки свет включится на заданный уровень а не на предыдущее значение
      }
    }
  });
}

// Создаем правила для всех каналов
createRule(1, INPUT1, "K1", LEVEL1);
createRule(2, INPUT2, "K2", LEVEL2);
createRule(3, INPUT3, "K3", LEVEL3);