Wiren Board 6: Подключение устройств ZigBee

Материал из Wiren Board


Аппаратная часть

Лицевая сторона модуля WBE2R-R-ZIGBEE
Обратная сторона модуля WBE2R-R-ZIGBEE
FLASH-PROGRAMMER
USB стик СС2531

Для работы контроллера с Zigee устройствами необходимо подключить специальный модуль. Есть несколько вариантовː

USB-Serial Adaper CC2530
3V3 VCC
GND GND
TXD P02
RXD P03

Прошивка

Для корректной работы модуля рекомендуется прошивка Z-Stack.

Для прошивки WBE2R-R-ZIGBEE или USB стика потребуется CC Debugger и загрузочный кабель. (Можно приобрести на Aliexpress.com)

Подключите CC Debugger к WBE2R-R-ZIGBEE или к USB стику через загрузочный кабель. Подключите USB кабель CC Debugger(a) к компьютеру. Скачайте и установите приложение FLASH-PROGRAMMER ( обычную версию, не v2) c сайта TI. Устройство должно определиться в таблице. Укажите путь к файлу прошивки. В области "Actions" выберите "Erase, program and verify" и нажмите кнопку "Perform actions". Полезную информацию по прошивке вы так же можете найти на сайте zigbee2mqtt.

zigbee2mqtt

zigbee2mqtt - Это мост, позволяющий управлять Zigbee устройствами через MQTT. Работает на Node.js, позволяет легко интегрировать Zigbee устройства в различные системы автоматизации такие как Home Assistant, Node Red и тд. Вы найдете всю необходимую информацию на сайте zigbee2mqtt.

zigbee2mqtt версия для WB

Мы немного изменили код zigbee2mqtt для поддержки Wiren Board MQTT Conventions. Измененную версию вы можете найти в нашем репозитории на GitHub

Установка

Настраиваем репозиторий Node JS

curl -sL https://deb.nodesource.com/setup_10.x | bash -

Устанавливаем необходимые компоненты

apt-get install -y nodejs git make g++ gcc

Если хотите установить версию c поддержкой Wiren Board MQTT Conventions

git clone https://github.com/contactless/zigbee2mqtt /opt/zigbee2mqtt

Либо если хотите установить оригинальную версию

git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt

Настраиваем права

chown -R root:root /opt/zigbee2mqtt

Заходим в директорию и запускаем установку

cd /opt/zigbee2mqtt
npm install

В процессе установки будет показано несколько предупреждений. Их можно игнорировать.

Для автоматического запуска zigbee2mqtt необходимо создать сервис. Для этого зайдите в папку /etc/systemd/system/ и создайте файл zigbee2mqtt.service

Откройте файл и скопируйте в него следующий текстː

[Unit]
Description=zigbee2mqtt
After=network.target

[Service]
ExecStart=/usr/bin/npm start
WorkingDirectory=/opt/zigbee2mqtt
StandardOutput=inherit
StandardError=inherit
Restart=always
User=root

[Install]
WantedBy=multi-user.target

И сохраните файл. После этого для активации сервиса следует ввести в консоль команду

systemctl enable zigbee2mqtt.service

Полную инструкцию можно найти на сайте zigbee2mqtt.

Конфигурация

После установки нужно настроить контроллер.

Если Вы используете модуль расширения WBE2R-R-ZIGBEE,то убедитесь, что правильно выставили модуль в Configs => Hardware Modules Configuration.

Далее зайдите в папку /opt/zigbee2mqtt/data и отредактируйте файл configuration.yaml ː

# Настройка для интеграции с homeassistant
homeassistant: false

# Разрешение на добавление новых устройств (Измените этот параметр на falsе после добавления всех необходимых устройств)
permit_join: true

# Настройки MQTT сервера
mqtt:
  server: 'mqtt://localhost'

# Настройка порта
serial:
  port: /dev/ttyMOD3
advanced:
  # Если вы используете CC2530. (удалите этот параметр, если используете USB стик CC2531)
  rtscts: false

  # штамп времени
  last_seen: epoch

Полное описание настроек можно найти на сайте zigbee2mqtt.


После изменения настроек введите команду

service zigbee2mqtt restart

Запуск

Для запуска, остановки и перезапуска сервиса используйте команды

service zigbee2mqtt start
service zigbee2mqtt stop
service zigbee2mqtt restart

Добавление устройств

Что бы добавить Zigbee устройство убедитесь, что в настройках моста включен параметр "permit_join" :

permit_join: true

Далее следуйте инструкции к устройству. В основном требуется зажать кнопку "pair" на несколько секунд и дождаться "мигания" светодиода. После этого устройство должно передать информацию о себе на контроллер. Иногда требуется дополнительно нажимать на кнопку каждую секунду, что бы устройство не "уснуло". После успешного добавления устройство автоматически появится во вкладке Devices.

Более подробная информация на сайте zigbee2mqtt.

MQTT

Описание структуры топиков и сообщений вы можете найти на сайте zigbee2mqtt.

В версии адаптированной под Wiren Board MQTT Conventions структура топиков иная:

Оригинальный топик WB MQTT
zigbee2mqtt/bridge/state /devices/zigbee/controls/state
zigbee2mqtt/bridge/config /devices/zigbee/controls/config
zigbee2mqtt/bridge/log /devices/zigbee/controls/log
zigbee2mqtt/bridge/config/devices/get /devices/zigbee/controls/config/devices/get
zigbee2mqtt/bridge/config/permit_join /devices/zigbee/controls/config/permit_join
zigbee2mqtt/bridge/config/last_seen /devices/zigbee/controls/config/last_seen
zigbee2mqtt/bridge/config/elapsed /devices/zigbee/controls/config/elapsed
zigbee2mqtt/bridge/config/reset /devices/zigbee/controls/config/reset
zigbee2mqtt/bridge/config/log_level /devices/zigbee/controls/config/log_level
zigbee2mqtt/bridge/config/device_options /devices/zigbee/controls/config/device_options
zigbee2mqtt/bridge/config/remove /devices/zigbee/controls/config/remove
zigbee2mqtt/bridge/config/ban /devices/zigbee/controls/config/ban
zigbee2mqtt/bridge/config/rename /devices/zigbee/controls/config/rename
zigbee2mqtt/bridge/config/add_group /devices/zigbee/controls/config/add_group
zigbee2mqtt/bridge/config/remove_group /devices/zigbee/controls/config/remove_group
zigbee2mqtt/bridge/networkmap /devices/zigbee/controls/bridge/networkmap
zigbee2mqtt/bridge/group/[friendly_name]/add /devices/zigbee/controls/bridge/group/[friendly_name]/add
zigbee2mqtt/bridge/group/[friendly_name]/remove /devices/zigbee/controls/bridge/group/[friendly_name]/remove
zigbee2mqtt/bridge/group/[friendly_name]/remove_all /devices/zigbee/controls/bridge/group/[friendly_name]/remove_all
zigbee2mqtt/bridge/bind/[friendly_name] /devices/zigbee/controls/bridge/bind/[friendly_name]
zigbee2mqtt/bridge/unbind/[friendly_name] /devices/zigbee/controls/bridge/unbind/[friendly_name]
zigbee2mqtt/bridge/device/[friendly_name]/get_group_membership /devices/zigbee/controls/bridge/device/[friendly_name]/get_group_membership
zigbee2mqtt/[DEVICE_ID]/set /devices/[DEVICE_ID]/set
zigbee2mqtt/[DEVICE_ID]/get /devices/[DEVICE_ID]/get
zigbee2mqtt/[DEVICE_ID] /devices/[DEVICE_ID]/controls/[property]


Пример правил

Для управления Zigbee устройствами необходимо отправить json с командой в /devices/[DEVICE_ID]/set

Пример:

defineRule("control_zigbee", {
  whenChanged: "0x00158d0002333f93/click", //следим за кнопкой
  then: function (newValue, devName, cellName)  {
    
    if(newValue == "single"){ //если было одинарное нажатие на кнопку

    publish("/devices/0x00158d0002333f93/controls/click", "processed", 2, true); // Что бы отличать старый клик от нового - записываем любое значение в топик.
    //вместо этого можно просто следить за штампом времени "last_seen"
    publish("/devices/0x00124b0009fe360d/set", JSON.stringify({state: "TOGGLE"}), 2, true); // отправляем JSON на zigbee розетку. TOGGLE - переключить состояние.

    }
  }
});