Wiren Board 6: Подключение устройств ZigBee
Аппаратная часть
Для работы контроллера с Zigee устройствами необходимо подключить специальный модуль. Есть несколько вариантовː
- WBE2R-R-ZIGBEE - Модуль расширения Zigbee
- USB Стик CC2531 (Можно приобрести на Aliexpress.com)
- Модуль СС2530 c переходником usb-uart. Подключениеː
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 /mnt/data/root/zigbee2mqtt
Настраиваем права
chown -R root:root /mnt/data/root/zigbee2mqtt
Заходим в директорию и запускаем установку
cd /mnt/data/root/zigbee2mqtt npm install
В процессе установки будет показано несколько предупреждений. Их можно игнорировать.
Что бы установить оригинальную версию zigbee2mqtt воспользуйтесь официальной инструкцией zigbee2mqtt.io
Для автоматического запуска zigbee2mqtt необходимо создать сервис. Для этого зайдите в папку /etc/systemd/system/ и создайте файл zigbee2mqtt.service
Откройте файл и скопируйте в него следующий текстː
[Unit] Description=zigbee2mqtt After=network.target [Service] ExecStart=/usr/bin/npm start WorkingDirectory=/mnt/data/root/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.
Далее зайдите в папку /mnt/data/root/zigbee2mqtt/data и отредактируйте файл configuration.yaml ː
# Настройка для интеграции с homeassistant homeassistant: false # Разрешение на добавление новых устройств (Измените этот параметр на falsе после добавления всех необходимых устройств) permit_join: true # Настройки MQTT сервера mqtt: server: 'mqtt://localhost' # Настройка порта serial: port: /dev/ttyMOD3 advanced: # Если вы используете CC2530 или модуль WBE2R-R-ZIGBEE. (удалите этот параметр, если используете 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 - переключить состояние.
}
}
});