Нужна помощь по коду

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

defineVirtualDevice("Light", {
	title: "Light_room",// включение света
	cells: {
		enabled: {
		type: "switch",
		value: false
		}
	}
});
// Виртуальная кнопка
defineRule("Light_room_switch", {
whenChanged: "Light/enabled",
        then: function (newValue, devName, cellName) { 
        dev["wb-mr6c_47/K1"] = newValue;
        }
})
// Физический выключатель
defineRule("switch_1", {
whenChanged: "wb-mr6c_47/Input 1",
        then: function (newValue, devName, cellName) {
        dev["wb-mr6c_47/K1"] = newValue;
        }
});
defineVirtualDevice("Light", {
	title: "Light_room",// включение света
	cells: {
		enabled: {
		type: "switch",
		value: false
		}
	}
});
// Виртуальная кнопка
defineRule("Light_room_switch", {
whenChanged: "Light/enabled",
        then: function (newValue, devName, cellName) { 
        dev["wb-mr6c_47/K1"] = newValue;
        }
})
// Физический выключатель
defineRule("switch_1", {
whenChanged: "wb-mr6c_47/Input 1",
        then: function (newValue, devName, cellName) {
        dev["wb-mr6c_47/K1"] = newValue;
        if(newValue){
            dev["Light/enabled"] = !dev["Light/enabled"]
        }
});
2 лайка

Добрый день.
Проще код будет выглядеть так:

// Физический выключатель
defineRule("switch_1", {
whenChanged: "wb-mr6c_47/Input 1",
        then: function (newValue, devName, cellName) {
        dev["wb-mr6c_47/K1"] = newValue;
        dev["Light/enabled"] = newValue;
        }
});

В таком случае состояние виртуального переключателя будет изменяться, при каждом изменении состоянии кнопки =D

Изначальное ТЗ было: “при нажатии физического выключателя переключалось положение виртуальной кнопки”

Немного не логично, но да, если нужно четко по ТЗ, то ваш вариант верен.

Добрый вечер всем! Может неправильно объяснил: физическая кнопка без фиксации, включение/выключение реле1 кратковременным сигналом на input1, при этом виртуальная кнопка должна фиксироваться и так же включать/выключать свет. И если виртуальная кнопка в выключенном состоянии, то нажатием физической она должна включаться как и реле1 и наоборот.

Добрый день.
Вы пробовали выполнить рекомендации, указанные выше?
Результат не соответствует ожиданиям?

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

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

defineRule("switch_1", {
whenChanged: ["wb-mr6c_47/Input 1", "Light/enabled"] ,
        then: function (newValue, devName, cellName) {
        dev["wb-mr6c_47/K1"] = newValue;
        dev["Light/enabled"] = newValue
        }
});

Сразу почему-то не сделал так.

Благодарю, попробую!

  1. Если выключатель с фиксацией (либо открытый постоянно, либо закрытый контакт) - это работает, но если включить физическим выключателем, а выключить виртуальной кнопкой - нужно делать выключение-включение физическим выключателем, чтобы включить реле.
  2. Если выключатель без фиксации (кратковременный сигнал на input1) - виртуальная кнопка не фиксируется, она фиксируется только когда есть постоянный сигнал на input1. В идеале виртуальная кнопка должна включаться и выключаться по кратковременному сигналу на input1 и тогда физический и виртуальный выключатели будут синхронизированы между собой.