Попытки автоматизировать что-то от 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, то устройство вам будет доступно...


