Добавляем ZigBee к нашей всеядной машине.
Часть 0. Почему Home Assistant?
Часть 1. Установка Home Assistant
Часть 2. Настройка Z-wave
Часть 3. Настройка Zigbee
Часть 4. Установка Node-RED
Часть 5. HomeKit в Home Assistant через Node-RED
В отличие от Z-wave, хабы, поддерживающие ZigBee, доступны и достаточно просты в настройке и их использовании.
И если самым известным Z-wave производителем со своим хабом единолично можно считать FIBARO, то среди ZigBee можно спокойно выделить как минимум трёх «держателей устоев»: Xiaomi(Mijia и Aqara), IKEA TRÅDFRI, Philips Hue.
Поэтому если в случае с Z-wave мы просто вынуждены использовать какое-то решение с поддержкой OpenZWave, то в случае с ZigBee начинающим пользователям проще не вдаваться в подробности и подключать устройства к хабам, а потом уже к Home Assistant или другому центру автоматизации.
Но если вы в душе перфекционист и вы не хотите лишней прослойки в виде отдельного хаба, общающегося с вашим сервером УД по Wi-Fi, то текст ниже для вас.
Благодаря коллегам по цеху: а именно Кирову Илье (@goofyk в telegram) на нашем портале есть ряд статей об использовании zigbee стиков, их настройке и сравнении. Вот одна из них.
Но мы остановимся на одном наиболее доступном и обсуждаемом варианте: стик CC2531 и zigbee2mqtt. Именно эта связка позволит нам управлять устройствами не только от Xiaomi, IKEA и Philips, но и многими другими, включая некие полезные китайские поделки.
Покупка и прошивка стика
Ниже простой перевод оригинальной статьи с GitHub. Настоятельно рекомендуем использовать его.
Windows
- Установите SmartRF Flash programmer (Не V2). Это програмное обеспечение бесплатно, но требует аккаунт для того, чтобы его скачать.
- Установите CC debugger driver на ваш компьютер. Перед продолжением убедитесь, что CC Debugger driver установлен правильно. Смотри Figure 1. Verify Correct Driver Installation @ Chapter 5.1. Если CC Debugger не распознается, то установить его вручную.
- Подключите
CC debugger --> Downloader cable CC2531 --> CC2531 USB sniffer
. - Подключите ОБА
CC2531 USB sniffer
иCC debugger
к вашему компьютеру через USB. - Если лампочка на CC debugger горит КРАСНЫМ, то нажми кнопку Reset на CC debugger. Теперь цвет лампочки должна измениться на ЗЕЛЕНЫЙ. Если нет, то используй CC debugger user guide для решения проблем.
- Скачиваем прошивку CC2531ZNP-Prod.hex
- Стартуем SmartRF Flash Programmer, устанавливаем настройки как на скриншоте и нажимаем
Perform actions
.
Linux или MacOS
- Установите необходимые зависимости для CC-Tool используя package center (например для macOS Homebrew )
- Соберите cc-tool
git clone https://github.com/dashesy/cc-tool.git cd cc-tool ./bootstrap ./configure make
- Подключите
CC debugger --> Downloader cable CC2531 --> CC2531 USB sniffer
. - Подключите ОБА
CC2531 USB sniffer
иCC debugger
к вашему компьютеру через USB. - Если лампочка на CC debugger горит КРАСНЫМ, то нажми кнопку Reset на CC debugger. Теперь цвет лампочки должна измениться на ЗЕЛЕНЫЙ. Если нет, то используй CC debugger user guide для решения проблем.
- Скачиваем прошивку CC2531ZNP-Prod.hex.
- Записываем прошивку:
sudo ./cc-tool -e -w CC2531ZNP-Prod.hex
Установка zigbee2mqtt
Опять же предупрежу, что ниже идет перевод оригинальной статьи от автора zigbee2mqtt
- Как и во время настройки Z-wave, выполняем 3 простых шага (выключаем Raspberry, вставляем наш прошитый стик, включаем Raspberry).
- Далее определяем порт стика (в отличие от UZB стика здесь будет всё проще). Выполняем команду
ls -l /dev/serial/by-id
и находим в ответе тот порт, у которого в ответе будет что-то про Texas Instruments
lrwxrwxrwx 1 root root 13 Dec 23 14:00 usb-0658_0200_12345678-9012-3456-7890-123456789012-if00 -> ../../ttyACM1 lrwxrwxrwx 1 root root 13 Dec 23 14:00 usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0012022F34-if00 -> ../../ttyACM0
- Устанавливаем сам zigbee2mqtt, выполняя строчку за строчкой следующий набор команд
# Setup Node.js repository sudo curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - # Install Node.js sudo apt-get install -y nodejs git make g++ gcc # Verify that the correct nodejs and npm (automatically installed with nodejs) # version has been installed node --version # Should output v10.X npm --version # Should output 6.X # Clone zigbee2mqtt repository sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt sudo chown -R pi:pi /opt/zigbee2mqtt # Install dependencies cd /opt/zigbee2mqtt npm install
- Настраиваем zigbee2mqtt.
Редактируем файл configuration.yamlnano /opt/zigbee2mqtt/data/configuration.yaml
Добавляем в файл следующие строки (меняем только адрес MQTT сервера, если он у вас поднят не на этой Raspberry)
# MQTT settings mqtt: # MQTT base topic for zigbee2mqtt MQTT messages base_topic: zigbee2mqtt # MQTT server URL server: 'mqtt://localhost' # MQTT server authentication, uncomment if required: # user: my_user # password: my_password
Сохраняем файл и закрываем его.
- Стартуем zigbee2mqtt первый раз
cd /opt/zigbee2mqtt npm start
После этого мы должны получить приблизительно такой ответ:
2018-5-18 20:35:07 INFO Starting zigbee-shepherd 2018-5-18 20:35:09 INFO zigbee-shepherd started 2018-5-18 20:35:09 INFO Currently 0 devices are joined: 2018-5-18 20:35:09 INFO Connecting to MQTT server at mqtt://localhost 2018-5-18 20:35:09 INFO zigbee-shepherd ready 2018-5-18 20:35:09 INFO Connected to MQTT server
Если всё ок, то мы можем останавливать zigbee2mqtt(CTRL+C) и переходить к следующему шагу — автозапуск
- Для того, чтобы zigbee2mqtt стартовал автоматически при запуске Raspberry, настроим автозапуск.
Создаем конфигурационный файл: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=pi [Install] WantedBy=multi-user.target
Активируем службу:
sudo systemctl enable zigbee2mqtt.service
Как и в случае с запуском Home Assistant ниже несколько tips & tricks на будущее:
# Stopping zigbee2mqtt sudo systemctl stop zigbee2mqtt # Starting zigbee2mqtt sudo systemctl start zigbee2mqtt # View the log of zigbee2mqtt sudo journalctl -u zigbee2mqtt.service -f
- Процесс обновления (на будущее)
# Stop zigbee2mqtt and go to directory sudo systemctl stop zigbee2mqtt cd /opt/zigbee2mqtt # Backup configuration cp -R data data-backup # Update git checkout HEAD -- npm-shrinkwrap.json git pull rm -rf node_modules npm install # Restore configuration cp -R data-backup/* data rm -rf data-backup # Start zigbee2mqtt sudo systemctl start zigbee2mqtt
Настройка Home Assistant
Продолжаем традиции и используем за основу оригинальную статью от автора.
ВАЖНО! Необходимо использование версии Home Assistant не ниже 0.84
- Открываем configuration.yaml Zigbee2mqtt
nano /opt/zigbee2mqtt/data/configuration.yaml
и добавляем в самое начало файла
homeassistant: true
- Открываем configuration.yaml Home Assistant и добавляем блок с MQTT discovery:
mqtt: discovery: true broker: localhost # Remove if you want to use builtin-in MQTT broker birth_message: topic: 'hass/status' payload: 'online' will_message: topic: 'hass/status' payload: 'offline'
- После этих действий нам остается начать добавлять устройства в zigbee2mqtt, чтобы они начали появляться в Home Assistant.
Спаривание устройств
Отдельный блок по спариванию устройств каждого производителя представлена опять же на github автора, ниже лишь приведем пример для устройств Xiaomi.
- Первым делом редактируем файл configuration.yaml zigbee2mqtt
nano /opt/zigbee2mqtt/data/configuration.yaml
и добавляем строку для добавления устройств
permit_join: true
- Далее ищем наш девайс среди поддерживаемых на странице проекта
- После того как мы убедились, что наше устройство поддерживается стиком, то находясь недалеко от стика и нашей Raspberry сбрасываем устройство.
- Большинство MiJia устройств: нажмите и держите кнопку сброса на +/- 5 секунд (до тех пор пока голубой цвет начнет моргать). ВАЖНО: Отпускайте и нажимайте кнопку сброса каждую секунду — при этом обязательно должен моргать голубой свет (если не свет не моргнул, то нажмите кнопку еще раз не дожидаясь следующей секунды). Это будет держать устройство онлайн и заставлять не уходить в сон. Иначе же вы получите ошибку в момент спаривания.
[ERR_UNHANDLED_ERROR]: Unhandled error. (Cannot get the Node Descriptor of the Device: 0x00158d0001720111)
- Для Aqara устройств всё проще: держите +/- 5 секунд кнопку сброса пока голубой цвет не поморгает 3 раза, после этого отпустите (голубой цвет моргнет еще раз) и ждите.
- Для Aqara выключателей всё также просто: держите +/- 10 секунд кнопку пока голубой цвет сначала не начнет моргать, а потом закончит, после этого отпустите и ждите.
Тем самым мы добавили ещё один протокол, с добавлением которого к имеющемуся Z-wave сможем покрыть около 90% своих потребностей, но это не всё… продолжение следует…
Часть 0. Почему Home Assistant?
Часть 1. Установка Home Assistant
Часть 2. Настройка Z-wave
Часть 3. Настройка Zigbee
Часть 4. Установка Node-RED
Часть 5. HomeKit в Home Assistant через Node-RED