CC2531 + ZigBee2MQTT на OrangePi

  • Михаил
  • 12 мин. на прочтение
  • 166
  • 06 Jan 2020
  • 06 Jan 2023

Для подключения 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 мы увидим наше устройство и данные которое оно передает.