Добрый день! Стоит задача подружить беспроводной выключатель WXKG02LM с реле WB-MR6C v2. Модуль WBE2R-R-Zigbee успешно настроил, zigbee2mqtt установил, устройство смог подключить.
Собственно вопрос, как управлять реле по нажатию кнопок на выключателе. Понимаю, что нужно создать правило. Натолкните на правильный путь!
Первый шаг сделал, такой скрипт заработал
defineRule(“test_rule”, { //имя правила test_rule
whenChanged: “0x00158d00023884d3/click”,
then: function (newValue, devName, cellName) {
dev["wb-mr6c_93"]["K1"] = true;
}
});
Но естественно, далеко не так, как хотелось бы.
Не понимаю, как сделать цикличное переключение реле?
Выключатель отправляет значения left или right, так вот если нажать кнопку дважды - значение не меняется и инструкция whenChanged: не срабатывает.
Помогите чайнику!
Так, а чего хотите добиться в итоге? Какой алгоритм?
Я хочу, чтобы левая кнопка циклично управляла реле К1, а правая - реле К2
Идея в том чтобы написать if и различать события.
Напишите после строки с then
log.info(“newValue”, newValue);
и покажите что выводит при нажатиях
При этом, многократное нажатие на одну кнопку дает только одну строчку в логе, т.е whenChanged не срабатывает, т.к. значение не меняется
Так, значит сам выключатель и отправляет одно “событие”.
Для уверенности - можно подписаться на топик mqtt и посмотреть.
Но вам для управления реле надо сейчас:
dev["wb-mr6c_93"]["K1"] = true;
Заменить на
if ( newValue == "left"){
dev["wb-mr6c_93"]["K1"] = !dev["wb-mr6c_93"]["K1"];
}
И для другого реле - аналогично.
Выключатель отправляет событие каждый раз при нажатии кнопки, просто одно и то же, поэтому whenChanged и не отрабатывает(
Добавил if по вашему совету, теперь работает так:
1.Нажимаю левую - реле включается
2. Нажимаю еще раз - гичего не происходит
3. Нажимаю правую - соответственно меняется значение click на right
4 Нажимаю левую - значение меняется на left, реле отключается
Подскажите, как подписаться на топик и посмотреть что там прилетает?
Победил таким костылем
defineRule(“test_rule”, {
whenChanged: “0x00158d00023884d3/click”,
then: function (newValue, devName, cellName) {
log.info(“newValue”, newValue);
if ( newValue == “left”){
dev[“wb-mr6c_93”][“K1”] = !dev[“wb-mr6c_93”][“K1”];
dev[“0x00158d00023884d3”][“click”] = “clicked”;
}
}
});
Отлично! То есть ему надо именнно “подтвердить” получение.
Анализируйте также изменение timestamp, только устройства zigbee сами периодически обновляются, это нужно не учитывать чтобы не было ложных срабатываний
Да, думал об этом, но параметр last_seen считаю может меняться, когда zigbee устройство нечто типа keepalive пришлет (не силен в протоколе).