Дешевый хаб для устройств Z-Wave и ZigBee

Управление ZigBee и Z-Wave

Начав конструировать умный дом, сложно бывает остановиться на продукции одного производителя. А это значит, что вас ждет зоопарк из стандартов, которые сложно увязать друг с другом, и рядок из хабов, каждый из которых занимает розетку (и место в вашей жизни). Нельзя ли сделать универсальный способ управления умными устройствами, которые работают по ZigBee и Z-Wave? Можно! И не придется даже покупать контроллер ZigBee за $50.

РЕКОМЕНДУЕМ:
Файловый сервер с блокировкой рекламы из Raspberry Pi и Pi Hole

Поводом для того, чтобы смешать дома умные устройства разных производителей может быть желание сэкономить, выбирая наиболее выгодные варианты, или наоборот — стремление взять все самое лучшее. Но чаще всего ответ более прозаичный: «так вышло». Сначала вы покупаете лампочки и датчики движения Philips, а потом обнаруживаете, что, к примеру, умных розеток эта компания не делает вовсе, а вам позарез нужна одна из них.

Опять же, если вы выбрали Xiaomi (а предложение этой компании одно из самых выгодных), то вас ждет хаб с китайским софтом, подключенный к фирменному сервису. С точки зрения безопасности — далеко не самый лучший вариант.

В этой статье я покажу, как сконструировать универсальный хаб на основе Raspberry Pi Zero W и экстремально дешевого контроллера. А поможет мне в этом программа под названием zigbee-shepherd. Она поддерживает множество устройств ZigBee, в том числе и выключатели Xiaomi на батарейках серии Aqara и позволяет писать скрипты на JavaScript.

Выбор и прошивка железа

Сначала нужно определиться, на каком железе собирать хаб. В принципе, вы можете взять что угодно (хоть свой основной компьютер, если вы его не выключаете), но Raspberry Pi Zero W — это сверхкомпактный, дешевый и достаточно производительный вариант.

хаб для устройств Z-Wave и ZigBee
Микрокомпьютер Raspberry Pi Zero W

Zigbee-shepherd совместим с чипами ZigBee производства Texas Instrument CC2530 и CC2531. У TI есть референсный USB-стик CC2531 USB Evaluation Module Kit за $49, но есть и полная документация и схемы по сборке такого стика, поэтому будет просто найти в Поднебесной такой же стик, но за $7.

хаб для устройств Z-Wave и ZigBee
Фирменный стик Texas Instrument на чипе CC2531

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

хаб для Z-Wave и ZigBee
Texas Instrument CC Debugger

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

управление ZigBee
Подключение CC Debugger к стику ZigBee для прошивки

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

ZigBee управление
SmartRF Flash Programmer для прошивки стика ZigBee

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

Устройство будет отображаться в системе как ttyACM0.

zwave управление
При подключении стика появляется устройство ttyACM0

РЕКОМЕНДУЕМ:
Linux-сервер на микрокомпьютере Omega 2

Установка сервера zigbee-shepherd на Raspberry Pi Zero W

Установка zigbee-shepherd и сопутствующих пакетов будет проводиться на последней версии ОС Raspbian для Raspberry Pi Zero W — Stretch. Zigbee-shepherd написан на JavaScript и работает на Node.js.

Для начала ставим Node.js:

Для установки расширений из npm нужно установить утилиты для сборки:

И сама установка zigbee-shepherd:

Для проверки правильности работы zigbee-shepherd можно запустить скрипт zigbee-server.js. Во время работы скрипт выводит информацию о каждом этапе добавления устройства и время выполнения операции.

Запускаем zigbee-shepherd в режиме отладки:

ZigBee контроль
Debug вывод при добавлении устройства Zigbe

На этапе разработки скрипта для Node.js всегда используйте отладочный режим. Вывод при этом более подробный, легче отловить ошибки, а zigbee-shepherd показывает все данные, которые он отправляет и получает.

Работа с выключателями Xiaomi из zigbee-shepherd

Первым делом следует добавить устройство ZigBee в сеть. Для этого сначала нужно сбросить его настройки на заводские и тем самым удалить информацию о предыдущей сети, если оно было добавлено прежде. Комбинация сброса и добавления устройства для выключателей Xiaomi Aqara следующая: зажать кнопку на пять секунд, пока светодиоды не начнут мигать, после чего отпустить и ждать, когда закончится процесс добавления. Если включен дебаг, то при добавлении устройства выводится подробный лог. Добавление устройства может занять до одной минуты.

zigbee xiaomi
Выключатели Xiaomi Aqara на батарейках, работающие по протоколу ZigBee

После добавления устройства нужно важно еще правильно с ним работать. Zigbee-shepherd не предоставляет веб-интерфейса для добавления и управления устройствами, вместо этого есть мощный JS API, который позволяет получить полный контроль над любым устройством и написать собственную систему автоматизации.

В вики есть полное описание всех функций. Но чтобы быстрее разобраться с ними, нужно понимать программную структуру устройства.

IEEE address. каждое устройство ZigBee имеет уникальный 48 битный MAC-адрес, он зашит в девайс, и сбросить его невозможно. По MAC-адресу можно обращаться к устройству и получать информацию о нем.

Endpoint. в устройстве может быть несколько функций, например датчик температуры и влажности или выключатель с двумя кнопками. Для каждой функции устройства создается отдельный Endpoint.

Clusters — группа команд, которые можно отправлять устройству, например, команда genOnOff включает или выключает устройство, а если это лампа с диммером, то присутствует еще команда genLevelCtrl, которая позволяет задать уровень яркости.

Attributes. У устройства можно запросить его текущее состояние, обратившись в интересующий Cluster. Например, командой genOnOff можно узнать состояние атрибута onOff — оно может быть 0 или 1.

Выключатель Xiaomi Aqara с одной кнопкой имеет следующую структуру:

Чтобы обрабатывать нажатие кнопки, нужно отловить сообщение от выключателя. Делается это с помощью события ind. Изменим код следующим образом:

При нажатии кнопки придет сообщение:

Здесь:

  • msg.endpoints[0].device.ieeeAddr — MAC-адрес устройства;
  • msg.endpoints[0].epId — канал (endPoint) устройства;
  • msg.data — id кластера и атрибут, в данном случае выключатель прислал команду genOnOff:0.

Если проверять эти данные, то нажатием на кнопку выключателя можно будет управлять другими устройствами ZigBee по определенному алгоритму. Например, при каждом нажатии включать-выключать или только выключать группу устройств.

Zigbee-shepherd полностью поддерживает работу с диммируемыми лампами Ikea Trådfri и Philips Hue, поэтому для примера можно настроить простой алгоритм включения лампы с помощью выключателя Xiaomi Aqara.

Добавляем в код обработчик нажатия кнопки и включение лампы Ikea Trådfri на максимальную яркость:

Увязываем наше решение с другими

Zigbee-shepherd использует инфраструктуру Node.js, поэтому можно реализовать управление любыми объектами, для которых есть соответствующие библиотеки. Так протокол MQTT дает возможность интеграции со многими системами домашней автоматизации, такими как OpenHub и Home Assistant. Для последней существует готовый проект на GitHub.

Многие хабы и самостоятельные устройства Wi-Fi вроде розеток поддерживают управление через запросы HTTP. Узнать команды можно из документации, либо подглядеть в веб-интерфейсе хаба умного дома, либо проанализировать трафик от мобильного приложения.

Z-Wave контроллер RaZberry имеет хорошо документированный HTTP API, поэтому не составит труда написать запрос на выключение света.

Для отправки HTTP-запросов требуется установить библиотеку request:

Добавляем в код поддержку HTTP запросов и сам запрос на выключение света:

Минимальная домашняя автоматизации готова! В 26 строках кода запускается сервер ZigBee, отслеживается нажатие кнопки и исполняется команда управления светодиодной лампой или команда HTTP. Если подключить фреймворк веб-приложений для Node.js (например, express), то можно реализовать полноценное HTTP API для работы с устройствами ZigBee.

Zigbee-shepherd позволяет добавить к уже существующей домашней автоматизации на KNX, Z-Wave или Wi-Fi недорогие устройства ZigBee, которых с каждым годом выпускается все больше.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий