Мой финальный вариант того функционала, что я бы хотел увидеть в базовой прошивке диммера. Выглядит короче, но под капотом все равно генерится 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);