Попытки автоматизировать что-то от 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". Копируем его к себе. Вот он нам и нужен.
Если в ответе будет "msg": "No permissions. Your subscription to cloud development plan has expired.", значит ваши права на добавление своих же устройств истекли.
При наличии этих двух параметров (и ещё 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, то устройство вам будет доступно...
UPD 2026-05-25:
Идём на страницу https://www.tuya.com/vas/user/service. Находим там IoT Core. Выбираем "Trial Edition" и нажимаем "Купить". Получаем ответ "Failed to subscribe trial edition! You have subscribed to the trial edition before, and cannot subscribe again. Please consider upgrading to other versions.". Отсюда попадаем на страницу "My subscription". Находим "IoT Core" и нажимаем "Extend Trial Period".
Запрашиваю доступ на 6 месяцев как индивидуальный разработчик. "I bought several new devices, and I need to add it to local HomeAssistant."
Получаем сообщение "Your application for extension is being reviewed". Активно молимся о добром расположении духа саппорта.
Где-то через 3-4 минуты состояние запроса изменилось на "Your application for extension is approved. 2026-11-25 18:06:08". Ну... Значит до ноября я ещё смогу добавлять новые устройства! :)



