Вообще параллельно занимался двумя подобными модулями и указанный в заголовке был вторым при исследованиях — но так уж вышло, что его получилось довести до ума первым, поэтому с него и начнем.
В целом, в руках на сейчас оказалось уже 3 устройства по «странной схеме» — смарт-модуль TOMZN TOMPD-63SW, указанный в заголовке DGC-63T и собачья кормушка (ссылка уже неактуальна, так что буду выискивать что-то в процессе описания ее переделки). «Странность» была в том, что использовалась сразу пара контроллеров, причем все исполнительные механизмы, кнопки и тому подобное подключалось не к мощному (им обычно выступало что-то типа CBU на BK7231N или чем-то подобном), а к отдельной микросхеме, а BK — чисто для связи с внешним миром. Вот, собственно, когда в руки попали смарт-модули (один купил сам, второй подарили) и внутри оказалась уже знакомая по кормушке схема — решил изучить тему ближе. До того были планы выкинуть «непонятный» второй контроллер и распаять все сразу на CBU, а его, в свою очередь — перешить под ESP Home.
Как оказалось, все проще. В ESP Home есть компонент tuya:, который обеспечивает взаимодействие со вторым контроллером через UART. Основная логика работы устройства реализуется вторым контроллером (раз уж к нему все подключено) — а CBU при желании можно вообще отпаять. Общение с первым делается через datapoint’ы — либо одиночные значения разных типов, либо массивы данных. Их можно читать, а иногда даже и писать в них свои значения. Для исследования устройства просто объявляем в конфиге
tuya:
после чего при запуске в логах видим листинг значений и их типы. Некоторые значения потом периодически обновляются; некоторые обновляются при определенных событиях. Вооружаемся блокнотом и находим закономерности. Те значения, которые представляются отдельными datapoint’ами — можно использовать напрямую в сенсорах. Из массивов данные придется выковыривать вручную и раскладывать на заранее созданные шаблоны сенсоров.
[08:47:17.596][C][tuya:041]: Tuya:
[08:47:17.602][C][tuya:058]: Datapoint 1: int value (value: 14)
[08:47:17.605][C][tuya:058]: Datapoint 13: int value (value: 0)
[08:47:17.610][C][tuya:054]: Datapoint 6: raw (value: 08.FE.00.00.00.00.00.00 (8))
[08:47:17.614][C][tuya:056]: Datapoint 12: switch (value: OFF)
[08:47:17.617][C][tuya:056]: Datapoint 16: switch (value: OFF)
[08:47:17.622][C][tuya:058]: Datapoint 15: int value (value: 0)
[08:47:17.625][C][tuya:058]: Datapoint 25: int value (value: 27)
[08:47:17.629][C][tuya:064]: Datapoint 9: bitmask (value: 0)
[08:47:17.633][C][tuya:056]: Datapoint 49: switch (value: ON)
[08:47:17.639][C][tuya:062]: Datapoint 101: enum (value: 2)
[08:47:17.642][C][tuya:054]: Datapoint 17: raw (value: 03.01.00.0D.04.01.00.53.05.00.00.00 (12))
[08:47:17.646][C][tuya:054]: Datapoint 18: raw (value: 01.01.00.33.03.01.01.0E.04.01.00.A0 (12))
[08:47:17.650][C][tuya:054]: Datapoint 33: raw (value: 03.00.02.58.04.00.02.58.05.00.02.58.06.01.02.58.09.00.00.01.0C.01.00.01.0E.01.00.1E.0F.01.00.1E (32))
[08:47:17.654][C][tuya:056]: Datapoint 36: switch (value: OFF)
[08:47:17.658][C][tuya:056]: Datapoint 11: switch (value: OFF)
[08:47:17.662][C][tuya:058]: Datapoint 50: int value (value: 0)
[08:47:17.668][C][tuya:058]: Datapoint 32: int value (value: 499)
[08:47:17.669][C][tuya:054]: Datapoint 103: raw (value: 00)
[08:47:17.674][C][tuya:060]: Datapoint 104: string value (value: )
[08:47:17.678][C][tuya:058]: Datapoint 27: int value (value: 50)
[08:47:17.682][C][tuya:060]: Datapoint 105: string value (value: ////)
[08:47:17.686][C][tuya:054]: Datapoint 107: raw (value: 00)
[08:47:17.690][C][tuya:058]: Datapoint 108: int value (value: 0)
[08:47:17.694][C][tuya:074]: Product: '{"p":"kupa78rwoclnsx7j","v":"1.0.0","m":0}'
Что нашел в процессе исследования у DGC-63T?
- datapoint 6 отвечает за основные сенсоры — напряжение / ток / мощность. Данные в виде массива, при этом значения (по 2 байта каждое) разделены байтом 00 (я не заметил, чтобы он когда-то менялся). Пример данных:
08.FF.00.00.00.00.00.00
делим на секции:
[08.FF].00.[00.00].00.[00.00]
Соответственно, напряжение / ток / мощность.
08FF — это 2303 в десятичной — т.е., 230,3В. Остальные сенсоры — аналогично, с поправкой на коэффициент. - В datapoint 15 можно напрямую в виде числа получить текущий ток утечки (да, в отличие от прошлых смарт-модулей — тут еще есть трансформатор тока на обе силовые линии и соответствующий интерфейс со стороны МК).
- В datapoint 32 / 1 / 25 у нас частота / энергия и температура соответственно.
- Массивы по адресам 17 и 18 отвечают за настройки. Из того, что удалось распознать — 7-й байт в 17-м — это настройки тока утечки, а в 18-м у нас настройки верхнего / нижнего напряжений срабатывания защиты и предела по току.
По примерам из сети сначала реализовал отображение того, что получилось забрать с сенсоров и массивов настроек, а потом с помощью гуглоИИ получилось сделать и изменение настроек через веб-интерфейс — для этого пишем нужные данные в те же массивы по адресам 17/18. Из не найденных настроек — таймер включения нагрузки. При его изменениях ни один datapoint не менялся.
Еще из замеченного — datapoint 105 обновляется при выходе из настроек на устройстве — значение всегда «////».
Datapoint 27 показывает в виде простого значения настройку предельного тока, но… значение обновляется только при цикле питания.
Да, по железу. Я решил не морочиться с CBU по опыту с прошлыми модулями и просто сходу запаял ESP32 C3 — тем более, для этого надо кинуть всего 4 провода. Так что да, я тут даже не дампил оригинальную прошивку (может сделаю это позже). ESP32, как выяснилось, и работает постабильнее, и ресурсов имеет побольше. Хотя в целом — практически все то же самое можно было бы реализовать и на штатном контроллере.
Конфиг ESP Home для варианта с ESP32 C3
Update 2026-06-18: поисследовал остальные доступные switch’и.
- DP 12: изменений в работе не заметил, но при включении DP 13 ставится в 0.
- DP 49: изменений в работе не заметил.
- DP 36: при включении выключается реле и блокируется его дальнейшее включение.
- DP 11: при включении выключается реле и DP 9 ставится в «0X010000″. Возможность включения не блокируется, но реле моментально выключается обратно. Если при взводе DP 11 реле было включено (или после попытки его включения) — начинает мигать светодиод «Power» и продолжает мигать до тех пор, пока не сменишь состояние реле при снятом DP 11 (либо при взводе DP 36). Возможно, это какой-то аналог кнопки «Тест». Включение на показаниях тока утечки не сказывается.



2 мысли о “Переделываем DiyGo DGC-63T. Исследуем Tuya.”