Tuya Zigbee Lan Gateway - прошиваем и подключаем к HomeAssistant

Как прошить Tuya Zigbee Lan Gateway и подключить к HomeAssistant через zigbee2mqtt.

Update

2026-07-26: Добавил информацию о новых шлюзах, построенных на базе WBRG1 + ZS3L.

Предыстория

Меня интересует “Умный дом”, в частности, реализации на базе Open Source решений, одним из таких является HomeAssistant.

C 2021 года у меня работает шлюз Xiaomi, который круглый и втыкается в розетку. Данное устройство я купил с рук и оно уже было прошито под OpenWRT. Там я оставил только LumiMQTT, Zigbee2MQTT. А HomeAssistant находится на одном из домашних серверов.

Но весь этот процесс происходит по остаточному принципу, когда появляется свободное время, сажусь, читаю, настраиваю.

Но часто бывает, что просто читаю и ничего не понимаю. Очень уж бываю уставшим.

Также я занимался видеонаблюдением Frigate NVR, об этом даже подготовил отдельную статью. Связка HomeAssistant, Mosquitto, Frigate, Telegram bot отлично себя показала, работает в полевых условиях уже 3й месяц без замечаний,

Очень хотелось приобрести устройство, которое выполняло только одну задачу - Zigbee. Ну было бы простым и надежным. И такое устройство есть - это Tuya Zigbee Lan Gateway.

И такое одно устройство приобрел, подключил по инструкции к приложению SmartLife. Устройство определилось и работает. Но в облаке Tuya, что меня не устраивает.

Устройство должно уметь работать полностью локально.

Но решение уже есть и о нем будет далее.

Железо

Шлюз из себя предстваляет систему на базе Realtek 8196E и Zigbee устройство. Между собой процессор и плата общаются посредством UART. Также на моем устройстве установлена EEPROM GD25Q127C.

Полезные ссылки

Мои приключения

Устройство я купил в сентябре 2024 года. Тогда быстро настроил под SmartLife и на этом остановился. Для подключения к HomeAssistant предлагали следующее решение - установить расширение Tuya Local. И, кажется, это бы работало уже без самого облака, но я подстчитал, что такое решение не подойдет.

Зимой, я наткнулся на этот тред. Прочитал бегло и ничего не понял. Тред идет с 2021 года.

Весной, я наткнулся на статью Paul Banks о том, как проводить процедуру, как через USB-TTL подключаться и выкачивать образ, затем определить пароль пользователя root. Прочитал, тоже много не понятного. Например, в HomeAssistant нужно устанавливать расширение ZHA. Отложил в беклог.

Летом, еще раз перечитал, узнал новости, в этот раз пазл сложился. Из новостей приятным было узнать, что Zigbee2MQTT включили поддержку EZSP, Ember.

Порядок действии:

  • Вскрыть корпус;
  • Вытащить плату, аккуратно отсоеденить антенну;
  • Припаять 6 пинов на плату;
  • Подключить согласно распиновке USB-TTL (у меня CP2102);
  • На компьютере запустить команду sudo screen /dev/ttyUSB0 38400;
  • Подать питание на плату;
  • Нажать ESC как можно быстрее;
  • Войти в UBOOT, выкачать к себе на компьютер образ системы;
  • На компьтере запустить скрипты и получить пароль пользователя root;
  • Перезагрузить плату;
  • Войти в консоль под пользователем root, используя полученный пароль;
  • Скачать программу serialmonitor на плату;
  • Заменить скрипты в /tuya - убрать старый скрипт, добавить новый, который запускает serialmonitor;
  • Настроить zigbee2mqtt;
  • Настроить HomeAssistant.

Что пошло не так?:

  • Производитель изменил UBOOT, теперь нажатие на ESC не прерывает процесс загрузки;
  • Попытался считать данные с EEPROM с помощью клипсы - не удалось. Пишут что клипсы не правильные;
  • Купил клипсу Pomona, подцепил к чипу - все равно не работает;
  • Достал паяльник, выпаял чип, припаял к адаптеру, смог прочитать образ, запаял чип назад, включил вроде работает.

Я плохо пяю, поэтому всячески стараюсь избегать данной операции, но тут прижало, решил быть спокойным, с новым паяльником начал процесс. Но все равно пошло не по плану, сдул один конденстатор C25, запаял все назад, прочистил изопропиловым спиртом, подключил - работает.

Мои рекомендации для 2025 года.

Start Here

Для 2025 я рекомендую эту статью. Выполните все действия.

Если ESC не работает

Если ESC не работает, то можно воспользоваться методом, очень осторожно, который описан здесь. Метод простой - делаем так, чтобы процессор подумал, что флешки нет. Включается аварийны режим UBOOT, оттуда все можно вытащить.

Или поступить как я, выпаять схему, прочитать ее на программаторе, например, на TL866.

Как узнать пароль пользователя root, если есть образ под рукой?

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

Рекомендую сперва создать Python venv окружение, чтобы не засорять систему.

Переход от V7 к V8 версии EZSP, Ember.

Итак я успешно выполнил все предыдущие действия, устройство доступно, настроен zigbee2mqtt, но zigbee2mqtt не может запустить zigbee стек.

Статья предлагает нам установить версию прошивки NCP_UHW_MG1B232_678_PA0-PA1-PB11_PA5-PA4.gbl. Таким образом, мы прошиваем версию прошивки на Zigbee платы до V7.

Но современная версия (на момент сентября 2025 года) Zigbee2MQTT требует V8 версию. Эту версию прошивки можно взять отсюда. Скачиваем, устанавливаем удаленно с помощью скрипта upgrade_ncp.py, изменяем конфигурацию Zigbee2MQTT на следующую:

serial:
  port: tcp://IP:8888
  adapter: ember
  baudrate: 115200
  rtscts: false

После этого Zigbee2MQTT должен поднятся и работать.

Tuya Smart Gateway Hub Multi-Model.

Купил я себе такие модули на aliexpress. Эти модули собраны на новой элементной базе. Но в целом идея сохранилась. Есть модуль вычислительный WBRG1 и есть модуль zigbee ZS3L. Ранее был чип на базе Realtek с Linux на борту, теперь просто чип с прошивкой. Добрые люди открыли проект OpenBeken, который поддерживает данный чип.

Сразу скажу стало даже лучше. Коробка легко вскрывается, нужно 4 шурупа открутить, затем ножиком (или плоской отверткой) снять крышку, затем также снять плату.

На плате P4 пины необходимые нам для прошивки WBRG1.

  • Отключите плату;
  • Соедините вместе GND + LOG_TX;
  • Подключите питание;
  • Отсоедините GND + LOG_TX;
  • Подсоедините USB-TTL GND -> GND, USB-TTL TX -> LOG_TX, USB-TTL RX -> LOG_RX;
  • Скачайте и распакуйте архив;
  • В терминале (или cmd, powershell для Windows) перейдите в распакованную папку;
  • Установим отдельное окружение для Python
python3 -m venv venv; source ./venv/bin/activate;
  • Установим нужные пакеты
pip install serial; pip install pyserial;
  • Определим порт USB-TTL
python -m serial.tools.list_ports -v;
  • Попробуем сделать бакап прошивки перед началом работ
python rtltool.py -p /dev/cu.usbserial-0001 -b1500000 rf 0 0x800000 ff.bin;
  • Бакап прошивки должен сохранится в файл ff.bin, должен весит около 8 мегабайт;
  • Скачайте прошивку OpenRTL8720D_1.18.298.bin c github;
  • Загрузите прошивку в WBRG1
python rtltool.py -p /dev/cu.usbserial-0001 -b1500000 wf 0x0 OpenRTL8720D_1.18.298.bin
  • После успешной загрузки прошивки, отключите питание, выдерните шнуры с GND, LOG_TX, LOG_RX;
  • Включите питание и с помощью телефона найдите новую точку доступа. Вот видео с youtube чтобы стало понятнее.
  • После настройки WIFI, найдите адрес устройства и откройте страницу с адресом устройства;
  • В Config -> Change Startup Command Text заполните следующий текст
startdriver uarttcp 115200 512 1 1
SetChannelLabel 1 "Bridge Connection"
SetChannelVisible 1 0
SetChannelType 1 OpenClosed_Inv
pip install universal-silabs-flasher;
  • Распакуйте файл прошивки;
  • В терминале загрузите новую прошивку c помощью утилиты universal silicon labs flasher;
universal-silabs-flasher --device socket://192.168.1.11:8888 flash --firmware zs3l_zigbee_ncp_8.0.2.0_115200.gbl
  • Настройте zigbee2mqtt - добавьте новое устроство с адресом
serial:
  adapter: ember
  port: tcp://192.168.1.11:8888
  baudrate: 115200
  rtscts: false