Добрый день. Помогите пожалуйста в проблеме.
Имеется кнопка подключенная по zigbee. При однократном нажатии она в топик записывает значение single. При повторном нажатии значение не меняется. Хотелось бы чтоб данная кнопка управлял включением и выключение реле. Как написать скрипт, чтоб при однократном нажатии кнопка переключала реле?
Здравствуйте.
Прошу подробностей:
- Посредством чего работаете с ZigBee?
- Используете наш контроллер? если да, то пришлите диагностический архив. Создание архива описано в документации.
- Какую кнопку используете? желательно ссылкой
оборудование все кроме кнопки wirenboard.
Ссылка на кнопку: Купить Беспроводная кнопка SONOFF SNZB-01P - Zigbee
архив в приложении
diag_AU5E6WCW_2025-02-27-12.13.35.zip (330,8 КБ)
Есть контроллер: Wiren Board 8.5
С ним куплен модуль контроллера:
Модуль расширения WBE2R-R-ZIGBEE v.2 + антенна
есть еще модуль WB-MR6C v.3
есть выше указанная кнопка.
Хотелось бы чтоб при одинарном нажатии переключался выход К1, при двойном К2, при долгом К3 модуля WB-MR6C.
Исходя из страницы устройства SNZB-01P значения могут быть только: single
, double
, long
.
Соответственно, в скриптах wb-rules вам следует считывать из топика именно эти значения.
Вот какой скрипт написал AIbot:
Вот пример скрипта для wb-rules
, который будет слушать сообщения в friendly_name/action
и в зависимости от значения (single
, double
, long
) выполнять toggle для реле K1, K2 или K3 на модуле WB-MR6C v.3:
defineRule("toggle_relays_based_on_action", {
whenChanged: "friendly_name/action",
then: function (newValue, devName, cellName) {
switch (newValue) {
case "single":
dev["wb-mr6c_1"]["K1"] = !dev["wb-mr6c_1"]["K1"];
break;
case "double":
dev["wb-mr6c_1"]["K2"] = !dev["wb-mr6c_1"]["K2"];
break;
case "long":
dev["wb-mr6c_1"]["K3"] = !dev["wb-mr6c_1"]["K3"];
break;
}
}
});
Этот скрипт использует метод defineRule
из движка wb-rules
для создания правила. Он проверяет, какое значение (single
, double
, long
) было отправлено в топик friendly_name/action
, и переключает соответствующее реле (K1
, K2
или K3
) на модуле WB-MR6C v.3
.
Таким образом, проверьте свой топик friendly_name/action
и исполнительное устройство и попробуйте запустить скрипт.
Данное правило работает только при условии, что нельзя два раза подряд нажать single, single и он переключит реле, обязательным условием является смена single на double или
long.
Немного еще доработал и все случилось. Спасибо огромное за подсказку
defineRule(“toggle_relays_based_on_action”, {
whenChanged: “0x84ba20fffedc2bb4/action”,
then: function (newValue, devName, cellName) {
switch (newValue) {
case “single”:
dev[“wb-mr6cv3_139”][“K1”] = !dev[“wb-mr6cv3_139”][“K1”];
dev[“0x84ba20fffedc2bb4/action”] = “null”
break;
case “double”:
dev[“wb-mr6cv3_139”][“K2”] = !dev[“wb-mr6cv3_139”][“K2”];
dev[“0x84ba20fffedc2bb4/action”] = “null”
break;
case “long”:
dev[“wb-mr6cv3_139”][“K3”] = !dev[“wb-mr6cv3_139”][“K3”];
dev[“0x84ba20fffedc2bb4/action”] = “null”
break;
}
}
});
и все работает как надо