
Практически все заводские Zigbee
датчики протечки не умеют посылать команды напрямую исполнительному устройству, например мотору крана. И если сеть рухнула, например отключили электричество, то система антипротечки не сработает, даже если она построена на батарейных устройствах. Прямой биндинг решает эту проблему.
Есть достаточно много устройств заводского исполнения для умных домов в системе Zigbee
, у которых все достаточно неплохо с железом, но хромает программное обеспечение. То это платформа Tuya
, где в массе своей все параметры передаются не так, как описано в стандарте, а по своему, через кластер вендора (стандарт оставил лазейку). И в принципе стандартное устройство передает данные не совсем стандартно. К тому же все это, как правило, работает через китайское облако со всеми вытекающими. Или не хватает каких-то параметров и не понятно почему производитель это не добавил.
И если взять вот этот датчик протечки, то он тоже не лишен проблем с ПО. И вроде все хорошо, и имеет стандартные кластеры, и потребление низкое (датчик спит, просыпается один раз в 4 часа и засыпает снова). В дежурном режиме его батарейки хватит минимум на несколько лет. Но, он не умеет управлять другими устройствами Zigbee
напрямую. Точнее, он вообще не умеет ничем управлять. Только через координатор может присылать свое состояние - есть протечка, нет протечки. А дальше какая-то автоматизация в Умном доме, которая через координатор сможет послать команду на исполнительное устройство. И если координатор по какой-то причине не в сети, или Умный дом завис, то вся система антипротечки бесполезна.
Натолкнуло меня на написание кастомной прошивки вот это видео.
Автор молодец, нашел выход из положения. Но мне показалось, что это слишком затратный способ. Во-первых нужно хоть немного уметь паять. Во-вторых нужно где-то заказать плату-переходник. В-третьих мы используем модуль на другом контроллере, а его тоже нужно купить. Намного бюджетней просто переписать код программы уже устанновленного контроллера и потратить деньги только на покупку самого датчика протечки.
В датчике на видео применен модуль ZTU
компании Tuya
, куда установлен чип от компании Telink
- TLSR8258F1KET32
. SDK
от этого чипа есть в открытом доступе.
Для начала покупаем такой датчик на Али
. Первый вариант, второй вариант,
По первой ссылке пришел датчик именно такой же, как на видео.

А вот по второй пришел датчик, в котором не использовали модуль, а сделали сразу на чипе TLSR8258F1KET32
(правда маркировка другая, но это он).

Но по сути это одно и тоже устройство. Теперь нужно выяснить, на какие GPIO
были посажены LED
, кнопка и контакт протечки датчика.

Кнопка - идет напрямую на PC0
. Активный уровень LOW
.
LED
- идет через транзисторный ключ на PB4
. Активный уровень HIGH
.
Контакт протечки - идет через транзисторный ключ на PD7
. Активный уровень HIGH
.
Рассмотрим также контактные площадки на второй плате, они нам пригодятся для загрузки прошивки и контроля.

Этих данных вполне достаточно, чтобы начать делать кастомную прошивку.
Итак. Сперва нужно выгрузить флеш-память контроллера. Это нужно, во-первых, чтобы сохранить оригинальную прошивку, мало ли, что-то пойдет не так, и нужно будет откатиться на оригинальную версию. Ну и во-вторых, нужно поглядеть на карту флеш-памяти. В принципе, если не озадачиваться обновлением ОТА
с оригинальной прошивки на кастомную, этого всего можно не делать, а залить прошивку по адресу 0
с помощью проводов и программатора. Но мы хотим пойти более элегантным путем и поэтому карту надо поглядеть.
Есть два варианта расположения прошивки.
Без bootloader'а
. Прошивка располагается по адресу 0 (или 0x40000, если было обновление ОТА)
, откуда и стартует.

С bootloader'ом. Прошивка располагается по адресу 0x8000 всегда, а по адресу 0 располагаетстя bootloader. Сперва стартует bootloader, затем он запускает прошивку.

В нашем случае мы имеем размер флеш-памяти 1М
и загрузка происходит с помощью bootloader'а
. Ок, значит прошивку нужно писать с учетом этого.
Теперь нужно определиться, что мы хотим получить на выходе.
Батареечное устройство, которое будет работать от батарейки как можно дольше.
Стандартное устройство с точки зрения сети
Zigbee
.Возможность прямого биндинга на исполнительные устройства.
Настройка отсылаемой команды, т.е. при обнаружении протечки можно послать команду
On
,Off
илиToggle
.
Остановимся на потреблении чипа чуть подробней. Основной способ сна, который предлагает SDK
, это Deep sleep with SRAM retention, т.е. это чип засыпает с сохранением переменных в SRAM. В этом режиме чип потребляет примерно от 1 до 1.4 uA
. И есть еще один (на самом деле их больше, но в данном случае мы рассматривам только эти два, как самые энергосберегающие), это Deep sleep without SRAM retention. Сохранение переменных не происходит. В этом режиме чип потребляет всего 0.4 uA
. Разница у них еще и в том, что во втором случае прошивка стартует, как-будто чип перегрузили. В первом варианте такого не происходит. Вот эти два режима мы и будем использовать. Первый для обычной работы модуля - вход в сеть, после нажатия на кнопку, после обнаружения протечки, после обнаружения окончания протечки, после выхода из глубокого сна. И работать так модуль будет не более 20 секунд. А потом он будет уходить в глубокий сон на 1 час и использовать для этого второй вариант. Надеюсь понятно объяснил :))
С учетом всего изложенного логика работы устройства будет выглядеть так. Датчик все время находится в режиме глубокого сна. Просыпается 1 раз в час, чтобы сообщить сети, что он жив, отправить отчет о состоянии батарейки, если оно изменилось и через 20 секунд уйти опять в режим глубокого сна. Точно так же он будет себя вести, если нажать на кнопку. Или обнаружится протечка. Или протечка закончится.
Итак, прошивка написана с учетом всех этих данных (в конце статьи будет ссылка на github
с исходниками).


В итоге, в дежурном режиме, т.е. устройство не трогали, кнопок не нажимали, протечки не было, оно просто лежит, просыпается раз в час на 20 секунд и засыпает снова на час.

Как видно, что в таком режиме датчик должен проработать на батарейке CR2032
более 10 лет.
Для теста были забинжены два устройства. Умная лампочка и одноклавишный выключатель Акара - по сути тоже лампочка. При замыкании контактов на датчике обе лампочки выключились. После этого был остановлен z2m
, обесточен координатор. И при замыкании контактов на датчике обе лампочки снова выключились. Т.е. цель - закрыть кран дажде если сеть не функционирует - достигнута.
Единственная дожка дегтя во всем этом, что какое-то устройство обязательно дожно быть роутером. Датчик протечки является EndDevice
'ом. Выключатель Акара является EndDevice
'ом, а вот умная лампочка является Router
'ом и поэтому это все прекрасно работает без координатора. Но вот забинженный датчик протечки только на выключатель Акара уже не сможет выключить этот выключатель без координатора, так как оба устройсва являются EndDevice
'ми
Для обновление дачтика со штатной прошивкой не нужно ничего паять. Нужно просто немного подредактировать конфиг z2m и обновить датчик "по воздуху" - ОТА.
Как обновить и исходники программы в проекте на github'е
Для спорщиков - я знаю, что на проводах надежней :))
Спасибы.
SGHome_Telegram за видео и за тестирование готовой прошивки.
Novgorod_DIYZi за идею и за тестирование различных моих поделок :))
P.S. И на всякий случай - автор ни за что не отвечает :))
Если кто-то хочет обсудить Zigbee
, или получить помощь в настройке или создании устройств, есть несколько хороших телеграм-чатов.
Вокруг да около Zigbee - Обсуждение устройств, прошивок и прочего софта, работающего с Zigbee
zigdev - Группа для разработчиков zigbee девайсов/прошивок. Здесь помогают разобраться как скомпилировать/написать прошивку. Помогают с разработкой железа под зигби.
DIY DEV - группа о DIY электронике. Умные дома, интернет вещей, разработка электроники, программирование.
Комментарии (28)
bazanovv
24.06.2025 03:55Спасибо! Это, пожалуй, не менее круто, чем перепрошивка датчика температуры и влажности Xiaomi с Bluetooth на Zigbee! Интересно, будет ли производитель препятствовать перепрошивке, или, наоборот, использует вашу, не говоря дурного слова.
Javian
24.06.2025 03:55У термометр проработал меньше недели и больше не включается. Думаю брак или прошивка.
Slacky1965 Автор
24.06.2025 03:55Можно узнать, Вы о чем?
Javian
24.06.2025 03:55Про ссылку на "Xiaomi Mi Thermometer 2 не только Bluetooth, но и ZigBee". Прошился, заработал, но стал быстро кушать элемент питания. Наконец в HA перестали от него появляться данные. Перегрузил - погас экран, не работает - не включается. Заменил элемент питания - не включился. Пока лежит. Думаю попробовать вернуть оригинальную прошивку. Посеялись у меня сомнения в надежной работе устройств после таких хаков.
WandererX
24.06.2025 03:55У меня такое было. Включился режим работы без дисплея. Перепрошил еще раз прошивкой и все стало ок. Кстати, в первых версиях прошивок батарейки действительно хватало на неделю. На новой прошивке уже на пару месяцев. В квартире в эксплуатации находятся 3 датчика более полугода.
bazanovv
24.06.2025 03:55Пара штук датчиков температуры и влажности, перешитых из Bluetooth в Zigbee (не статистика, но пример), работают уже с год. За это время один, что подальше от Zigbee координатора, пару раз отваливался при низком заряде батареи, приходилось повторять сопряжение, больше проблем не было.
Видимо у вас брак, потому что прошивает он себя сам из памяти, и там из требований только полностью живая батарейка с хорошей токоотдачей на момент прошивки. Впрочем, если не лень заморачиваться, можно попробовать перешить на проводном подключении.
wolowizard
24.06.2025 03:55возможно ли переписать прошивку, чтобы датчики стали работать по протоколу BLE вместо zigbee? Как я понимаю, для этого чипа есть две версии SDK. Немного интересовался этой темой, но до экспериментов еще не дошел.
almirus
24.06.2025 03:55Можно ли (поддерживается ли) биндинг n к n устройств? Например 2 датчика и два крана, если хоть один сработал - закрыть оба крана.
Slacky1965 Автор
24.06.2025 03:55Один датчик протечки можно напрямую привязать (прибиндить) к нескольким исполнительным устройствам. Второй датчик протечки можно точно так же прибиндить к тем же самым исполнительным устройствам, к которым привзязан первый.
SantaClaus16
24.06.2025 03:55Интересно, а батарейку начнет адекватно показывать наконец?
Slacky1965 Автор
24.06.2025 03:55SantaClaus16
24.06.2025 03:55Прошивка не хотела обновляться, пока в local_ota_index.json не поменял на свой TZ3000bzt33cyu
Пока шьется, посмотрим что будет. В принципе если окажется что "не та ревизия" и датчик окирпичится, не расстроюсь. Пол года работал нормально, еще пол года - постоянные отвалы и батарейка то 0, то 100.Slacky1965 Автор
24.06.2025 03:55Ну это Вы конечно зря. Нужно было хотя бы убедиться, что чип такой же и размер флеш 1М.
SantaClaus16
24.06.2025 03:55Это не наш метод - проверим в бою. Вроде поднялось, в конверторе тоже поменял на свой TZ3000bzt33cyu.
Не понял насчет второй прошивки. Надо делать? И если делать, то как? Править local_ota_index.json под новый идентификатор?Slacky1965 Автор
24.06.2025 03:55Да. В будущем обновления будут прям из z2m подтягиваться. Но пока так. Оставьте только url и force. Остальное можно удалить. Ну и в url указать правильный путь и имя файла, который начинается на 6565.
SantaClaus16
24.06.2025 03:55Спасибо, вторая пошла шиться. Добавьте тогда bzt33cyu что ли в список поддерживаемых.
Slacky1965 Автор
24.06.2025 03:55Лучше конечно чтобы Вы его всё-таки разобрали и сфотографировали. Чтобы убедиться на 100%.
almirus
24.06.2025 03:55Вот бы универсальную прошивку, в которой забиваешь используемый чип (у туя вроде их не так много), подключенные пины и тип подключенного сенсора и, наконец, отвязываешь от Tuya. есть устройства которые долго живут, есть те которые батарейку пожирают за полгода.
GennPen
24.06.2025 03:55Zigbee Configurable Firmware Features – Zigbee Hobbyist. Rock Pi 4 SBC
Но это в основном для чипов CC****
Serg_SG
Отличная статья. Респект.