Используем Zigbee в Home Assistant

Добавляем 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

  1. Установите SmartRF Flash programmer (Не V2). Это програмное обеспечение бесплатно, но требует аккаунт для того, чтобы его скачать.
  2. Установите CC debugger driver на ваш компьютер. Перед продолжением убедитесь, что CC Debugger driver установлен правильно. Смотри Figure 1. Verify Correct Driver Installation @ Chapter 5.1. Если CC Debugger не распознается, то установить его вручную.
  3. Подключите CC debugger --> Downloader cable CC2531 --> CC2531 USB sniffer.
  4. Подключите ОБА CC2531 USB sniffer и CC debugger к вашему компьютеру через USB.
  5. Если лампочка на CC debugger горит КРАСНЫМ, то нажми кнопку Reset  на CC debugger. Теперь цвет лампочки должна измениться на ЗЕЛЕНЫЙ. Если нет, то используй CC debugger user guide для решения проблем.
    How to connect
  6. Скачиваем прошивку CC2531ZNP-Prod.hex
  7. Стартуем SmartRF Flash Programmer, устанавливаем настройки как на скриншоте и нажимаем Perform actions. SmartRF Flash Programmer

Linux или MacOS

  1. Установите необходимые зависимости для CC-Tool используя package center (например для macOS Homebrew )
  2. Соберите cc-tool
    git clone https://github.com/dashesy/cc-tool.git
    cd cc-tool
    ./bootstrap
    ./configure
    make
  3. Подключите CC debugger --> Downloader cable CC2531 --> CC2531 USB sniffer.
  4. Подключите ОБА CC2531 USB sniffer и CC debugger к вашему компьютеру через USB.
  5. Если лампочка на CC debugger горит КРАСНЫМ, то нажми кнопку Reset  на CC debugger. Теперь цвет лампочки должна измениться на ЗЕЛЕНЫЙ. Если нет, то используй CC debugger user guide для решения проблем.
    How to connect
  6. Скачиваем прошивку CC2531ZNP-Prod.hex.
  7. Записываем прошивку:
    sudo ./cc-tool -e -w CC2531ZNP-Prod.hex

Установка zigbee2mqtt

Опять же предупрежу, что ниже идет перевод оригинальной статьи от автора zigbee2mqtt

  1. Как и во время настройки Z-wave, выполняем 3 простых шага (выключаем Raspberry, вставляем наш прошитый стик, включаем Raspberry).
  2. Далее определяем порт стика (в отличие от 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
  3. Устанавливаем сам 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
  4. Настраиваем zigbee2mqtt.
    Редактируем файл configuration.yaml

    nano /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

    Сохраняем файл и закрываем его.

  5. Стартуем 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) и переходить к следующему шагу — автозапуск

  6. Для того, чтобы 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
  7. Процесс обновления (на будущее)
    # 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

  1. Открываем configuration.yaml Zigbee2mqtt
    nano /opt/zigbee2mqtt/data/configuration.yaml

    и добавляем в самое начало файла

    homeassistant: true
  2. Открываем 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'
  3. После этих действий нам остается начать добавлять устройства в zigbee2mqtt, чтобы они начали появляться в Home Assistant.

Спаривание устройств

Отдельный блок по спариванию устройств каждого производителя представлена опять же на github автора, ниже лишь приведем пример для устройств Xiaomi.

  1. Первым делом редактируем файл configuration.yaml zigbee2mqtt
    nano /opt/zigbee2mqtt/data/configuration.yaml

    и добавляем строку для добавления устройств

    permit_join: true
  2. Далее ищем наш девайс среди поддерживаемых на странице проекта
  3. После того как мы убедились, что наше устройство поддерживается стиком, то находясь недалеко от стика и нашей Raspberry сбрасываем устройство.
  4. Большинство MiJia устройств: нажмите и держите кнопку сброса на +/- 5  секунд (до тех пор пока голубой цвет начнет моргать). ВАЖНО: Отпускайте и нажимайте кнопку сброса каждую секунду — при этом обязательно должен моргать голубой свет (если не свет не моргнул, то нажмите кнопку еще раз не дожидаясь следующей секунды). Это будет держать устройство онлайн и заставлять не уходить в сон. Иначе же вы получите ошибку в момент спаривания.
    [ERR_UNHANDLED_ERROR]: Unhandled error. (Cannot get the Node Descriptor of the Device: 0x00158d0001720111)
  5. Для Aqara устройств всё проще: держите +/- 5 секунд кнопку сброса пока  голубой цвет не поморгает 3 раза, после этого отпустите (голубой цвет моргнет еще раз) и ждите.
  6. Для 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

Подписывайтесь на канал InDaHomeKit в Telegram и Яндекс.Дзен, чтобы у вас всегда было что почитать: новости мира умного дома, обзоры новых устройств, инструкции по подключению.

Приходите в наш чат в Telegram

Так же у нас отличные паблики VK, Facebook, Instagram и Twitter.