Эпопея. Добавление штор 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 или Instagram
Остались вопросы? Мы в Telegram - @Soprut

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

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

  2. (meta11ist87)
    (meta11ist87) 4 месяца назад

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

  3. (Mirn2020)
    (Mirn2020) 4 месяца назад

    Ад! 

  4. (Brain)
    (Brain) 4 месяца назад

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

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

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

    • Антон Власов (freenetwork)
      Антон Власов (freenetwork) 4 месяца назад

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

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

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

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
Способы автоматизации механических ворот
17 декабря 2019, 17:49
Универсальный привод для автоматического удаленного открытия окон с простой интеграцией в умные дома
15 ноября 2018, 13:11
Xiaomi Mi Remote 360 добавляем Apple HomeKit
15 июня 2018, 12:13
Охранная система в гараж на ESP8266 с интеграцией в Apple HomeKit
24 августа 2018, 12:18
Пошаговая установка HomeAssistant
20 октября 2018, 22:57
Теоретические основы протокола MQTT и описание того, как он работает и для чего используется
19 марта 2019, 22:19
Обзор долгожданного 2х канального zigbee реле от Aqara, сравнение с конкурентами и небольшой тест на Deconz, Mi Hub и Aqara Hub.
27 августа 2018, 10:14
Интегрируем ХА в HomeKit
30 августа 2019, 07:28
Несколько нетривиальных способов использования датчика открытия окон/дверей от Xiaomi/Aqara.