Содержание статьи
- Выбираем и прошиваем железо
- Ставим сервер zigbee-shepherd на Raspberry Pi Zero W
- Работаем с выключателями Xiaomi из zigbee-shepherd
- Увязываем наше решение с другими
Начав конструировать умный дом, сложно бывает остановиться на продукции одного производителя. А это значит, что тебя ждет зоопарк из стандартов, которые сложно увязать друг с другом, и рядок из хабов, каждый из которых занимает розетку (и место в твоей жизни). Нельзя ли сделать универсальный способ управления умными устройствами, которые работают по ZigBee и Z-Wave? Можно! И не придется даже покупать контроллер ZigBee за $50.
Поводом для того, чтобы смешать дома умные устройства разных производителей может быть желание сэкономить, выбирая наиболее выгодные варианты, или наоборот — стремление взять все самое лучшее. Но чаще всего ответ более прозаичный: «так вышло». Сначала ты покупаешь лампочки и датчики движения Philips, а потом обнаруживаешь, что, к примеру, умных розеток эта компания не делает вовсе, а тебе позарез нужна одна из них.
Опять же, если ты выбрал Xiaomi (а предложение этой компании одно из самых выгодных), то тебя ждет хаб с китайским софтом, подключенный к фирменному сервису. С точки зрения безопасности — далеко не самый лучший вариант.
В этой статье я покажу, как сконструировать универсальный хаб на основе Raspberry Pi Zero W и экстремально дешевого контроллера. А поможет мне в этом программа под названием zigbee-shepherd. Она поддерживает множество устройств ZigBee, в том числе и выключатели Xiaomi на батарейках серии Aqara и позволяет писать скрипты на JavaScript.
Выбираем и прошиваем железо
Сначала нужно определиться, на каком железе собирать хаб. В принципе, ты можешь взять что угодно (хоть свой основной компьютер, если ты его не выключаешь), но Raspberry Pi Zero W — это сверхкомпактный, дешевый и достаточно производительный вариант.
Zigbee-shepherd совместим с чипами ZigBee производства Texas Instrument CC2530 и CC2531. У TI есть референсный USB-стик CC2531 USB Evaluation Module Kit за $49, но есть и полная документация и схемы по сборке такого стика, поэтому будет просто найти в Поднебесной такой же стик, но за $7.

Для работы стика с zigbee-shepherd потребуется файл прошивки с GitHub а чтобы ее зашить, понадобится программатор CC Debugger за $49 или его китайская копия за $12.

Прошивка USB-стика осуществляется с помощью официальной утилиты TI SmartRF Flash Programmer. Чтобы все заработало, нужно подключить CC Debugger в один порт компьютера, стик ZigBee — в другой, и шлейфом соединить их между собой.

В настройках программатора выбираем прошиваемое устройство (1), прошивку (2), задаем нужные действия (3) и прошиваем (4).

Проверить, что USB-стик удачно прошился и работает, можно, подключив его к Raspberry Pi Zero W, и выполнив команду:
$ ls /dev
Устройство будет отображаться в системе как ttyACM0.

Ставим сервер zigbee-shepherd на Raspberry Pi Zero W
Установка zigbee-shepherd и сопутствующих пакетов будет проводиться на последней версии ОС Raspbian для Raspberry Pi Zero W — Stretch. Zigbee-shepherd написан на JavaScript и работает на Node.js.
Для начала ставим Node.js:
$ wget -O - https://raw.githubusercontent.com/sdesalas/node-pi-zero/master/install-node-v.lts.sh | bash`
Для установки расширений из npm нужно установить утилиты для сборки:
$ sudo apt-get install -y build-essential
И сама установка zigbee-shepherd:
$ npm install zigbee-shepherd - -save
Для проверки правильности работы zigbee-shepherd можно запустить скрипт zigbee-server.js. Во время работы скрипт выводит информацию о каждом этапе добавления устройства и время выполнения операции.
var ZShepherd = require('zigbee-shepherd'); var zserver = new ZShepherd('/dev/ttyACM0'); // create a ZigBee server zserver.on('ready', function () { console.log('Server is ready. Allow devices to join the network within 60 seconds'); zserver.permitJoin(60); }); zserver.on('permitJoining', function (joinTimeLeft) { console.log(joinTimeLeft); }); zserver.start(function (err) { // start the server if (err) console.log(err); });
Запускаем zigbee-shepherd в режиме отладки:
$ sudo DEBUG=* node zigbee-server.js

![]()
INFO
На этапе разработки скрипта для Node.js всегда используй отладочный режим. Вывод при этом более подробный, легче отловить ошибки, а zigbee-shepherd показывает все данные, которые он отправляет и получает.
Продолжение доступно только подписчикам
Материалы из последних выпусков можно покупать отдельно только через два месяца после публикации. Чтобы продолжить чтение, необходимо купить подписку.
Подпишись на «Хакер» по выгодной цене!
Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке
1 год7190 р. Экономия 1400 рублей! |
1 месяц720 р. 25-30 статей в месяц |
Уже подписан?