Эпопея. Добавление штор Aqara B1 в HASSIO, Homekit через Mi Hub

24 августа 2019, 18:46

Пролог 

1600x_image.png?1566528952

Данная статья рассказывает о том как пробросить шторы Xiaomi Aqara B1 - Intelligent Curtain Motor (ZNCLDJ12LM) в Home Assistant и Homekit. С управлением и самое главное - получением статуса в HA и Homekit. Данный вариант описывает действия если у Вас HASSIO в докере, и актуальна только на ближайшее время. В будущих обновлениях HASSIO будет реализована поддержка штор данной модели. 


История

Я заказал данные моторы с Китая на весенней распродаже, вышло около 7к за мотор на тот момент. Сейчас их можно приобрести по цене около 7-9к, однако в Китае цена 4-6к. Моторы долго лежали в коробках.

А еще ранее я купил карнизы в одном из наших онлайн магазинов, вышло даже дешевле чем ждать с Китая. В один прекрасный день я проснулся и решил, что дальше так жить нельзя, необходимо вешать карнизы и радоваться автоматизации. От умного дома одно название: датчики, счетчики и управляется только робот пылесос. Остальное активное оборудование лежит в коробках либо на стенде. 

Первым делом, я решил подружить данные моторы c Deconz, однако ничего не вышло. В GUI появляется, а в REST API не отдает. Сходил в чат, поспрашивал. Выяснилось что поддержки в данный момент нет, но есть issue в котором просят реализовать поддержку штор данной модели. Проверив всю информацию, и понял что поддержки в данный момент не будет. Так как разработчик не имеет данного мотора, и то что он с батареей есть сложности как его отдать в API, так как получается составное устройство "лампочка" и "сенсор".

Затем я сдул пыль с "спрутстика" поднял аддон zigbee2mqtt и попробовал подружить моторы с ним. Однако снова неудача.  Почитав документацию о добавление новых устройств, я скопировал файл devices.js из репозитория и положил его в папку share в контейнере HA через аддон конфигуратора (это можно сделать с cli хостовой машины). Скопировал конфигурацию старой шторы, изменил атрибуты zigbeeModel и model. После перезагрузки аддон'а zigbee2mqtt,  ничего не произошло. Перечитав инструкцию ничего дельного не нашел, однако после прочтения конфигурации Dockerfile аддона выяснилось - надо добавить в конфигурацию флаг "zigbee_shepherd_devices": true, чтобы аддон искал пользовательский файл devices.js, описывающий zigbee устройства.

Очередная перезагрузка, шторы определились аддон пишет в лог сообщения об открытии и закрытие, но в HA ничего не появилось. Методом проб и ошибок, чтения кода было выяснено что сменив  атрибут model я лишился autodescovery данного устройство в HA, чтобы решить данную проблему надо править файл homeassistant.js в аддоне. Однако я это не сделал, так как замена devices.js штатная функция официально поддерживаемого аддона, а правка других мест подразумевает что после обновления аддона все сломается. Я снова открыл  файл devices.js через аддон конфигуратор, вернул модель как у старой версии штор. И все взлетело после перезагрузки.

Моей радости не было предела, однако не буду углубляться в детали - оно работает неполноценно. Нельзя получить корректную обратную связь о текущей позиции штор, на предыдущей модели аналогичная проблема. Управление работает, открывает закрывает на верное количество процентов. Но статуса нет.

Я начал отчаиваться, что полноценной интеграции не будет. Владелец dresden-elektronik/deconz-rest-plugin сказал что ему нужны команды. А zigbee2mqtt - это полноценный opensorce, ждать можно долго, пока кто нибудь не поймает пакеты и не напишут конвертер. Я начал жалеть что подарил свой mi hub товарищу.

Я пошел купил еще один "спрутстик" и михаб. Михаб для временного управления шторами, и на всякий случай если история повторится, а я куплю какое нибудь устройство xiaomi и оно не взлетит на других решения. А второй "спрутстик" как снифер чтобы захватить команды управления моторами с михаб , и передать команде dresden-elektronik и zigbee2mqtt.

После быстрого поиска по GitHub я выяснил что в PyXiaomiGateway которая использует HA есть обработчик данной модели штор. Но в Hassio используется старая версия библиотеки, и в компоненте xiaomi_aqara поддержки нет. Однако в dev ветке HA есть изменения о поддержке данной модели. Однако у меня докер и HASSIO, быстро это не исправить. Резюмирую: надо сделать как представлено ниже) Я думаю в следующем обновление все заработает и так. Откуда я взял фиксы:

Add Aqara Smart Curtain Motor B1 (curtain.hagl04) support

Действие

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

Заходим по ssh на хост машину, туда где крутится Docker с Вашим HASSIO. Необходимо найти ID контейнера. Для этого введите команду: sudo docker container ls -a

freenetwork@home:~$ sudo docker container ls -a
CONTAINER ID        IMAGE                                               COMMAND                  CREATED             STATUS              PORTS                                                                NAMES
d26698411f9c        homeassistant/amd64-hassio-supervisor               "/bin/entry.sh pytho…"   2 days ago          Up 2 days                                                                                hassio_supervisor
e96595c88529        hassioaddons/motioneye:0.5.3                        "/init"                  2 days ago          Up 2 days                                                                                addon_a0d7b954_motioneye
f31e2a89f6f8        homeassistant/amd64-addon-configurator:3.4          "/run.sh"                2 days ago          Up 2 days                                                                                addon_core_configurator
0932da9d7854        homeassistant/intel-nuc-homeassistant:0.97.2        "/bin/entry.sh pytho…"   2 days ago          Up 2 minutes                                                                             homeassistant
55f82e6bc692        hassioaddons/aircast-amd64:2.1.0                    "/init"                  2 days ago          Up 2 days                                                                                addon_a0d7b954_aircast
b03763b950a9        hassioaddons/adb-amd64:0.5.1                        "/init"                  2 days ago          Up 2 days           0.0.0.0:5037->5037/tcp                                               addon_a0d7b954_adb
f155d9f37894        homeassistant/amd64-addon-duckdns:1.9               "/run.sh"                2 days ago          Up 2 days                                                                                addon_core_duckdns
5de2ebf527f0        sabeechen/hassio-google-drive-backup-amd64:0.98.2   "python3 -m backup"      2 days ago          Up 2 days           0.0.0.0:1627->1627/tcp, 8099/tcp                                     addon_cebe7a76_hassio_google_drive_backup
9d5bb24fe051        homeassistant/amd64-addon-mosquitto:5.0             "/run.sh"                2 days ago          Up 2 days           0.0.0.0:1883-1884->1883-1884/tcp, 0.0.0.0:8883-8884->8883-8884/tcp   addon_core_mosquitto
b43d1f20a22c        marthoc/hassio-addon-deconz-amd64:2.05.66           "/tini -s -- /run.sh"    2 days ago          Up 2 days                                                                                addon_69bb46cb_deconz
9687a7208a64        homeassistant/amd64-hassio-dns:1                    "coredns -conf /conf…"   2 days ago          Up 2 days                                                                                hassio_dns
2219e9bf111c        portainer/portainer                                 "/portainer"             2 months ago        Up 2 days           0.0.0.0:9000->9000/tcp                                               inspiring_taussig

Мы узнали ID контейнера: 0932da9d7854. Необходимо к нему подключиться, для этого пишем команду: 
sudo docker exec -it 0932da9d7854 /bin/bash

freenetwork@home:~$ sudo docker exec -it 0932da9d7854 /bin/bash

Находясь в контейнере необходимо определить расположение библиотеки xiaomi_gateway и стандартного компонента xiaomi_aqara. Воспользуется командой find.

bash-5.0# find / -name xiaomi_aqara
/usr/src/homeassistant/homeassistant/components/xiaomi_aqara
bash-5.0# find / -name xiaomi_gateway
/usr/local/lib/python3.7/site-packages/xiaomi_gateway
bash-5.0# 

Затем необходимо изменить данные файлы, воспользоваться редактором vi

В файле /usr/src/homeassistant/homeassistant/components/xiaomi_aqara/cover.py заменить

```
if model == "curtain":
```
на 
```
if model in ["curtain", "curtain.aq2", "curtain.hagl04"]:
```

А в файле /usr/local/lib/python3.7/site-packages/xiaomi_gateway/__init__.py заменить

```

'cover': ['curtain'],

```

на

```

'cover': ['curtain', 'curtain.hagl04'],
```

Или выполнить замену строк командой sed.

sed -i 's/if model == "curtain":/if model in \["curtain", "curtain.aq2", "curtain.hagl04"\]:/' /usr/src/homeassistant/homeassistant/components/xiaomi_aqara/cover.py

sed -i "s/'cover': \['curtain'\],/'cover': ['curtain', 'curtain.hagl04'],/" /usr/local/lib/python3.7/site-packages/xiaomi_gateway/__init__.py

Все готово! Зайдите в UI Home Assistant, в настройки и перезапустите сервер. 

Эпилог:

Шторы добавлены в Home Assistant, организовано управление ими и полноценная обратная связь. В HomeKit шторы корректно добавлены и имеется обратная связь. Я обязательно доделаю работу чтобы шторы появились в deconz и zigbee2mqtt, обязательно со статусом.

1600x_image.png?1566527016

Как выглядят шторы в HA

1600x_image.png?1566527017

При нажатие на штору в HA мы имеем корректный статус.

1600x_image.png?1566527025

Шторы в HomeKit имеет корректный статус.

P.S. На фото из HomeKit находятся 2 шторы, к сожалению я не разобрался как с концами удалить устройства с HA. Штора в верхнем левом углу, остатки интеграции с zigbee2mqtt которое не взлетело. Разбираюсь =)


Все новости мира умных домов - t.me/SprutAI_News

Остались вопросы? Мы в Telegram - t.me/soprut

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. Александр Жабунин (OXOTH1K)

    Отличная статья!!!

  2. (meta11ist87)
    (meta11ist87) 24 дня назад

    Спасибо, интересно.

  3. (Mirn2020)
    (Mirn2020) 24 дня назад

    Ад! 

  4. (Brain)
    (Brain) 24 дня назад

    Это сильно! Очень здорово. Благодарствую за предоставление новых путей решения. Тоже использую хасио в докере.

  5. Алексей Х (AlexxIT)
    Алексей Х (AlexxIT) 24 дня назад

    Компонент можно положить в custom_components, а не править наживую. Там же в зависимостях указать новую версию библиотеки. Кастомы имеют больший приоритет.

    • Антон Власов (freenetwork)

      Да. Однако через пару мержей будет в проде. Сделан у меня и компонент. Писать уже не стал. Долго модерировалась статья

К списку статей

Скидки для сообщества

MI-DOM

+7 977 282-80-53
Промокод:
SPRUTAI
Размер скидки:
5%

Интернет-магазин yourhomekit.ru

+7 914 550-51-11
Промокод:
SPRUT-BLG
Размер скидки:
8%
Cамый большой ассортимент в России аксессуаров Apple HomeKit

Похожие статьи

09 ноября 2018, 20:54
Кейс создания умного дома без каких либо прокладок в виде Raspberry pi
15 ноября 2018, 09:42
Способы автоматизации механических ворот
15 ноября 2018, 13:11
Xiaomi Mi Remote 360 добавляем Apple HomeKit
24 августа 2018, 12:18
Пошаговая установка HomeAssistant
15 июня 2018, 12:13
Охранная система в гараж на ESP8266 с интеграцией в Apple HomeKit
27 августа 2018, 10:14
Интегрируем ХА в HomeKit
19 марта 2019, 22:19
Обзор долгожданного 2х канального zigbee реле от Aqara, сравнение с конкурентами и небольшой тест на Deconz, Mi Hub и Aqara Hub.
04 апреля 2019, 17:48
Расскажу о том за ~1 час перевезти УД с 2мя USB стиками с Raspberry PI на Synology NAS.
20 октября 2018, 22:57
Теоретические основы протокола MQTT и описание того, как он работает и для чего используется
01 ноября 2018, 09:27
Настройка Deconz USB стика ConBee от Dresden Elektronik в Hass.io и некоторые особенности эксплуатации