В этой публикации речь пойдёт об установке на смартфон под управлением операционной системы 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), измерители влажности почвы для растений, тестеры качества воды, датчики давления, наличия эл. сети и другие решения.

