Пример ниже. Но он будет работать, если после нажатия на кнопку в канале action
появляется значение toggle
, а потом пропадает. Если же значение toggle
будет присутствовать постоянно, то правило сработает только один раз. Нужно будет найти еще какой-нибудь признак нажатия кнопки или самостоятельно очищать значение в канале action
.
//создаем переменную со статусом лампы
var lamp_on = false;
//приводим реальное состояние лампы в соответствии с ее программным статусом (один раз при записи правила)
publish("zigbee2mqtt/0x8cf681fffe2a0b0b/set", JSON.stringify({ state: "OFF" }), 2, false);
defineRule("switch_ligth", {
whenChanged: "zigbee2mqtt/0x000d6ffffe256597/action",
then: function (newValue, devName, cellName) {
if (newValue == "toggle") { //проверяем, что нажата центральная кнопка
if (!lamp_on) { //проверяем, что лампа была выключена
publish("zigbee2mqtt/0x8cf681fffe2a0b0b/set", JSON.stringify({ state: "ON" }), 2, false); //если лампа была выключена, то включаем ее
lamp_on = true; //изменяем текущее состояние лампы
}
else {
publish("zigbee2mqtt/0x8cf681fffe2a0b0b/set", JSON.stringify({ state: "OFF" }), 2, false); //если лампа была включена, то выключаем ее
lamp_on = false; //изменяем текущее состояние лампы
}
}
}
});
Рекомендую все-таки ознакомиться с основами JavaScript и движка правил wb-rules, будет очень полезно