Кнопка zigbee

Добрый день. Помогите пожалуйста в проблеме.
Имеется кнопка подключенная по zigbee. При однократном нажатии она в топик записывает значение single. При повторном нажатии значение не меняется. Хотелось бы чтоб данная кнопка управлял включением и выключение реле. Как написать скрипт, чтоб при однократном нажатии кнопка переключала реле?

Здравствуйте.

Прошу подробностей:

  1. Посредством чего работаете с ZigBee?
  2. Используете наш контроллер? если да, то пришлите диагностический архив. Создание архива описано в документации.
  3. Какую кнопку используете? желательно ссылкой

оборудование все кроме кнопки 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.

Немного еще доработал и все случилось. Спасибо огромное за подсказку

1 лайк

Например Zigbee2mqtt+ikea lamp + ikea switch howto - #10 от пользователя Explorerol

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;
}
}
});

и все работает как надо

1 лайк