Я ни разу не параноик и никогда не переживал, что мой аккаунт в соцсети взломают злодеи и прочтут всю ту ахинею, которую я пишу друзьям. Но подключение «мозгов» умного дома к облаку, будь то китайское или американское, да хоть русское- это выше моего пофигизма. С другой стороны, сейчас на рынке много доступных предложений по автоматизации, которые достойны внимания, но работают через облака. К примеру, 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. Его преимущество в том что он продается в готовом для эксплуатации виде (нужно только прошить прошивку). Выглядит так:
Стоит такой стик порядка 350 рублей (без доставки)
Ссылка на Aliexpress
Следующий шаг — объяснить чипу, что в этой жизни он будет шлюзом сети Zigbee, другими словами прошить устройство с помощью программатора CC Debugger. Выглядит он так:
Стоит такой порядка 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 стик
— Вставляем CC2531 USB стик в порт компьютера
— Вставляем CC debugger в порт компьютера
— Если лампочка на CC debugger горит красным — нажмите кнопку reset. Лампочка должна гореть зеленым.
— Скачиваем прошивку
CC2531_coordinator_firmware
— Запускаем SmartRF Flash Programmer, устанавливаем настройки, как на картинке и нажимаем «Perform actions». Проверьте, что файл выбран с расширением .hex!
Поздравляю, с железной частью мы закончили.
Настраиваем сервер MQTT.
Если он у вас настроен, то это шаг можно пропустить. Я использую аддон hassio, который называется Mosquitto broker. Для его установки переходим на вкладку Supervisor на закладку ADD-ON STORE и выбираем этот аддон из списка
Настройки брокера описаны на вкладке Documenation. В целом mqtt будет вполне корректно работать с дефолтовыми настройками. После настройки необходимо запустить аддон. Если в логах нет ошибок, то переходим в Настройки -> Люди -> Пользователи (Configuration -> Users) и создаем нового пользователя mqtt.
Переходим в Настройки -> Интеграции (Configuration -> Integrations), выбираем интеграцию MQTT и ставим галочку «Добавлять новые объекты». Это включит автоматическое добавление mqtt устройств в Home Assistant
Подробнее тут
Устанавливаем и настраиваем Zigbee2mqtt
Для этого подключаем стик к серверу умного дома Home Assistant. Я использую версию
Hassio на Raspberry PI3
Устанавливаем аддон zigbee2mqtt
GitHub. Для этого переходим на вкладку Supervisor на закладку ADD-ON STORE и добавляем новый репозиторий
https://github.com/danielwelch/hassio-zigbee2mqtt
и устанавливаем аддон
Для корректной работы аддона необходимо определить путь к нашему свистку. Заходим в закладку System и нажимаем кнопку Hardware. У меня он находится по адресу /dev/ttyACM1. Предварительно настоятельно советую отключить остальные устройства из usb для чистоты эксперимента.
Теперь необходимо настроить аддон 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.
Теперь для запуска режима подключения нового устройства достаточно перевести переключатель Allow devices to join в положение «Включено»
Подключение устройств Zigbee к шлюзу cc2531
Сделаем подключение на примере Xiaomi Aqara Window Door Sensor
— Включаем Allow devices to join в Home Assistant. Шлюз включит режим сопряжения устройств на 10 минут
— Открываем лог аддона ZigBee2MQTT
— Нажимаем кнопку сопряжения на Aqara Window Door Sensor где-то на 3 сек. Синий огонек начнет мигать.
— Ждем появления записей об подключении в логе аддона ZigBee2MQTT
В итоге у вас появляется устройство binary_sensor.<номер>_contact
В интерфейсе у меня датчик контролирует открытие окна. Выглядит следующим образом:
Аналогично подключаются и другие устройства Zigbee, указанные в списке поддерживаемых устройств
В итоге, решение поддерживает локальное подключение zigbee устройств от порядка 140 производителей без подключения к интернету и не подконтрольным облакам.
В заключение нельзя не упомянуть об еще одной возможности интеграции Zigbee устройств в Home Assistant —
ZHA. Это библиотека Python с открытым исходным кодом, реализующая стек Zigbee. На момент написания статьи библиотека поддерживает семейство стиков CC253х экспериментальном режиме. К достоинству этого решения можно отнести отсутствие моста zigbee-mqtt, но, судя по отзывам на форумам, решение еще относительно сырое. Планирую его попробовать на тестовом стенде.
Пишите еще…
www.home-assistant.io/integrations/zha/
В итоге, у меня получилась минимальная цена за комплект с программатором более 1200 рублей.
https://aliexpress.ru/item/item/32959325109.html
Комплект с прошивальщиком (с учетом доставки) — это 816руб
$11.34 https://aliexpress.ru/item/item/4000189365260.html
Следует отметить, что и со внешней антенной в заказах с али надо пробовать — иногда продавцы дают внешнюю антенну со стиком CC2531, выглядит как маленькая проволочка на основании-магните, если вместо нее вкрутить нормальную антенну wifi — качество сигнала увеличится в разы.
Интересна, в этом разрезе, позиция автора на голосовые ассистенты: ведь всё пишется, утекает и распознаётся.
На мой взгляд с точки зрения управления умным домом это баловство. Вообще считаю, что домашняя автоматизация должна работать с минимальным участием человека где это только возможно Все управляющие панели, голосовые помощники и мобильные приложения только потому, что автоматика недостаточно «умная»
это дом или квартира?
знаю, в корзине лежит зем, но всё денег жалко. плюс надо пломбировать будет, а сейчас карантин.
Тема учёта расхода воды крайне любопытна, надоело в стояки лазать с фонариком! :)
Про цену немного наврал, но я все это брал еще по совсем старому курсу
что касается кранов защиты от протечки, то wifi на 8266 ни чем не хуже zigbee, учитывая что всеровно нужно подводить питание, а wifi по правильному в 21 веке должен покрывать весь дом и участок.
PS. я не пишу что zigbee это плохо, но и 433 866mhz довольно неплохо подходят во многих ситуациях.
Zigbee, кстати, о батарейках (для датчиков), так что ничего подводить не нужно. 1.5-2 года на 2032 таблетке датчик протечки, например.
роутеры разные в главном доме 6шт и 2 на улице, большинство -это xiaomi роутеры разных версий на стандартной прошивке
433mhz датчики протечки будут тоже жить годами, нет там большого потребления. у меня такие:
https://aliexpress.com/item/item/32903148693.html
про подвод питания выше я писал про управляемые механизмы, например кран который перекрывает воду. если всеровно к нему подводить питание, никаких проблем завязать его на wifi esp
Можно и без отладчика-программатора…
community.home-assistant.io/t/hass-io-on-synology-dsm-native-package/125559
Проблем нет никаких
можно поставить zigbee2mqttassistant
И да, для прошивки не обязательно использовать cc-debugger, есть вариант с использованием PaspberryPI
Подскажите пожалуйста, во всех обзорах вижу фразу — Стик поддерживает работу одновременно до 25 конечных устройств, не могли бы разъяснить саму механику данного ограничения. Например комната 5х5 метров, в ней 30 различных устройств (датчик движения, открытия двери, окон, электрод-карниз, выключатели, управление климатом… и т.д. т.п.) Воткнув данную штуку в Raspberry (например), мы сможем получать информацию только о 25 устройствах? А если рядом в блок питания воткнем такой же модуль, то тогда с 50 или 49 (сам свисток будет выступать устройством или нет)?
количество памяти в стике хватает на хранение данных для этих слоев приблизительно на 25 подсоединенных устройств
Вот например карта на 129 устройств, координатор на СС2538 + усилитель СС2592.
Предвидя массу вопросов сразу с ними отправляю сюда.
очень печально, что «сюда» у Вас только в телеге, как минимум отпадает аудитория из гугл-поиска
спасибо, как только у меня возникнут вопросы, которые не смогу никак решить обязательно вступлю в вашу секту :)
С малинкой другая проблема — у меня удалось запустить стики cc2531 и ZWave только в определенных портах USB. Если хоть один переткнуть — оба не работают. При этом я пробовал и по by-id и прямой путь /dev/tty Так же если дополнительно воткнуть usb от UPS — тоже все отваливается. Хочу попробовать raspberry 4, может там все нормально.
Было бы удобно иметь один общий центр управления так скажем.
Т.е получается такая цепочка: [ стик <-> zigbee2mqtt ] <-> mqtt брокер <-> система автоматизации
но вообще, как говорят, усб-хдд-и всё будет пошустрее и долговечнее.
Далее качаете любой образ убунты(лучше даже серверной), разворачиваете его на виртуалке (если у вас как у меня windows), я использовал vmware workstation.
Выделяете памяти 1 гб, места на жестком диске 10Гб. Устанавливаете, настраивайте виртуалку получать ip адрес из вашей домашней подсети.
Потом по описанию ставите zigbee2mqtt под docker(ну и сам docker).
По желанию — там же mosquitto и node-red(чтобы поиграться).
Даете разрешение виртуалке использовать ваш стик — все работает, можно посмотреть как работает система и тд, стоит ли покупать отдельное устройство для стика (там кстати не только raspberr pi можно использовать, но и почти любой одноплатный комп типа orange pi zero, который еще и подешевле)
HomeAssistant тоже есть для виртуальных машин. Я вообще не понимаю желающих купить raspberry pi — купили на ebay (авито что то подохренел с ценами на бу) какой небудь неттоп типа zotax zbox, поставили туда 8гб оперативки — запускай свои проекты.
Почему я за этот выбор — накатываем win7, на нее teamviwer — можно без проблем управлять удаленно, разворачивать новые сервисы и тд через вируталку (у меня серый ip на домашнем компе)
В случае с raspberry — надо думать как бы не запоролась флешка, удаленно управлять сложно, формально их нужно две (фиг знает, как отнесется образ с homeassistant к докеру с zigbee2mqtt)
две апельсинки. Две. И не по 15 баксов, а последние, по 35(а вы найдете по такой цене?). И доставка. И карточки к ним. И блоки питания.
И отсутствие возможности подключения удаленно.
Теперь по 200 за софт. Если вы такой правильный для покупки софта — ebay вам в помощь, там ключи на лицензии(не ломаные, реальные) продают на windows за 3 доллара, vmware workstaton 1.5 доллара.
Убеждать ни в чем не собираюсь, у каждого свой путь.
Поднял НА в докере на домашнем сервере на Intel NUC. Учусь. Разбираюсь. Начал все разрозненные «умные» железки собирать, не в умный, а в удобный дом.
Простите, с доставкой 16. Трудится у меня уже пару лет. Карта памяти 250 рублей на 4 гига. Доступ снаружи — не вопрос, хочь через браузер, хоть чрез приложение домотикз, хоть через ssh.
И да, ключи по 3 доллара это такое же воровство, как и торренты с ломалками.
Никаким ломом там и не пахнет.
У меня таких как у вас плат 4 штуки, разбросанных по разным местам. Идея у платы великолепная.
Результат плох. От версии к версии какие-то платы перегреваются, какие-то нет. При одинаковом софте (то есть клонировал карту памяти). Нет нормальных корпусов, как например для NanoPi NEO (и такое у меня есть), которые отводят тепло, а колхозить сам я не хочу. Памяти 512мб недостаточно (я знаю, что есть orange p pc с 1гб, у меня и такой есть, попрыгав вокруг него сейчас он служит простым проигрывателем). Карточка при работе под dietpi под ним сдохла за год (и это еще dietpi оптимизирован под меньшее обращение к карте). Для того, чтобы запустить docker (который хочет памяти — именно под докером лучше всего запускать zigbee2mqtt) и node-red памяти 512Мб (а есть еще и 256 же) остается впритык, либо свопится на карту либо node-red вылетает. Поэтому я купил NanoPi NEO, c 1Гб памяти, с хорошим алюминиевым корпусом, и туда воткнул стик. Плюс все еще dietpi под него обновляется. В итоге это стоит 60$. И я недоволен. Потому как он работает, однако если я хочу поставить еще что — может все поломаться, ибо node-red хочет node.js определенной версии, zigbee2mqtt не через docker — другой. Поэтому я не заморачиваюсь и на виратульном образе убунты развернут node-red и docker с zigbee2mqtt, у нее 2 гб памяти и ей хватает за глаза.
Что надо для HA. Смотрим с сайта — Raspberry Pi 4 Model B (2GB) + Power Supply (at least 2.5A). То есть памяти надо оперативной. И не запустится он на oragne pi zero с 512мб.
Теперь по поводу домотикза. Он запустится. И даже возможно будет работать.А может будет вылетать. Я пробовал установить — у меня он постоянно сыпался, то ли от недостатка памяти, то ли ему какие-то другие зависимости нужны были. Я не знаю. Я уверен что в отдельном образе, скачанного с сайта — он будет работать идеально. Как и хомассистант.
Знаю только то, что если я захочу сделать на виртуалке снимок образа — я его сделаю, и в случае чего могу всегда вернуться назад. В том числе удаленно. А не просить кого-то, кто рядом: вытащи карту плз, потом засунь в ридер, я накачу новый образ и потом обратно в плату засунь.
И да, продать отдельно винду от компа низя :-)
Короче всем рекомендую вместо малинки просто купить бушное железо х86 и поставить любой обычный линукс. Раньше тоже РПи пощуать поиграть, но как прикинул сколько будет она сама стоить, флешка, корпус, батарейка и выходит уже за 7-8к.
Raspberry нет никакого опыта, опять же железо покупать…
Работает уже больше года и пусть себе, умные замки на вход в квартиру не использую, а остальное — пусть себе перехватывают, дом не спалят, а пузо моё увидят если — так сами виноваты.
Я только не пойму, почему бы той же Xiaomi самой не выпустить центральный блок для локального дома?
Было бы интересно посмотреть на ваше решение.
Подписывайтесь :)
Есть ли хоть малейший шанс отвязать их от облака Сяоми и подключить, например, к HA?
По bluetooth подключал Xiaomi Flower Monitor к Hassio на raspberry pi 3b+. Работает. Возможно будут работать и лампочки. Правда у Bluetooth очень маленький радиус действия