Zigbee2MQTT & Home Assistant: Установка нескольких копий Add-On’а

4 ноября, 2023Изменена: 6 ноября, 2023 в 00:13

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

Уже очень давно для управления сетями Zigbee я использую встроенную в HA интеграцию ZHA в качестве основной сети и кастомную XiaomiGateway3 для организации сети на даче. Объясняется это тем, что растянуть одну физическую сеть (с одним координатором) на такое расстояние невозможно, а поддержка нескольких координаторов в ZHA отсутствует. Как нет и поддержки установки нескольких экземпляров интеграции ZHA в HA.

С этой точки зрения XiaomiGateway3 очень удобна, можно организовать столько Zigbee сетей сколько нужно, просто добавляя шлюзы (и экземпляры интеграции на каждый шлюз) в нужном количестве. Хоть в каждой комнате, на каждом этаже, в подвале или гараже.

К сожалению, практика показала, что ни ZHA, ни XiaomiGateway3 не дают той свободы в использовании конечных устройств как это делает Zigbee2MQTT. Z2M поддерживает действительно огромное кол-во устройств, а так же позволяет использовать внешние конвертеры что особенно актуально для зоопарка Tuya-based устройств.

Но и здесь есть ложечка дёгтя – если использовать рекомендуемый способ установки HA, а именно Home Assistant Operating System с ее механизмами управления add-on’ами, то после добавления репозитория дополнения Z2M из коробки нам доступна возможность установить только один экземпляр add-on’а:

А для решения вопроса организации нескольких Zigbee сетей нам нужно по одному экземпляру на координатор (сеть).
Для решения этой небольшой проблемы есть разные “народные” способы.


Сразу оговорюсь, что здесь речь идет именно о “монолитном” решении в виде Home Assistant OS с ее add-on’ами и всем что вокруг. Безусловно этот вопрос можно решить, например, подняв вручную нужное кол-во экземпляров Z2M в докере, например. Но мне удобнее использовать одну виртуальную машину с HA OS для всего, что связанно с HA.
В т.ч. и все экземпляры Z2M вместе с остальными add-on’ами используемыми в HA.


Например, если вам достаточно двух экземпляров Z2M и вас не смущают возможные ошибки в Edge версии, то можно одновременно установить Zigbee2MQTT и Zigbee2MQTT Edge, получив два одновременно работающих дополнения.

Для большего кол-ва дополнений единственный возможный путь это добавление нескольких репозиториев с одним и тем же add-on’ом. Но, добавить несколько экземпляров репозитория с одним и тем же адресом не получится:


Это можно частично обойти, каждый раз несколько изменяя его URL.
Например, добавив “/” в конце (https://github.com/zigbee2mqtt/hassio-zigbee2mqtt/) или заменив https на http (http://github.com/zigbee2mqtt/hassio-zigbee2mqtt):

Такой способ будет работать, но на мой взгляд он не выглядит надежным и нет никакой гарантии что логика добавления репозиториев не изменится в будущем с какими-либо обновлениями HA. Да и разобраться в нескольких совершенно неотличимых друг от друга дополнениях бывает непросто.

Для себя я выбрал вариант с множественным форком (клонированием) репозитория к себе в GitHub и добавление в ХА уже собственных репозиториев, что позволяет мне получить фактически любое нужно мне количество дополнений, а так же добавить некоторые косметические правки:


Для тех, кто не хочет разбираться с этим вашим GitHub’ом и прочим разным, можно воспользоваться моими копиями дополнений Z2M, репозитории расположены здесь – https://github.com/orgs/avbor-z2m/repositories.


Тем не менее, сделать все это достаточно просто, но есть нюанс – на GitHub’е нет возможности сделать больше одного форка конкретного репозитория в рамках своего аккаунта:

Обойти этот момент поможет создание организации (Organization). Для этого нужно посетить настройки своего профиля на GitHub’е (если аккаунта нет, то самое время его создать), найти раздел Organizations (https://github.com/settings/organizations) и в нем нажать кнопку New organization:

Выбрать бесплатный Free plan, выбрать основные настройки организации (имя, email владельца и т.д.):

После завершения создания организации, можно приступать к форку нужного кол-ва репозиториев Z2M к себе.

Для этого нужно зайти в оригинальный репозиторий дополнения Z2M (https://github.com/zigbee2mqtt/hassio-zigbee2mqtt) и в правой верхней части экрана найти и нажать кнопку Fork.

На следующем экране выбрать Owner’ом созданную на предыдущем шаге организацию, выбрать имя форка, нажать Create Fork.

Можно сразу создать несколько копий (форков). Столько, сколько будет нужно дополнений Z2M в HA.

После этого имеет смысл внести некоторые косметические изменения для того, чтобы было удобнее отличать один add-on от другого.
Название репозитория, которое будет видно в списке HA содержится в файле repository.json, можно поменять name и url на свои:

{
  "name": "Home Assistant Add-on: Zigbee2MQTT 1",
  "url": "https://github.com/avbor-z2m/hassio-zigbee2mqtt-1",
  "maintainer": "Koen Kanters <koenkanters94@gmail.com>"
}

Иконки add-on’ов, содержатся в файлах icon.png в соответствующих папках (zigbee2mqtt, zigbee2mqtt-edge, zigbee2mqtt-proxy). Можно изменить по вкусу, дорисовав цифры, буквы или что угодно еще.
Мой вариант иконок с добавленными номерами можно взять здесь – https://github.com/avbor-z2m/z2m-custom-icons/.

На этом все, можно добавлять свои репозитории с копиями add-on’ов Z2M в свой Home Assistant, для этого достаточно скопировать URL для каждого из своих репозиториев и добавить в HA (по аналогии с официальным репозиторием).
После добавления можно их установить из магазина обычным порядком в нужном колличестве:

На этом все, остался только один важный момент о котором нужно помнить – по умолчанию ваши копии (форки) не будут обновляться автоматически вслед за оригинальным репозиторием, но это легко исправить.
Вручную это можно делать нажатием пары кнопок, начав с Sync fork:

А автоматизировать обновление можно с использованием GitHub Apps, Actions или API. Более подробно о том, как автоматизировать процесс синхронизации форков на GitHub можно почитать тут.