СОДЕРЖАНИЕ Tools

Попытки автоматизировать что-то от Tuya (в данном случае Atorch, хотя и не только)

25.04.2026

Мне в руки попалось несколько устройств, которые кроме своего основного предназначения ещё и имеют на борту WiFi. Я долгое время ими пользовался, и вот наконец у меня дошли руки что-то достать из них полезное...

Много лет использую ваттметр Atorch S1-B/W/T/H. Ничего плохого сказать про него не могу - всё, что нужно, он делает. И цифры крупные. Но когда я его покупал, я очень хотел, чтобы в нём был WiFi и я мог с него снимать показания. Но он отлично работал и без этого.

Недавно, где-то в районе этой статьи я купил Atorch DL24EW. Достаточно интересная электронная нагрузка. И я покупал обязательно с WiFi! Но так и не подключил его никуда.

А недавно ещё купил KWS-306 "Измеритель Мощности Автономная Версия Вольтметр" - тоже с WiFi. Трёхфазный счётчик. Покупал, чтобы отработать технологию мониторинга работы компрессора... Чтобы в случае каких-то проблем можно было компрессор обесточить. И вот, прошло 7 месяцев, как я его купил, и он отлично показывает что-то на своём экранчике. Но я так ничего и не автоматизировал.

Вот сегодня я этим и занялся.

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

Подключение устройства к WiFi идёт по инструкции от устройства. Тут вы справитесь и без меня...

Самое главное - добавить приложение в Tuya SmartLife.

После того как оно уже в SmartLife, нужно получить его параметры для локального доступа. Они называются "Device ID" и "Local Key". ИИ сразу подсказывает: "для этого нужно зайти в настройки устройства в SmartLife, найти там раздел "Advanced" и там уже "Local Key". Скопируйте эти данные и сохраните их где-нибудь, они понадобятся нам дальше". Но вот и нет... Нет там такого пункта, потому что Tuya вас ненавидит. Для получения этих данных нужно сделать что-то дикое...

Нужно зарегистрироваться на сайте Tuya как разработчик. И вроде бы (я уже не помню) вам дадут на месяц доступ к этим параметрам ваших же устройств. Через месяц этот доступ истечёт, но его можно будет продлить, написав письмо в их поддержку, с просьбой продлить доступ. В прошлый раз, когда я это делал - доступ открыли через 5 минут. Было мило с их стороны. Но как будет дальше - не знаю. Скоро приедет еще несколько устройств и я буду проверять. Постараюсь дополнить.

Идём на https://platform.tuya.com/cloud/. Выбираем наш "проект", "Open project". В разделе Devices будут устройства, которые вы осилили добавить в SmartLife. Нажимаем на устройстве "Debug device". И видим "Device ID". Это первый шаг. Копируем его к себе. Пригодится.

Теперь нужно добыть "Local Key". Идём сюда. Нажимаем на "Device Management" -> "Query Device detail". В поле "Device ID" вставляем наш Device ID. Нажимаем "Execute". В ответе будет "local_key". Копируем его к себе. Вот он нам и нужен.

При наличии этих двух параметров (и ещё ip-адреса, но его уж как-то сами добудьте) можно пытаться обратиться к устройству.

Для этого понадобится python и библиотека tinytuya. Конечно же, мне не повезло. У меня опять python 3.7. А меньше чем 3.9 ничего работать не хочет. Может вам больше повезёт. Ненавижу python. Нашёл у себя сервер, который имеет на борту 3.9. В venv поставил tinytuya и paho.mqtt.

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

d = tinytuya.OutletDevice( address='172.11.211.111', dev_id='bf911111d4322e2037wha6', local_key='c_/_oO(;`Hb11111' ) # Версия протокола (обычно 3.3) # d.set_version(3.1) # d.set_version(3.3) d.set_version(3.4) #d.set_version(3.5) # Проверяем статус устройства while True: status = d.status() print("Current status:", status) time.sleep(1)

Забыл рассказать про версию протокола. Вообще не понятно что к чему! Просто у каждого устройства (или, надеюсь, типа устройства) свой номер протокола. Нужно подбирать эмприрически.

Так вот - этот обрывок скрипта позволит вам узнать (если всё пойдёт хорошо) текущее состояние вашего устройства.

Вот актуальное состояние Atorch S1-B/W/T/H:

{ "dps": { "101": 1292, "102": 1100, "103": 1424, "104": true, "105": 2364, "106": 3055, "107": 9, "108": "CC", "109": 110, "110": 0, "111": 3600, "112": 1098, "113": 250, "114": 422, "116": "Bat01", "117": 45, "118": 0, "119": false, "120": 52, "121": 100 } }

Над этим нужно или много и сложно работать (как я) или взять иформацию о том, что это барахло значит с сайта Tuya Developer. Сюда, потом "Device control" => "Query Properties". Вбиваем свой device_id и получаем хоть какой-то описание того, что он хочет нам вернуть.

{ "result": { "properties": [ { "code": "voltage_current", "dp_id": 101, }, { "code": "cur_current", "dp_id": 102, }, { "code": "power_current", "dp_id": 103, }, { "code": "switch", "dp_id": 104, }, ...

И вот мы получили какие-то данные. И получили описание того, что они означают. Ну и где-то на этом этапе мы можем стать счастливыми! Но это не точно, конечно.

Atorch S1-B/W/T/H сказал, что он будет обновлять показания по этому странному протоколу не чаще чем раз в 30-40 секунд. Чаще вам не нужно! DL24EW показывает данные почти в онлайне... Мило.

О, я как раз не закончил к этому моменту возню с KWS-306. Попробую получить его документацию... Да, мои ссылки работают. Неплохо.

Получаем данные, которые выдаёт python скрипт. Получаем данные, которые выдал Tuya Developer. Загружаем это в иишницу. Копируем в конфиграцию системы и получаем реальные данные на выходе:

{ "a_energy_total": 69.34, "a_power_factor": 0, "b_energy_total": 77.37, "b_power_factor": 0, "c_energy_total": 89.37, "c_power_factor": 0, "countdown_1": 0, "current_a": 0.0, "current_b": 0.0, "current_c": 0.0, "current_balance": 0, "energy": 234.82, "energy_a": 66.62, "energy_b": 74.42, "energy_c": 88.08, "forward_energy_total": 236.1, "low_voltage": 85, "over_current": 8.0, "over_energy": 0, "over_power": 1800, "over_temp": 150, "over_voltage": 275, "power_a": 0.0, "power_b": 0.0, "power_c": 0.0, "power_factor": 0, "power_total1": 0.0, "reset_time": 0, "run_time": 3313, "screen_poweroff": 0, "state_flag": "2", "supply_frequency": 50, "switch_1": true, "temperature": -20, "voltage_a": 231.36, "voltage_b": 226.89, "voltage_c": 222.73, "voltage_balance": 0

Вот так вот у меня включен компрессор. :)

Конечно же большая часть этой информации лишняя и к делу отношения не имеет. Я отфильтрую из неё именно те параметры, которые мне нужны для мониторинга и именно их буду загружать уже себе в систему. Но "кейсы" бывают разные. Мне, например, нужно, чтобы ток на разных фазах был приблизительно одинаков и время работы компрессора не превышало допустимых норм. Остальные параметры мне не интересны. И в этом и заключается именно моя автоматизация.

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

{ "devices": { "atorch_socket_masterskaya01": { "address": "172.17.******", "dev_id": "bf903bf1d******", "local_key": "c_/_oO(;******", "device_type": "atorch_socket_v01", "repeat_every": 30 }, "atorch_elload_01": { "address": "172.17.******", "dev_id": "bf481430fc6******", "local_key": "H$'QV@L******", "device_type": "atoch_elload_v1", "repeat_every": 30 }, "kws306_sarai_kompressor01": { "address": "172.17.******", "dev_id": "bf4895c8ef3******", "local_key": "B*'oh<4b******", "device_type": "kws306_v1", "repeat_every": 30 } }, "device_types": { "atorch_socket_v01": { "protocol_version": 3.4, "convert": { "1": { "name": "relay_state", "type": "boolean" }, "18": { "name": "current", "type": "decimal1000" }, "19": { "name": "power", "type": "decimal100" }, "20": { "name": "voltage", "type": "decimal100" } }, "commands": { "on": { "command": "set_status", "switch": "131", "value": "open" }, "off": { "command": "set_status", "switch": "131", "value": "close" } } }, "atoch_elload_v1": { "protocol_version": 3.5, "convert": { "101": { "name": "voltage", "type": "decimal100" }, "102": { "name": "current", "type": "decimal1000" }, "103": { "name": "power", "type": "decimal100" }, "104": { "name": "load_enabled", "type": "boolean" }, "105": { "name": "summary_ah", "type": "decimal1000" }, "106": { "name": "summary_wh", "type": "decimal100" }, "108": { "name": "mode", "type": "string" }, "109": { "name": "set_current", "type": "decimal100" }, "112": { "name": "set_cutoff_voltage", "type": "decimal100" }, "x119": { "name": "clear_energy", "type": "boolean" }, "x111": { "name": "time_limit", "type": "integer" }, "x113": { "name": "cutoff_voltage", "type": "decimal100" }, "x114": { "name": "temperature", "type": "decimal10" }, "x116": { "name": "battery_profile", "type": "string" }, "x117": { "name": "mosfet_temp", "type": "integer" } }, "commands": { "on": { "command": "set_status", "switch": "104", "value": true }, "off": { "command": "set_status", "switch": "104", "value": false }, "reset": { "command": "set_status", "switch": "119", "value": true } } }, "kws306_v1": { "protocol_version": 3.5, "convert": { "126": { "name": "current_a", "type": "decimal1000" }, "129": { "name": "current_b", "type": "decimal1000" }, "132": { "name": "current_c", "type": "decimal1000" }, "141": { "name": "turn_on", "type": "boolean" } }, "commands": { "on": { "command": "set_status", "switch": "141", "value": true }, "off": { "command": "set_status", "switch": "141", "value": false } } } } }

И вот оно - прекрасное устройство KWS-306. Потраченное на него время вообще никак не окупилось... По сути оно представляет из себя счётчик электрической энергии. Управляется снаружи оно неплохо. Но вот беда - информацию о текущем состоянии оно готово отдавать с периодичностью раз в 5-10 минут. Для мониторинга работы компрессора это бессмысленный период - компрессор включается только на 2-3 минуты. В итоге использовать KWS-306 в том смысле, в котором я собирался это сделать - никак нельзя.

Я постараюсь дополнять эту статью по мере появления новых устройств. Но общее настроение уже понятно.

Это работает. Криво, через какие-то костыли, но информацию от Tuya устройств получить можно. Это лучше, чем Xiaomi. Но всё равно как-то очень, очень геморройно и зависит от того, дадут вам в Tuya Developer доступ или не дадут (и доступ даётся всего на месяц!). Хотя акция разовая - если у вас есть local_key, то устройство вам будет доступно...