
В этой статье пойдет речь о датчиках, розетках, выключателях Xiaomi Aqara/Mijia. Я расскажу как подключить ZigBee устройства без родного шлюза Xiaomi и избавиться от облачного сервиса. Все устройства не требуют перепрошивки и доработки и будут работать из коробки. Так же, можно подключать большинство устройств с протоколом ZigBee.
Почему Home Assistant?
Ранее в статье о Мажордомо рассматривалась универсальная платформа для построения умного дома, для настройки требовались достаточные знания и опыт в программировании.
Сейчас хочу представить вам альтернативу с более простой, на мой взгляд, настройкой, даже для начинающего.
Рассматривалось несколько оффлайн Open source платформ Domoticz, OpenHUB и Home Assistant. Все были установлены и опробованы. Несомненным лидером оказался OpenHUB, это идеальная среда для построения систем автоматизации. Но для моей задачи, он показался слишком избыточным.
Выбор пал на Home Assistant. Очень продуманная система, с отличным дизайном. Простой синтаксис yaml, после одного дня изучения любой скрипт пишется за считанные минуты, для автоматизаций можно использовать встроенный менеджер или использовать NodeRed к примеру. Хороший форум, множество примеров. Огромное количество поддерживаемых устройств и плагинов, но об этом позже.
Задача
Контролировать все окна, входные двери, замки, гараж, присутствие.
Датчики движения, температуры, влажности, качества воздуха в каждой комнате, коридорах, туалетах, кухня.
Управление вентиляцией и освещением.
Управление аудио-видео техникой IR, голосовые оповещения.
Все датчики беспроводные, все выключатели беспроводные, все датчики на окнах, дверях беспроводные ZigBee.
Оборудование
- Сервер Raspberry PI 3 модель B
- ZigBee Sniffer CC2531
Xiaomi Aqara / Mijia
- Temperature Humidity Sensor
- Door Window Sensor
- Human Body Sensor & Lux
- Smart Socket Mi power plug
- Vibration Sensor
- Wireless Switch
Настройка
Установка Home Assistant простая, достаточно записать образ на карту памяти вставить карту в Raspberry PI и перейти по локальному адресу, установка и настройка не сложная, есть множество статей и видео на эту тему.
Должен быть установлен и настроен MQTT брокер, я пользуюсь Mosquitto MQTT Server bundled with Hivemq's web client.
Теперь необходимо прошить USB ZigBee Sniffer CC2531, который будем использовать в качестве шлюза конвертера ZigBee в MQTT.
Есть несколько способов прошивки, я использую программатор CC-Dubugger и загрузочный кабель.
Подключаем программатор через кабель к снифферу как на картинке, сниффер подключаем в порт компьютера для питания.
Скачиваем с официального сайта программу SmartRF от Texas Instruments,
flash-programmer-1.12.8, устанавливаем и запускаем.
Скачиваем прошивку для шлюза -
загрузить прошивку zigbee2mqtt
Нажимаем на три точки напротив Flash image указываем путь к файлу прошивки и нажимаем Perform actions.
Данная прошивка представляет шлюз для конвертирования протокола ZigBee в протокол MQTT который универсален и используется всеми платформами для умного дома.
После чего подключаем ZigBee Sniffer в порт Raspberry PI.
Теперь необходимо узнать на каком порту у нас находится сам сниффер, для этого в панели Hass.io переходим в закладку System и нажимаем на кнопку Hardware.
В моем случае серийный порт сниффера находится по адресу /dev/ttyACM0.
После чего необходимо установить плагин Zigbee2mqtt. Переходим на вкладку Hass.io на закладку ADD-ON STORE и добавляем новый репозиторий - https://github.com/danielwelch/hassio-zigbee2mqtt
Устанавливаем аддон Zigbee2mqtt.
Переходим на закладку Dashboard, плагин Zigbee2mqtt.
В поле Config вписываем следующую конфигурацию, указываем адрес вашего сервера имя и пароль от mqtt сервера, порт сниффера (выделено красным).
Конфигурация уже будет прописана, достаточно указать свои данные.
{
"data_path": "/share/zigbee2mqtt",
"devices": "devices.yaml",
"groups": "groups.yaml",
"homeassistant": true,
"permit_join": false,
"mqtt": {
"base_topic": "zigbee2mqtt",
"server": "mqtt://192.168.1.7:1883",
"user": "имя",
"password": "пароль"
},
"serial": {
"port": "/dev/ttyACM0"
},
"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
}
}
Сохраняем и делаем рестарт плагина. Проверяем лог плагина, что бы не было ошибок.
Теперь необходимо добавить в конфигурацию configuration.yaml следующий код:
discovery:
mqtt:
broker: 192.168.1.7
port: 1883
username: имя
password: пароль
discovery: true
discovery_prefix: homeassistant
sensor:
- platform: mqtt
name: Zigbee-Bridge state
state_topic: "zigbee2mqtt/bridge/state"
icon: mdi:router-wireless
Для автоматического поиска новых устройств. Заменив на ваши данные (выделено красным). Если у вас уже есть данная конфигурация, то пропускаем.
Далее добавляем:
# Zigbee2mqtt
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
В файл automations.yaml добавляем следующий код:
# Zigbee to mqtt
- id: enable_zigbee_join
alias: Enable Zigbee joining
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:
- data:
payload: 'false'
topic: zigbee2mqtt/bridge/config/permit_join
service: mqtt.publish
- data:
entity_id: timer.zigbee_permit_join
service: timer.cancel
- id: disable_zigbee_join_timer
alias: Disable Zigbee joining by timer
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
# end Zigbee to mqtt
На главной странице создаем карточку с таким кодом:
entities:
- entity: input_boolean.zigbee_permit_join
- entity: timer.zigbee_permit_join
- entity: sensor.zigbee_bridge_state
show_header_toggle: false
title: Zigbee
type: entities

Перезагружаем Home Assistant.
Теперь для поиска новых устройств ZigBee достаточно нажать на переключатель Allow devices to join. Через 10 мин поиск прекратится.
Теперь все готово для подключения новых устройств!
Подключение устройств
Включаем поиск устройств Allow devices to join. Поочередно на каждом устройстве нажимаем на несколько секунд кнопку спаривания, до загорания индикатора.
На датчике температуры и влажности кнопка находится сверху, через несколько секунд мигание прекратится. И устройство появится в разделе Интеграции и разделе Устройства.
Переходим в MQTT: configuration.yaml
И видим наш датчик.
Нажимаем на него и попадаем в меню настройки датчика
Каждому значению необходимо добавить понятное название
Нажимаем на шестеренку и вводим свое название
Тепер можно вывести данные данного сенсора на главный экран, это проще всего сделать из этого меню

В всплывающем окне будет предложена страница главного экрана если их неколько как у меня, после чего появится окно с пунктами, необходимо нажать ADD TO LOVELACE
Переходим на главный экран и видим наш датчик
Таким же способом повторяем подключение всех остальных датчиков, розетка не имеет кнопки сопряжения и у меня подключилась сразу после подачи питания.
Мониторинг ZigBee сети
Для удобства контроля всех устройств ZigBee добавим монитор сети.
UPD. В новой версии zigbee2mqtt данный функционал уже встроен и дальнейшие действия не требуются.
Скачиваем плагин
zigbee2mqtt-networkmap, окрываем конфигуратор и добавляем его в папку www.
В конфигурацию
configuration.yaml добавляем следующий код:
sensor:
- platform: mqtt
name: Zigbee2mqtt Networkmap
state_topic: zigbee2mqtt/bridge/networkmap/raw
value_template: >-
{{ now().strftime('%Y-%m-%d %H:%M:%S') }}
json_attributes_topic: zigbee2mqtt/bridge/networkmap/raw
Для добавление карточки на главную страницу необходимо переключить внешний вид в
Lovelace YAML mode, перейти в редактирование нажав на три точки в верхнем правом углу.
Далее необходимо переключиться в Текстовый редактор
В начале файла добавить следующий код
resources:
- type: module
url: /local/zigbee2mqtt-networkmap.js?v=0.6.0
В конец файла добавляем саму карточку Карты сети
- cards:
- css: |
:host {
--zigbee2mqtt-networkmap-node-color: rgba(18, 120, 98, .7);
--zigbee2mqtt-networkmap-node-fill-color: #dcfaf3;
--zigbee2mqtt-networkmap-node-pinned-color: rgba(190, 56, 93, .6);
--zigbee2mqtt-networkmap-link-color: rgba(18, 120, 98, .5);
--zigbee2mqtt-networkmap-hover-color: #be385d;
--zigbee2mqtt-networkmap-link-selected-color: rgba(202, 164, 85, .6);
--zigbee2mqtt-networkmap-label-color: #127862;
--zigbee2mqtt-networkmap-arrow-color: rgba(18, 120, 98, 0.7);
--zigbee2mqtt-networkmap-node-coordinator-color: rgba(224, 78, 93, .7);
--zigbee2mqtt-networkmap-node-router-color: rgba(0, 165, 255, .7);
}
entity: sensor.zigbee2mqtt_networkmap
font_size: 12
force: 3000
height: 400
link_width: 2
mqtt_base_topic: zigbee2mqtt
node_size: 16
type: 'custom:zigbee2mqtt-networkmap'
panel: true
path: zigbee-network
title: Zigbee Network
panel: true - разворачивает карту на весь экран. В результате получаем такую карточку