Добрый день! Прошу помощи. Мне необходимо решить следующую задачу: ко входу 0 модуля реле 6-канального WB-MR6C v.3 с адресом 9 подключен выключатель типа кнопка (без фиксации положения). По нажатию на данный выключатель, должны включиться выходные каналы К2, К3 WB-модуля MR6C v.3 с адресом 9, выходные каналы К1, К5 модуля WB-MR6C v.3 с адресом 10, выходной канал 2, диммера WB-LED с адресом 12 и выходной канал и 1, диммера светодиодных ламп и ламп накаливания WB-MDM3 с адресом 13. (Если некоторые каналы модулей уже были во включеном состоянии, при управлении из других мест, то выключаться они не должны). При повторном нажатии на данный выключатель, данные выходные каналы должны выключиться ( если некоторые из данных каналов были выключены с других мест управления, при выключении, включиться они не должны). Перепробовал разные примеры на портале по данной теме, но данного режима работы добиться не смог.
Здравствуйте! Я автоматический помощник техподдержки Wiren Board. Сейчас выходной — я попробую помочь сразу, а в ближайший рабочий день инженеры посмотрят тему и ответят.
Я проанализировал ваш вопрос и постарался найти возможное решение:
Если потребуется дополнительное уточнение, приложенную информацию прошу направить нажав ответить на мое крайнее сообщение
1. Оборудование и задача
У вас:
- WB-MR6C v.3, адрес 9
- вход 0 — кнопка (без фиксации)
- управлять реле K2, K3
- WB-MR6C v.3, адрес 10
- управлять реле K1, K5
- WB-LED, адрес 12
- управлять каналом 2
- WB-MDM3, адрес 13
- управлять каналом 1
Необходим режим «мастер-выключатель» с памятью состояния на момент первого нажатия:
- Первое нажатие:
- включить только те перечисленные каналы, которые были выключены;
- если какие-то каналы уже были включены (другими выключателями или сценами) — их состояние не трогать.
- Второе нажатие:
- выключить только те же самые каналы, которые были включены именно этим первым нажатием;
- если какой-то канал к этому моменту уже был выключен где-то ещё — его не включать обратно.
То есть нужно запоминать, какие каналы были изменены первым нажатием, и управлять только ими.
Такое поведение удобнее всего реализовать скриптом wb-rules на контроллере (например, WB8)[1].
2. Подготовка
-
Убедитесь, что все модули добавлены в Modbus-конфигурацию и в интерфейсе Devices вы видите:
wb-mr6c_9и его релеK2,K3(илиK2_ON,K3_ON— смотрите точные имена в веб-интерфейсе).wb-mr6c_10и его релеK1,K5.wb-led_12и канал 2 (обычно что-то вродеChannel 2илиCH2).wb-mdm3_13и канал 1 (диммируемый выход).
-
Важно: мне нужны точные MQTT‑имена каналов (как они отображаются в веб-интерфейсе:
/devices/.../controls/...).
Пожалуйста, приложите скриншоты вкладки Devices для этих устройств или просто перечислите точные имена.
Ниже — пример скрипта, который вы сможете адаптировать, подставив реальные имена.
3. Пример скрипта wb-rules (логика «мастер-выключатель с памятью»)
Создайте файл, например /etc/wb-rules/master_switch.js:
// === НАСТРОЙКИ: подправьте под реальные имена ===
// Имя входа-кнопки
var MASTER_BUTTON = 'wb-mr6c_9/Input 0'; // пример, замените на свой control
// Список управляемых каналов
// Смотрите точные имена в веб-интерфейсе (Devices → нужное устройство → Controls)
var TARGETS = [
'wb-mr6c_9/K2', // реле K2 адрес 9
'wb-mr6c_9/K3', // реле K3 адрес 9
'wb-mr6c_10/K1', // реле K1 адрес 10
'wb-mr6c_10/K5', // реле K5 адрес 10
'wb-led_12/Channel 2', // канал 2 WB-LED
'wb-mdm3_13/Channel 1' // канал 1 WB-MDM3
];
// === ВНУТРЕННЯЯ ЛОГИКА ===
// Храним:
// - какие каналы мы включили/изменили на "первом нажатии"
// - находимся ли сейчас в "активном" состоянии сцены
var sceneActive = false;
var touchedChannels = {}; // key: control name, value: "on" или предыдущее значение
// Функция чтения текущего значения канала
function getValue(ctrl) {
try {
return dev[ctrl];
} catch (e) {
log('Не удалось прочитать ' + ctrl + ': ' + e);
return null;
}
}
// Функция установки значения канала
function setValueSafe(ctrl, val) {
try {
dev[ctrl] = val;
} catch (e) {
log('Не удалось записать ' + ctrl + ' = ' + val + ': ' + e);
}
}
// Обработка "первого нажатия"
function masterOn() {
touchedChannels = {};
sceneActive = true;
TARGETS.forEach(function (ctrl) {
var cur = getValue(ctrl);
if (cur === null) {
return;
}
// Для реле — чаще всего 0/1, для диммеров — 0–100 или 0–255
// Логика: если "выключено" — включаем и запоминаем, что включили именно мы
var isOff = (cur === 0 || cur === false || cur === '0');
if (isOff) {
touchedChannels[ctrl] = cur; // запоминаем предыдущее состояние
// Здесь определяем "включенное" состояние:
// - для реле, как правило, 1
// - для диммеров — подберите нужный уровень (например, 100)
var newVal = 1;
if (ctrl.indexOf('wb-led_12') === 0 || ctrl.indexOf('wb-mdm3_13') === 0) {
// пример: ставим 100% яркости для диммеров, при необходимости измените
newVal = 100;
}
setValueSafe(ctrl, newVal);
}
// Если канал уже был включен — не трогаем и не запоминаем
});
log('Мастер включён, изменены каналы: ' + JSON.stringify(touchedChannels));
}
// Обработка "второго нажатия"
function masterOff() {
sceneActive = false
Добрый день,
Удалось ли решить вопрос?
Добрый день! На днях поеду на объект и применю предложеный скрипт, обязательно дам ответ что получилось. Благодарю за содействие!
Отлично, буду ждать обратную связь.
Добрый день! Я не справился с адаптацией скрипта. Все каналы переключаются при нажатии на мастер выключатель вход 0 модуля реле. Если есть возможность, прошу помочь готовым скриптом для текущей но упрощеной задачи:
Ко входу модуля wb-mr6cv3_9/Input 0 подключен выключатель типа кнопка (без фиксации положения). По нажатию на данный выключатель, должны включиться выходные каналы wb-mr6cv3_9/К1, wb-mr6cv3_9/К2, wb-mr6cv3_9/К3. (Если некоторые каналы модулей уже были во включеном состоянии, при управлении из других мест, то выключаться они не должны). При повторном нажатии на данный выключатель, все выходные каналы wb-mr6cv3_9/К1, wb-mr6cv3_9/К2, wb-mr6cv3_9/К3 должны выключиться ( если некоторые из данных каналов были выключены ранее с других мест управления, при выключении, включиться они не должны).
Добрый день,
Удалось ли решить вопрос?
Добрый день! Благодарю за внимание! На днях буду на объекте, проверю и дам обратную связь.
Добрый день!
Вам удалось проверить?
Нет ответа
