CC2531 + ZigBee2MQTT на OrangePi
Для подключения ZigBee устройств и датчиков необходим шлюз, который обеспечит взаимодействие между ними. Зачастую каждый производитель выпускает шлюзы поддерживающие только устройства своей экосистемы. Не все шлюзы возможно подключить к альтернативным системам управления и не все, подключенные через шлюз устройства, могут поддерживаться, бывает, что у устройств ограничен функционал. Решить подобные проблемы и объединить наши устройства поможет USB координатор CC2531 стоимостью 5$. Заказать можно на одной известной торговой китайской торговой площадке, устройства предлагаются в двух вариантах, со встроенной и внешней подключаемой антенной, предпочтительнее второй вариант, т.к. при недостаточном уровне сигнала можно заменить антенну на более мощную.
Для подключения устройств необходимы:
- USB координатор CC2531.
- Компьютер для подключения координатора и установки необходимого программного обеспечения, для этих целей прекрасно подходит OrangePi.
- Программное обеспечение ZigBee2MQTT.
- Программное обеспечение для работы протокола MQTT (так называемый MQTT брокер), например, Mosquitto.
Преимущества данного подключения устройств:
- Датчики и устройства можно подключить к альтернативным системам, таким как Home Assistant, не имея шлюза производителя.
- Обширный список устройств разных производителей. Полный список поддерживаемых устройств.
- Можно использовать гибридную систему, часть устройств подключены к шлюзу производителя, часть напрямую к СС2531.
- Некоторые устройства имеют функции, которых нет при подключении к шлюзу своей экосистемы.
Схема подключения будет выглядеть следующим образом:
На сайте проекта ZigBee2MQTT подробно расписан порядок действий, ниже будет представлен вольный перевод того, что необходимо выполнить:
- Прошивка CC2531
- Установка MQTT брокера Mosquitto
- Установка ZigBee2MQTT
- Обновление ZigBee2MQTT
- Подключение устройств
Прошивка CC2531
Изначально устройство пустое, на ней не прошито никакого управляющего программного обеспечения, поэтому первым делом необходимо залить на устройство прошивку. Прошить устройство можно несколькими способами:
При помощи CC Debugger, покупается на той же площадке где и плата, стоит как два устройства CC2531. Можно поискать у знакомых, которые уже купили данное устройство. Минус, то что оно нужно всего на один-два раза, прошить/обновить плату и.... возможно прошить еще одну, которая будет выступать как роутер. Необходим Debug кабель, покупается там же вместе с CC Debugger'ом или отдельно.
Ниже описан вариант для Windows.
Скачиваем и устанавливаем программу SmartRF Flash Programmer, необходимо зарегистрироваться на сайте, после чего будет доступна ссылка на скачивание. Будьте внимательны! SmartRF Flash Programmer v2 не подходит!!!
Скачиваем и устанавливаем драйвер для CC Debugger, подключите CC Debugger к USB порту, в диспетчере устройств убедитесь, что драйвер установился корректно и устройство определилось. При возникновении проблем установите драйвер вручную. Отключите CC Debugger.
Подключить СС2531 к CC Debugger'у при помощи Debug кабеля. Подключить оба устройства (CC2531 и CC Debugger) к USB портам компьютера. Если индикатор на CC Debugger светит красным, то нажать кнопку Reset на CC Debugger, индикатор должен загореться зеленым цветом.
Скачиваем и распаковываем прошивку для CC2531. Прошивки есть для ZigBee версии 1.2 и 3. Для версии 1.2 есть два вида прошивок Default и Source Routing, автор комментирует так:
- Если в ZigBee сети до 30 устройств, то рекомендуется версия Default.
- Если в ZigBee сети более 30 устройств, то рекомендуется версия Source Routing. Данная прошивка поддерживает только 5 прямых подключений к координатору, остальные устройства подключаются через роутеры. Роутером в ZigBee сети обычно выступает любое устройство, подключенное к постоянному питанию, розетки, выключатели, светильники, но выключатели Xiaomi без нулевой линии не являются роутерами. Так же в качестве роутера можно использовать другое устройства CC2531 или CC2530, но прошитые специальной прошивкой.
Запускаем SmartRF Flash Programmer и выбираем:
- What do you want to program:
Program CCxxxx SoC or MSP430
- Во вкладке Sisten-on-Chip выбираем
CC2531
- Interface:
Fast
- Flash Image File выбираем файл прошивки с расширением
*.hex
. - Location:
Primary
- Actions:
Erace, program and verify
Нажимаем Perfom actions,
ждем окончания прошивки модуля.
Отключаем модуль от компьютера и CC Debugger'а.
Установка MQTT брокера Mosquitto
Дальнейшие инструкции описывают установку программного обеспечения на Ubuntu и другие системы на базе Debian.
Выполняем:
$ sudo apt-get install mosquitto
В файле /etc/mosquitto/mosquitto.conf
должно быть следующее:
pid_file /var/run/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d
Создадим файл default.conf
для внесения своих настроек:
$ sudo touch /etc/mosquitto/conf.d/default.conf
Для установки пароля в файл /etc/mosquitto/conf.d/default.conf
внесем следующее:
allow_anonymous false
password_file /etc/mosquitto/passwd
Создаем нового пользователя usermosquitto с паролем passmosquitto для подключения к Mosquitto:
$ sudo mosquitto_passwd -c /etc/mosquitto/passwd usermosquitto
Вводим пароль для нового пользователя и перезапускаем сервис Mosquitto:
$ sudo systemctl restart mosquitto
Установка ZigBee2MQTT
Подключаем CC2531 координатор к компьютеру, работающему 24/7, самый распространенный вариант это OrangePi где крутится сервис автоматизации, но на самом деле это могут быть разные компьютеры, первый MQTT брокером, второй с сервисом ZigBee2MQTT, третий с сервисом автоматизации :) Но обычно это один компьютер.
Проверяем подключение устройства в системе:
$ ls -l /dev/serial/by-id
total 0
lrwxrwxrwx 1 root root 13 Jul 18 10:56 usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0014D47D15-if00 -> ../../ttyACM0
Как видно из ответа, наше устройство обнаружилось как ttyACM0
, проверяем:
$ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0 Jul 22 22:43 /dev/ttyACM0
Устанавливаем репозиторий Node.js
:
$ sudo curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
Устанавливаем Node.js
:
$ sudo apt-get install -y nodejs git make g++ gcc
Проверяем версии Node.js
и npm:
$ node --version
v12.18.2
$ npm --version
6.14.5
Версия Node.js
должна быть 10.x или 12.x, npm
- 6.x
Делаем клон репозитория ZigBee2MQTT:
$ sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
Устанавливаем права:
$ sudo chown -R user:group /opt/zigbee2mqtt
где user - пользователь, под которым будет работать сервис, group - группа имеющая доступ к папке. Для OrangePi это обычно orangepi:orangepi. Пользователь должен входить в группу dialout.
Установка зависимостей:
$ cd /opt/zigbee2mqtt
$ npm ci
При корректной установке в ответ будет выведено сообщение вида:
node-pre-gyp info ok
added 752 packages in 121.57s
Предупреждающие сообщения Warning
игнорируем.
Редактируем файл настроек /opt/zigbee2mqtt/data/configuration.yaml
:
homeassistant: false
permit_join: true
mqtt:
base_topic: zigbee2mqtt
server: mqtt://localhost
serial:
port: /dev/ttyACM0
devices:
'0x00158d00016d1197':
friendly_name: '0x00158d00016d1197'
'0x00158d0001d38864':
friendly_name: '0x00158d0001d38864'
'0x00158d00019ce299':
friendly_name: '0x00158d00019ce299'
'0x00158d000163f4e7':
friendly_name: '0x00158d000163f4e7'
'0x00158d00018b4089':
friendly_name: '0x00158d00018b4089'
'0x00124b00092dcf37':
friendly_name: '0x00124b00092dcf37'
homeassistant: true
- если вы собираетесь используете интеграцию с Home Assistant.permit_join: false
- подключение новых устройств. Для подключения новых устройств необходимо выставить в true, рекомендуемое значение false во избежание подключения случайных устройств.server: 'mqtt://localhost'
- адрес сервера MQTT. Если это тоже самое устройство, то оставляем localhost
.user: usermosquitto
- пользователь с доступом к MQTT серверу.password: passmosquitto
- Пароль пользователя MQTT сервера.port: /dev/ttyACM0
- устройство CC2531 в системе.network_key: GENERATE
- ключ безопасности сети ZigBee. GENERATE
- при старте будет сгенерирован новый ключ, можно задать вручную: network_key: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5]
Первый запуск:
$ cd /opt/zigbee2mqtt
$ npm start
При правильной настройке будет сообщение вида:
zigbee2mqtt:info: Connecting to MQTT server at mqtt://localhost
zigbee2mqtt:info: Connected to MQTT server
Останавливаем программу Ctrl+C
.
Создаем файл для запуска сервиса при старте системы.
$ sudo nano /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=orangepi
[Install]
WantedBy=multi-user.target
User=orangepi
- Пользователь, с правами которого запускается сервис. Для OrangePi это обычно пользователь orangepi.
Добавляем сервис в автозагрузку и запускаем его:
$ sudo systemctl enable zigbee2mqtt.service
$ sudo systemctl start zigbee2mqtt.service
Проверяем
$ sudo systemctl status zigbee2mqtt.service
Обновление ZigBee2MQTT
Останавливаем сервис:
$ sudo systemctl stop zigbee2mqtt.service
Делаем резервную копию данных:
$ cd /opt/zigbee2mqtt
$ cp -R data data-backup
Запуск обновления:
$ git checkout HEAD -- npm-shrinkwrap.json
$ git pull
$ npm ci
Восстановление данных и запуск сервиса:
$ cp -R data-backup/* data
$ rm -rf data-backup
$ sudo systemctl start zigbee2mqtt
Проверяем работу
journalctl -u zigbee2mqtt.service -f
Подключение устройств
Для подключения устройств в файле /opt/zigbee2mqtt/data/configuration.yaml
надо установить permit_join: true
и перезагрузить сервис.
Перед подключением необходимо проверить, что подключаемое устройство находится в списке поддерживаемых устройств. Для перевода подключаемого устройства в режим спаривания необходимо обратиться к инструкции производителя.
После подключения всех устройств для повышения безопасности и избежание случайного подключения других устройств в файле /opt/zigbee2mqtt/data/configuration.yaml
необходимо установить permit_join: false
после чего перезагрузить сервис.
Для просмотра событий в Mosquitto воспользуемся программой MQTT Explorer. Запускаем, вводим адрес MQTT сервера, в моем случае он расположен по адресу 10.10.11.50
. Если все установлено правильно, то в дереве увидим ветку zigbee2mqtt. Переходим в нее. Теперь на Xiaomi Wireless Switch зажимаем кнопку Reset до появления мигания диода (около 5 секунд). Примерно через 10 секунд в ветке zigbee2mqtt мы увидим наше устройство и данные которое оно передает.
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.