Диммирование нескольких источников света с одной кнопки

Здравствуйте, подскажите как можно реализовать синхронное диммирование нескольких групп света, которые к тому-же подключены на разные устройства (WB-LED и WB-MDM3), с одного кнопочного выключателя.

Добрый день.
Один из способов, это реализовать программное слежение за контролом через движок правил WB-Rules, в документации есть пример реализации.
Чуть чуть переделал, чтоб было более понятно:

defineRule({
  whenChanged: "wb-mdm3_50/K1",
  then: function (newValue, devName, cellName) {
	dev["wb-mdm3_50/K2"] = newValue;
  }
});

defineRule({
  whenChanged: "wb-mdm3_50/Channel 1",
  then: function (newValue, devName, cellName) {
	dev["wb-mdm3_50/Channel 2"] = newValue;
  }
});

То есть, в данном случае он копирует значение одного контрола, к которому подключена кнопка и приводит в соответствие значение другого, который с кнопкой уже непосредственно не связан?
Но тогда у меня еще вопрос, мне нужно чтобы эти контролы только диммировались синхронно, в остальное же время они будут включаться сценарно в других режимах, значения которых не всегда одинаковы для всех устройств, которые управляются с этой кнопки.
Для примера: я запуская сценарий в котором лента с WB-LED включена на 30%, а светильники на WB-MDM3 включены на 70%, получится ли сделать это, когда один контрол копирует другой?

К сожалению, я не до конца понял вашу мысль.
В движке правил вы можете любую логику настроить под свои сценарии.
Изучите, пожалуйста, примеры реализации, может что-то найдете вам подходящее.
https://wirenboard.com/wiki/Rule_Examples

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

Если я правильно понял, то вот так должно работать.

defineRule({
  whenChanged: ["wb-mdm3_50/Input 1 Long Press Counter", "wb-mdm3_50/Channel 1"],
  then: function (newValue, devName, cellName) {
	dev["wb-mdm3_50/Channel 2"] = dev["wb-mdm3_50/Channel 1"];
  }
});

Проверил то как вы описали, но он продолжает полностью копировать основной контрол, не важно было ли длинное нажатие или нет. Внес некоторые изменения в код, покажу на вашем примере:

defineRule({
  whenChanged: ["wb-mdm3_50/Input 1"],
  then: function (newValue, devName, cellName) {
	dev["wb-mdm3_50/Channel 2"] = dev["wb-mdm3_50/Channel 1"];
  }
});

Короткое нажатие не переводит значение Input во включенное положение, а происходит это только при длинном нажатии (возможно дело в скорости обмена данными и контроллер не успевает переключить значение, точно не могу сказать). Но теперь значение основного контрола считывается в момент нажатия кнопки, а затем в момент отпускания при длинном нажатии. Проблема состоит только в том, что теперь нет плавного диммирования обеих групп, одна, которая подключена к инпуту, плавно изменяет яркость, а другая, которая считывает значение, просто переходит к значению, которое получается после завершения диммирования, и делает это уже после того, как основная группа поменяла яркость полностью (не синхронно). В интерфейсе теперь они не зависят друг от друга и возможно выставить разную яркость на них, но вот такая проблема появилась.

Как итог сделал все проще, подключил выключатель ко входам нескольких устройств, с учетом заземления. Проверил на том что есть (WB-LED и WB-MDM3 с куском ленты и лампочкой), на стенде работает неплохо, надеюсь, что на объекте не возникнет сюрпризов. Ну а в целом, с кодом который работал бы так, как хочется не разобрался, так что проще физическое расключение проводами. Если бы не нужно было диммирование - было бы гораздо проще, для выключателей код достаточно понятный вырисовывается.

Спасибо за помощь вам и вашему коллеге, с которым мы обсуждали этот вопрос по телефону!

1 Like