В этой публикации речь пойдёт об установке на смартфон под управлением операционной системы Android, одного из протоколов умного дома – zigbee и его реализации для открытых систем автоматизации zigbee2mqtt. Всё это работает под эмулятором ОС Linux окружения - Termux, что позволяет развернуть элементы «Умного дома» прямо на мобильном устройстве и возможность реализации некоторых функций УД в тестовой среде.
Для тестирования, я использовал:
Смартфон с версией ОС Android > 10 (протестировал работу на версиях ОС 16, 13, 10 – чудес не бывает, чем старее устройство и ниже версия, тем сильнее тормозит из-за технических характеристик, для старых устройств, думаю, имеет смысл сбросить настройки к заводским).

Сетевой координатор LAN или Wi-Fi (zigbee шлюз), в статье будут рассмотрены два варианта координатора:  LAN стик на базе CC2652P7 от BacchusWorkshop и  Wi-Fi-zigbee шлюз SLS, проекта slsys io

Zigbee и Zigbee2MQTT: что это и зачем?

Zigbee — беспроводной стандарт связи с низким энергопотреблением, созданный для объединения датчиков, ламп и других приборов в единую сеть умного дома. На сегодняшний день это, пожалуй, самый распространённый протокол как по количеству поддерживаемых устройств, так и по числу производителей. Главная проблема здесь — вендор-лок: устройства из разных экосистем (Xiaomi, Tuya, Aqara и др.) чаще всего несовместимы друг с другом напрямую и требуют «родных» шлюзов.

Zigbee2MQTT (Z2M) — бесплатный инструмент с открытым исходным кодом. Он выступает мостом между беспроводной Zigbee-сетью и MQTT-брокером, позволяя полностью избавиться от проприетарных шлюзов. Проект поддерживает более 5500 устройств от 580+ брендов, превращая обычный координатор в универсальный центр управления. Актуальный список поддерживаемого оборудования всегда можно найти на официальном сайте проекта Zigbee2MQTT.

Как работает экосистема

Управление умным домом через связку Zigbee2MQTT строится на трёх основных элементах:

1. Координатор (аппаратная часть)
Это главное устройство в беспроводной сети. Он создаёт её, отвечает за безопасность, распределяет адреса и выступает центральным узлом между конечными девайсами и сервером. Физически координатор принимает сигналы от датчиков, розеток и лампочек.

Среди разных типов координаторов наиболее популярны два формата:

·         USB-донглы (стики) — самый доступный вариант. Подключаются напрямую в USB-порт сервера. Для нашей задачи — установки умного дома на смартфон — они не подходят.

·       Сетевые (LAN / Wi-Fi) координаторы — современный «золотой стандарт». Подключаются по кабелю Ethernet или Wi-Fi. Это позволяет разместить устройство в любой точке квартиры для лучшего покрытия сети, независимо от того, где находится сам смартфон-сервер.

2. Zigbee2MQTT (программная часть)
Эта программа считывает данные с координатора, переводит их в универсальный текстовый формат JSON и публикует в MQTT-брокер.

3. MQTT-брокер
Центральный серверный узел, который принимает, фильтрует и распределяет сообщения по легковесному протоколу MQTT. Он работает по модели «издатель — подписчик»: Z2M отправляет (публикует) данные в определённые темы (топики), а брокер моментально доставляет их клиентам. Чаще всего в этой роли выступает Mosquitto — он просто перенаправляет пакеты между Z2M и системой автоматизации.

Примечание: в рамках этой статьи сама система автоматизации рассматриваться не будет. Обычно для этого используют популярную Home Assistant либо альтернативы: Node-RED, OpenHAB, MajorDoMo, HOMEd и др. Такая система подписывается на MQTT-топики, визуализирует данные для пользователя, запускает сценарии и служит главным связующим звеном между устройствами разных протоколов.

Перейдём к практической части — подготовке и настройке координаторов. Ниже рассмотрены два варианта.

используемое оборудование
используемое оборудование

Вариант 1. LAN PoE Stick на базе CC2652P7 от BacchusWorkshop

Стик поставляется в корпусе с USB-разъёмом и внешней антенной. В моей модификации питание 5 В подаётся через разъём USB Type-C, хотя существуют версии и с поддержкой PoE.

После подключения стика к домашней сети он автоматически получает IP-адрес по DHCP. Узнать этот адрес можно в панели управления вашего роутера, после чего его нужно ввести в адресную строку браузера для перехода в веб-интерфейс устройства.

Веб-интерфейс содержит всего одну страницу, где необходимо настроить три основных параметра:

  • Сетевые настройки: рекомендую оставить DHCP, но на самом роутере жёстко привязать IP-адрес к MAC-адресу стика.

  • Work mode: устанавливаем режим TCP Server (именно он нужен для работы с Z2M).

  • Local port: запоминаем или записываем указанный порт, он понадобится далее при настройке Zigbee2MQTT.

Примечание: При подготовке устройства я столкнулся с нюансом именно в своей сети: поле Target IP необходимо изменить на адрес своей сети (IP-адрес смартфона, где будет крутиться Z2M). Однако в режиме TCP Server это поле заблокировано. Чтобы обойти ограничение, я временно перевёл стик в другой режим работы, изменил адрес на нужный, а затем вернул режим TCP Server обратно.

После применения всех изменений перезагружаем стик. На этом его настройка завершена.

Вариант 2. Шлюз SLS от проекта slsys.io

Главное отличие этого варианта — шлюз SLS подключается по беспроводной сети Wi-Fi. В контексте нашей задачи это может быть огромным плюсом: смартфон можно перевести в режим точки доступа, шлюз подключится напрямую к нему по Wi-Fi, а конечные датчики — к шлюзу по Zigbee. Полная автономность! Но есть и обратная сторона: Wi-Fi и Zigbee работают на одной частоте (2.4 ГГц), поэтому при сильной зашумленности эфира могут возникать задержки или проблемы со связью.

Шлюз может поставляться с разными прошивками. У меня, версия PRO, содержит собственную систему автоматизации с поддержкой сценариев на Lua и облачную платформу. Однако для нашей статьи мы будем использовать шлюз в самом простом режиме — как прозрачный координатор (мост). Вся логика Zigbee и обработка сообщений будут происходить на стороне Zigbee2MQTT, который мы установим на смартфон в следующей части.

Для запуска шлюза в режиме моста нужно сделать несколько шагов:

Установка в режим координатора: После включения устройства и подключения к Wi-Fi перейдите в меню Settings → Services. Активируем режим Zigbee TCP Bridge и установив порт 8881. Нажимаем Save.

Перезагрузка: На экране появится уведомление о необходимости перезагрузки, а через 5 секунд система автоматически перенаправит вас на главную страницу. В течение этих 5 секунд обязательно нужно успеть нажать на ссылку перезагрузки. После возврата на главную страницу проверяем параметр SLS Info → Uptime — он должен сброситься на ноль.

Настройка MQTT: Переходим в раздел Settings → Link → MQTT Setup. Указываем адрес сервера и порт MQTT-брокера (эти параметры мы немного разберем в следующей части). В моём сценарии авторизация на брокере не используется, поэтому остальные настройки MQTT я оставил по умолчанию.

После сохранения этих параметров связи перезагрузка шлюзу не требуется — он просто вернется на главный экран.


Установка Termux на Android

Termux — это эмулятор терминала и полноценная среда Linux для Android. Базовый функционал разворачивается автоматически, а расширенные возможности добавляются через встроенный менеджер пакетов и установку ПО из Git-репозиториев.

⚠️ Важное предупреждение:
Актуальные версии Termux публикуются только в каталоге приложений F-Droid или на GitHub. Версия из Google Play устарела еще в 2020 году, официально больше не поддерживается и для Android 10+ и совершенно непригодна.

Вместе с основным приложением я настоятельно рекомендую установить два дополнения из той же экосистемы:

  • Termux:Boot — отвечает за автозапуск Linux-окружения и сервисов при старте сессии и смартфона.

  • Termux:API — обеспечивает интеграцию среды Termux с аппаратными возможностями самого Android.

Важно: все три приложения (Termux и утилиты) необходимо скачивать из одного и того же источника (либо только F-Droid, либо только GitHub). В противном случае возникнет конфликт цифровых подписей, и дополнения просто не установятся.

Первый запуск

При первом входе в приложение Linux-пользователь создаётся автоматически. Чтобы узнать имя своего юзера, текущий IP-адрес смартфона и рабочую директорию, вводим стандартные команды для Linux:

whoami
ifconfig
pwd

В моём случае имя пользователя — u0_a474. Права Superuser (Root) в Termux по умолчанию отсутствуют, но для нашей задачи они и не понадобятся.

Обновление системы и настройка SSH

Управлять сервером с экрана телефона не очень удобно, поэтому мы сразу настроим удаленный доступ. Обновим пакетную базу, установим SSH-сервер и зададим пароль для пользователя (без него подключиться не получится).

Вводим команды поочередно, нажимая Enter после каждой:

pkg update -y
pkg upgrade -y
pkg install openssh -y
passwd
sshd 

После этого все дальнейшие действия можно комфортно выполнять через любой SSH-клиент (например, PuTTY или MobaXterm) с компьютера.

Обращаю внимание: SSH-сервер в Termux по умолчанию слушает нестандартный порт 8022.

Чтобы SSH-сервер автоматически поднимался при каждом открытии Termux, добавляем команду его запуска в конфигурационный файл профиля:

echo "sshd" >> ~/.bashrc 

Настройка энергосбережения (Борьба с «засыпанием» Android)

Чтобы операционная система Android не «прибивала» фоновые процессы нашего умного дома (Z2M и брокер) при выключении экрана, необходимо выдать среде Termux максимальные приоритеты.

Настройка внутри консоли Termux:
Устанавливаем пакет интеграции и активируем режим бодрствования (Wake Lock):

pkg install termux-api -y
termux-wake-lock 

Настройка в самой ОС Android:
У разных производителей названия пунктов меню могут незначительно отличаться, но общая логика следующая:

  • Переходим в Настройки смартфонаБатарея (или ПриложенияУправление приложениями, у разных производителей могут быть разные наименования).

  • Найдём в списке Termux и в графе «Контроль активности» (или Энергосбережение) переключите режим в положение «Нет ограничений» (или Разрешить работу в фоновом режиме).

  • В диспетчере приложений Android выдайте все необходимые разрешения  для Termux, Termux:Boot и Termux:API (я выдал все разрешения для этих приложений).

Дальнейшие шаги по установке брокера Mosquitto и самого Zigbee2MQTT гораздо удобнее выполнять уже из SSH-терминала на ПК.

Установка MQTT-брокера Mosquitto

Для работы связки нам обязательно понадобится локальный MQTT-брокер. Все дальнейшие действия мы выполняем через SSH-терминал на компьютере, поэтому команды можно просто копировать и вставлять.

Установим Mosquitto, создадим директорию для конфигурационного файла и пропишем базовые параметры сети и запускаем брокер в фоновом режиме:

pkg install mosquitto -y
mkdir -p ~/.mosquitto
echo -e "listener 1883\nallow_anonymous true" > ~/.mosquitto/mosquitto.conf
mosquitto -c ~/.mosquitto/mosquitto.conf &

 Чтобы Mosquitto автоматически поднимался при каждом старте сессии Termux, добавим в файл ~/.bashrc команду автозапуска с проверкой процесса:

echo "pgrep -x mosquitto > /dev/null || mosquitto -c ~/.mosquitto/mosquitto.conf &" >> ~/.bashrc

Установка Zigbee2MQTT в Termux

Подготовка окружения и зависимостей
Установим среду выполнения Node.js, систему контроля версий Git и необходимые утилиты для сборки бинарных пакетов:

pkg install nodejs-lts git make python -y

 Примечание: в репозиториях Termux доступны два пакета: nodejs (Current-версия) и nodejs-lts (стабильная LTS-версия). Они конфликтуют между собой. Для бесперебойной работы Zigbee2MQTT мы выбираем именно LTS-пакет.

Клонирование репозитория
Скачиваем актуальный исходный код проекта с GitHub и сразу переходим в рабочую директорию:

git clone https://github.com/Koenkk/zigbee2mqtt.git
cd zigbee2mqtt

 Настройка менеджера пакетов pnpm
Современные версии Zigbee2MQTT требуют для сборки менеджер пакетов pnpm. Активируем его через встроенный в Node.js инструмент corepack и подготовим среду:

corepack enable
corepack prepare pnpm@10.18.3 --activate
pnpm add -D typescript@5.8.2
pnpm install --no-optional

Для проверки корректности окружения можно вывести текущие версии Node.js и pnpm:

node -v
pnpm --version

(В моем случае вывод терминала показал Node.js v24.18.0 и pnpm 10.18.3).

Финальная сборка проекта

Запускаем установку всех зависимостей Zigbee2MQTT строго по lock-файлу разработчиков:

pnpm install --frozen-lockfile

Процесс сборки и компиляции на смартфоне займет некоторое время. Дожидаемся появления сообщения об успешном завершении.


Конфигурация и первый запуск Zigbee2MQTT

Перейдем к настройке самого сервиса. Создаем файл конфигурации с помощью встроенного текстового редактора nano:

nano data/configuration.yaml

Вставляем в него следующее содержимое.

Обращаем внимание: в секции serial необходимо указать IP-адрес и порт  координатора (LAN-стика или SLS-шлюза), которые мы получили на этапе настройки оборудования.

Содержимое configuration.yaml

homeassistant: true
permit_join: false
mqtt:
  base_topic: zigbee2mqtt
  server: 'mqtt://localhost'
serial:
  port: 'tcp://192.168.1.122:8881' # Укажите здесь IP и порт своего координатора
  adapter: zstack
frontend:
  enabled: true
  host: 0.0.0.0
  port: 8090
advanced:
  network_key: GENERATE
  pan_id: GENERATE
ext_pan_id: GENERATE

🔒 Примечание: Параметры GENERATE в блоке advanced заставят Zigbee2MQTT автоматически создать уникальные ключи при первом же запуске сети.

Сохраняем файл в nano (Ctrl+O, затем Enter) и выходим (Ctrl+X).

Теперь запускаем Zigbee2MQTT напрямую из директории проекта:

cd ~/zigbee2mqtt
pnpm start

Если всё настроено верно, в консоли побегут логи старта сервиса и увидим успешное подключение к вашему сетевому координатору. С этого момента встроенный веб-интерфейс Z2M станет доступен в браузере любого устройства в вашей домашней сети по IP-адресу смартфона и порту 8090 (например: http://192.168.1.105:8090), пока запущена программа.

Переход к фоновому режиму и автозапуску

Сейчас Zigbee2MQTT работает непосредственно в открытой сессии терминала. Стоит вам закрыть SSH-клиент или нажать Ctrl+C — работа zigbee на смартфоне прекратится.

Для тестирования запуска, этого может быть достаточно, но даже для тестового стенда – мало.

Поэтому настроим менеджер процессов PM2, который возьмет на себя фоновую работу сервиса и его автоматический подъем при перезагрузке смартфона.

Если сервис у вас запущен, останавливаем его сочетанием клавиш Ctrl+C.


Настройка автозапуска через PM2

Установим PM2 — продвинутый менеджер процессов для Node.js, работающий как демон (фоновая служба). Он будет следить за работой Zigbee2MQTT в фоновом режиме, автоматически перезапускать сервис в случае сбоев и вести логи.

Устанавливаем PM2 глобально в систему, переходим в папку с Zigbee2MQTT (если ещё не в ней), запускаем проект через менеджер процессов, присвоив ему имя z2m, и сохраняем конфигурацию::

npm install -g pm2
cd ~/zigbee2mqtt
pm2 start index.js --name z2m
pm2 save

Команда pm2 save создаёт снимок (снапшот) запущенных в данный момент процессов. Чтобы этот список автоматически восстанавливался при каждом запуске консоли, нам понадобится команда pm2 resurrect.

Откроем конфигурационный файл нашей командной оболочки: nano ~/.bashrc

 И приведем его итоговое содержимое к следующему виду:

# Автозапуск SSH-сервера
Sshd
termux-wake-lock
# Автозапуск MQTT-брокера Mosquitto с проверкой дубликатов процессов
pgrep -x mosquitto > /dev/null || mosquitto -c ~/.mosquitto/mosquitto.conf &
# Восстановление фоновых процессов PM2 (включая Zigbee2MQTT)
pm2 resurrect

Сохраняем изменения (Ctrl+O, Enter) и выходим из редактора (Ctrl+X). На этом установку можно считать завершённой.  

Дальше – подключение zigbee устройств.


В качестве итогов

Мы развернули мост для организации одного из протоколов умного дома прямо на мобильном устройстве. Дальнейшие действия зависят исключительно от ваших потребностей и возможностей:

  • С помощью ранее установленной утилиты Termux:Boot и в некоторых случаях стороннего ПО, можно настроить старт Termux сразу при включении Android-смартфона (сервер поднимется сам даже после перезагрузки телефона).

  • Дополнение Termux:API позволит связать автоматизации умного дома с системными функциями смартфона — например, отправлять Zigbee-команды при получении входящих SMS или звонков, уведомлять о сработках и неполадках, организовать постоянное питание и многое другое.

 Зачем это нужно?
Лично я использую связку Zigbee + Termux как мобильный тестовый стенд для обкатки устройств и некоторых скриптов в изолированной сети, через MQTT можно связать с используемой системой автоматизации.

Возможно, для кого-то такой подход может стать легким и бюджетным стартом в открытые системы автоматизации. Старый Android-смартфон есть почти в каждом доме, а сетевой координатор стоит не так уж и дорого.

Возможно, такое решение подходит для построения небольших удаленных локальных систем. Протокол Zigbee поддерживает механизм биндинга (binding) — прямую связь устройств между собой. Можно один раз связать беспроводной выключатель с умной розеткой или реле (главное, чтоб они поддерживали эту технологию), и они будут работать совместно даже без участия координатора и сервера.

Кроме того, в среде умного дома сейчас доступно огромное количество автономных устройств, которые могут быть полезны сами по себе, без развертывания полноценных систем вроде HA. К примеру, датчики качества воздуха (CO₂, VOC), измерители влажности почвы для растений, тестеры качества воды, датчики давления, наличия эл. сети и другие решения.