Делаем безоблачный умный дом на базе Home Assistant

Делаем безоблачный умный дом на базе Home Assistant

Я ни разу не параноик и никогда не переживал, что мой аккаунт в соцсети взломают злодеи и прочтут всю ту ахинею, которую я пишу друзьям. Но подключение «мозгов» умного дома к облаку, будь то китайское или американское, да хоть русское- это выше моего пофигизма. С другой стороны, сейчас на рынке много доступных предложений по автоматизации, которые достойны внимания, но работают через облака. К примеру, Xiaomi.

В этой статье я покажу, как организовать работу в локальной сети устройств Zigbee от разных производителей без подключения к непонятным облакам

Начинаем, как всегда, с постановки задачи: устройства Zigbee должны работать с Home Assistant локально без доступа к облаку производителя.

Изначально важно понимать, что все производители используют единый стандарт беспроводной передачи данных, поэтому устройство одного производителя может спокойно подключаться к сети Zigbee и обмениваться данными с другими устройствами разных производителей. Все ограничения, как правило, прописываются в шлюзах, приложениях и облаках — тут уж кто на что горазд. Поэтому задача сводится к созданию своего zigbee шлюза.

Для Zigbee-устройств используется в основном 3 вида чипов компании TI (есть и другие, но эти наиболее популярны):

cc2530 — дешевый и проверенный чип с 8Кб памяти

cc2531 — такой же дешевый и проверенный чип с 8Кб памяти, но имеющий контроллер USB на борту

cc2538 — с процессором Cortex-M3 и 32Кб памяти

В целом семейство чипов cc253x привлекательно своей низкой ценой. Поэтому большинство китайских устройств сделано именно на них.

Плавно мы подошли к тому, что можно сделать устройство с чипом cc253x и с помощью него слушать/ посылать в эфир команды по протоколу zigbee. И такие устройства, конечно, есть. Самый популярный вариант Zigbee-стика с подключением в USB порт реализован на чипе cc2531. Его преимущество в том что он продается в готовом для эксплуатации виде (нужно только прошить прошивку). Выглядит так:

Делаем безоблачный умный дом на базе Home Assistant

Стоит такой стик порядка 350 рублей (без доставки) Ссылка на Aliexpress

Следующий шаг — объяснить чипу, что в этой жизни он будет шлюзом сети Zigbee, другими словами прошить устройство с помощью программатора CC Debugger. Выглядит он так:

Делаем безоблачный умный дом на базе Home Assistant

Стоит такой порядка 370 рублей (без доставки) Ссылка на Aliexpress

Прошивка zigbee стика

Прошивать будем прошивку с популярного проекта zigbee2mqtt.io Суть заключается в том, что стик, являясь координатором сети Zigbee будет пересылать сообщения из zigbee сети в MQTT и обратно. Стик поддерживает работу одновременно до 25 конечных устройств. Для бОльшего количества потребуется устройство с ролью ретранслятор. Как правило, это устройство, включающееся в розетку.

На момент написания статьи поддерживается 785 устройств от 140 различных производителей! Ссылка на страницу с перечнем устройств

Процесс прошивки (на ОС Windows):

— Скачиваем с сайта TI программное обеспечение SmartRF Flash programmer (НЕ v2). Предварительно попросят зарегистрировать бесплатный аккаунт

— Устанавливаем CC debugger driver

— Соединяем CC debugger —> Downloader cable CC2531 —> CC2531 USB стик

Делаем безоблачный умный дом на базе Home Assistant

— Вставляем CC2531 USB стик в порт компьютера

— Вставляем CC debugger в порт компьютера

— Если лампочка на CC debugger горит красным — нажмите кнопку reset. Лампочка должна гореть зеленым.

— Скачиваем прошивку CC2531_coordinator_firmware

— Запускаем SmartRF Flash Programmer, устанавливаем настройки, как на картинке и нажимаем «Perform actions». Проверьте, что файл выбран с расширением .hex!

Делаем безоблачный умный дом на базе Home Assistant

Поздравляю, с железной частью мы закончили.

Настраиваем сервер MQTT.

Если он у вас настроен, то это шаг можно пропустить. Я использую аддон hassio, который называется Mosquitto broker. Для его установки переходим на вкладку Supervisor на закладку ADD-ON STORE и выбираем этот аддон из списка

Делаем безоблачный умный дом на базе Home Assistant

Настройки брокера описаны на вкладке Documenation. В целом mqtt будет вполне корректно работать с дефолтовыми настройками. После настройки необходимо запустить аддон. Если в логах нет ошибок, то переходим в Настройки -> Люди -> Пользователи (Configuration -> Users) и создаем нового пользователя mqtt.

Переходим в Настройки -> Интеграции (Configuration -> Integrations), выбираем интеграцию MQTT и ставим галочку «Добавлять новые объекты». Это включит автоматическое добавление mqtt устройств в Home Assistant Подробнее тут

Делаем безоблачный умный дом на базе Home Assistant

Устанавливаем и настраиваем Zigbee2mqtt

Для этого подключаем стик к серверу умного дома Home Assistant. Я использую версию Hassio на Raspberry PI3

Устанавливаем аддон zigbee2mqtt GitHub. Для этого переходим на вкладку Supervisor на закладку ADD-ON STORE и добавляем новый репозиторий github.com/danielwelch/hassio-zigbee2mqtt и устанавливаем аддон

Делаем безоблачный умный дом на базе Home Assistant

Для корректной работы аддона необходимо определить путь к нашему свистку. Заходим в закладку System и нажимаем кнопку Hardware. У меня он находится по адресу /dev/ttyACM1. Предварительно настоятельно советую отключить остальные устройства из usb для чистоты эксперимента.

Делаем безоблачный умный дом на базе Home Assistant

Теперь необходимо настроить аддон zigbee2mqtt. Для этого переходим на вкладку Configuration аддона. Я настраивал секции mqtt (подключение к серверу mqtt) и serial (путь к стику).



data_path: /share/zigbee2mqtt
devices: devices.yaml
groups: groups.yaml
homeassistant: true
permit_join: false
mqtt:
base_topic: zigbee2mqtt
server: 'mqtt://ip:1883'
user: mqtt_user
password: mqtt_pass
serial:
port: /dev/ttyACM1
advanced:
pan_id: 6754
channel: 11
network_key:
- 1
- 3
- 5
- 7
- 9
- 11
- 13
- 15
- 0
- 2
- 4
- 6
- 8
- 10
- 12
- 13
availability_blacklist: []
ban: []
whitelist: []
queue: {}
socat:
enabled: false
master: 'pty,raw,echo=0,link=/dev/ttyZ2M,mode=777'
slave: 'tcp-listen:8485,keepalive,nodelay,reuseaddr,keepidle=1,keepintvl=1,keepcnt=5'
restartdelay: 1
initialdelay: 1
options: '-d -d'
log: false

Запускаем аддон и переходим на вкладку Log. Проверяем, что аддон запускается без ошибок

Создаем объекты в Home assistant для подключения устройств Zigbee. В файле Configuration.yaml добавляем код



#--------------------------------------------------------Объекты
input_boolean:
zigbee_permit_join:
name: Allow devices to join
initial: off
icon: mdi:cellphone-wireless
timer:
zigbee_permit_join:
name: Time remaining
duration: 600 # Updated this to the number of seconds you wish
#-----------------------------------------------------Датчики
sensor:
#----------------------------------------------Состояние моста MQTT-ZigBee
- platform: mqtt
name: Bridge state
state_topic: "zigbee2mqtt/bridge/state"
icon: mdi:router-wireless

В файл automations.yaml добавляем код



#---------------------------------------------------Автоматизация
automation:
- id: enable_zigbee_join
alias: Enable Zigbee joining
hide_entity: true
trigger:
- platform: state
entity_id: input_boolean.zigbee_permit_join
to: 'on'
action:
- service: mqtt.publish
data:
topic: zigbee2mqtt/bridge/config/permit_join
payload: 'true'
- service: timer.start
data:
entity_id: timer.zigbee_permit_join
- id: disable_zigbee_join
alias: Disable Zigbee joining
trigger:
- entity_id: input_boolean.zigbee_permit_join
platform: state
to: 'off'
action:
- service: mqtt.publish
data:
payload: 'false'
topic: zigbee2mqtt/bridge/config/permit_join
- service: timer.cancel
data:
entity_id: timer.zigbee_permit_join
hide_entity: true
- id: disable_zigbee_join_timer
alias: Disable Zigbee joining by timer
hide_entity: true
trigger:
- platform: event
event_type: timer.finished
event_data:
entity_id: timer.zigbee_permit_join
action:
- service: mqtt.publish
data:
topic: zigbee2mqtt/bridge/config/permit_join
payload: 'false'
- service: input_boolean.turn_off
data:
entity_id: input_boolean.zigbee_permit_join

Добавляем на основной экран (Lovelace) объекты " Allow devices to join ", Time remaining, и Bridge state.

Делаем безоблачный умный дом на базе Home Assistant

Теперь для запуска режима подключения нового устройства достаточно перевести переключатель Allow devices to join в положение «Включено»

Подключение устройств Zigbee к шлюзу cc2531

Сделаем подключение на примере Xiaomi Aqara Window Door Sensor

Делаем безоблачный умный дом на базе Home Assistant

— Включаем Allow devices to join в Home Assistant. Шлюз включит режим сопряжения устройств на 10 минут

Делаем безоблачный умный дом на базе Home Assistant

— Открываем лог аддона ZigBee2MQTT

— Нажимаем кнопку сопряжения на Aqara Window Door Sensor где-то на 3 сек. Синий огонек начнет мигать.

— Ждем появления записей об подключении в логе аддона ZigBee2MQTT

В итоге у вас появляется устройство binary_sensor.<номер>_contact

Делаем безоблачный умный дом на базе Home Assistant

В интерфейсе у меня датчик контролирует открытие окна. Выглядит следующим образом:

Делаем безоблачный умный дом на базе Home Assistant

Делаем безоблачный умный дом на базе Home Assistant

Аналогично подключаются и другие устройства Zigbee, указанные в списке поддерживаемых устройств

В итоге, решение поддерживает локальное подключение zigbee устройств от порядка 140 производителей без подключения к интернету и не подконтрольным облакам.

В заключение нельзя не упомянуть об еще одной возможности интеграции Zigbee устройств в Home Assistant — ZHA. Это библиотека Python с открытым исходным кодом, реализующая стек Zigbee. На момент написания статьи библиотека поддерживает семейство стиков CC253х экспериментальном режиме. К достоинству этого решения можно отнести отсутствие моста zigbee-mqtt, но, судя по отзывам на форумам, решение еще относительно сырое. Планирую его попробовать на тестовом стенде.

Оцените статью