CC2531 + ZigBee2MQTT, отказываемся от шлюзов производителей
Для подключения ZigBee устройств и датчиков необходим шлюз, который обеспечит взаимодействие между ними. Зачастую каждый производитель выпускает шлюзы поддерживающие только устройства своей экосистемы. Не все шлюзы возможно подключить к альтернативным системам управления и не все, подключенные через шлюз устройства, могут поддерживаться, бывает, что у устройств ограничен функционал. Решить подобные проблемы и объединить наши устройства поможет USB координатор CC2531 стоимостью 5$. Заказать можно на одной известной торговой китайской торговой площадке, устройства предлагаются в двух вариантах, со встроенной и внешней подключаемой антенной, предпочтительнее второй вариант, т.к. при недостаточном уровне сигнала можно заменить антенну на более мощную.
Для подключения устройств необходимы:
- USB координатор CC2531.
- Компьютер для подключения координатора и установки необходимого программного обеспечения, для этих целей прекрасно подходит Raspberry Pi.
- Программное обеспечение ZigBee2MQTT.
- Программное обеспечение для работы протокола MQTT (так называемый MQTT брокер), например, Mosquitto.
Преимущества данного подключения устройств:
- Датчики и устройства можно подключить к альтернативным системам, таким как Home Assistant, не имея шлюза производителя.
- Обширный список устройств разных производителей. Полный список поддерживаемых устройств.
- Можно использовать гибридную систему, часть устройств подключены к шлюзу производителя, часть напрямую к СС2531.
- Некоторые устройства имеют функции, которых нет при подключении к шлюзу своей экосистемы.
Схема подключения будет выглядеть следующим образом:
На сайте проекта ZigBee2MQTT подробно расписан порядок действий, ниже будет представлен вольный перевод того, что необходимо выполнить:
- Прошивка CC2531
- Установка MQTT брокера Mosquitto
- Установка ZigBee2MQTT
- Обновление ZigBee2MQTT
- Подключение устройств
- Выявленные проблемы
Прошивка CC2531
Изначально устройство пустое, на ней не прошито никакого управляющего программного обеспечения, поэтому первым делом необходимо залить на устройство прошивку. Прошить устройство можно несколькими способами:
- При помощи CC Debugger, покупается на той же площадке где и плата, стоит как два устройства CC2531. Можно поискать у знакомых, которые уже купили данное устройство. Минус, то что оно нужно всего на один-два раза, прошить/обновить плату и.... возможно прошить еще одну, которая будет выступать как роутер. Необходим Debug кабель, покупается там же вместе с CC Debugger'ом или отдельно.
- Прошить с помощью Paspberry Pi. [Инструкция]
Ниже описан первый вариант для Windows. Оригинал был описан на сайте ZigBee2MQTT. UPD.: на 10.11.2020 страница перенесена, но в общем списке ссылка на нее отсутствует.
Скачиваем и устанавливаем программу 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, в том числе Raspberry Pi OS.
Выполняем:
$ 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 <strong>usermosquitto</strong>
Вводим пароль для нового пользователя и перезапускаем сервис Mosquitto:
$ sudo systemctl restart mosquitto
Установка ZigBee2MQTT
Подключаем CC2531 координатор к компьютеру, работающему 24/7, самый распространенный вариант это Raspberry Pi где крутится сервис автоматизации, но на самом деле это могут быть разные компьютеры, первый 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 <strong>user</strong>:<strong>group </strong>/opt/zigbee2mqtt
где user - пользователь, под которым будет работать сервис, group - группа имеющая доступ к папке. Для Raspberry Pi это обычно pi:pi. Пользователь должен входить в группу dialout.
Установка зависимостей:
$ cd /opt/zigbee2mqtt $ npm ci
При корректной установке в ответ будет выведено сообщение вида:
node-pre-gyp info ok added 752 packages in 121.57s
Предупреждающие сообщения Warning
игнорируем.
Редактируем файл настроек /opt/zigbee2mqtt/data/configuration.yaml
:
homeassistant: true permit_join: false mqtt: base_topic: zigbee2mqtt server: 'mqtt://localhost' user: usermosquitto password: passmosquitto serial: port: /dev/ttyACM0 advanced: network_key: GENERATE
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
.
Создаем файл для запуска сервиса при старте системы.
<code class="code language-shell cm-s-default"><span class="cm-builtin">$ sudo</span> nano /etc/systemd/system/zigbee2mqtt.service</code>
Заполняем его.
[Unit] Description=zigbee2mqtt After=network.target [Service] ExecStart=/usr/bin/npm start WorkingDirectory=/opt/zigbee2mqtt StandardOutput=inherit StandardError=inherit Restart=always User=pi [Install] WantedBy=multi-user.target
User=pi
- Пользователь, с правами которого запускается сервис. Для Raspberry Pi это обычно пользователь pi.
Добавляем сервис в автозагрузку и запускаем его:
$ sudo systemctl enable zigbee2mqtt.service $ sudo systemctl start 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
Подключение устройств
Для подключения устройств в файле /opt/zigbee2mqtt/data/configuration.yaml
надо установить permit_join: true
и перезагрузить сервис.
Перед подключением необходимо проверить, что подключаемое устройство находится в списке поддерживаемых устройств. Для перевода подключаемого устройства в режим спаривания необходимо обратиться к инструкции производителя.
После подключения всех устройств для повышения безопасности и избежании случайного подключения других устройств в файле /opt/zigbee2mqtt/data/configuration.yaml
необходимо установить permit_join: false
после чего перезагрузить сервис.
Выявленные проблемы
На Ubuntu было лень создавать отдельного пользователя для работы сервиса и программа запускалась от пользователя homeassistant
вместе с самим Home Assistant. После нескольких минут работы у Home Assistant отваливалась связь со шлюзами и светильниками Xiaomi. После создания в системе отдельного пользователя и настройки запуска от его имени проблема ушла.
Комментарии
Доброго времени, спасибо за статью :) Похоже на то, что для работы c Home Assistant свисток достаточно только прошить, а вместо установок-сборок в командной строке можно просто добавить дополнение для HA "Mosquitto broker". Так ли это?
Не понимаю о каких сборках идет речь. Схема взаимодействия свистка и HA показана на схеме в самом начале статьи. Свисток взаимодействует с ZigBee устройствами, приложение ZigBee2MQTT взаимодействует со свистком и шлет данные с него в MQTT брокер, HA читает данные из MQTT брокера и в обратном порядке.
Бодрого времени суток!
Если есть возможность, подскажите пожалуйста, ситуация:
дебагер слабо горит зеленым (интенсивность свечения красного много выше, или мой глаз так воспринимает).
А вот сам CC2531 мигает красным. Постоянно.
Если нажать кнопку debug над чипом - то горит зеленый светодиод и красный вместе с ним мигает
Во время прошивки всё тухнет
Прошивал и с горящим зеленым и мигающим красным и только с мигающим красным.
После прошивки стик в win системе не видится и на truenas не видится тоже ...
что значит мигание и где я не прав?
С данной проблемой не сталкивался, но если подключить дебаггер без стика, то как горят диоды? Если так же как описано, то проблема может быть в дебаггере, если только при подключенном стике, то возможно неправильно подключен шлейф к стику, либо не исправен стик.