[Модуль] Tuya

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

fandaymon
Сообщения: 1567
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 40 раз
Поблагодарили: 578 раз

Re: [Модуль] Tuya

Сообщение fandaymon » Чт мар 05, 2020 11:12 pm

maxkrok писал(а):
Чт мар 05, 2020 9:36 pm
Короче, дамп снял, благодарю.. но проблема очень странная..
LocalKey никак ни на что не влияет.. При ручном добавлении устройства , не определяется его тип должен быть "category":"wg2" (так в дампе).. на суб-устройста (TRV) localkey вообще отсутствуют, как собственно и IP (управление по радио)...
Поэтому непонятно как локально управлять..
Может есть какой-то хитрый способ ручного добавления? Все тыщу раз перепроверил.. думаю, что дело в самом модуле.. как-то он неохотно работает с этим гейтвеем и суб-устройствами.. может вам дамп этот выслать, чтоб вы как-то модуль поправили?
PS" Там еще MeshId присутствует в дампе.. Это на подустройства он нужен.. Там везде на них MeshId такой же как LocalKey для шлюза
PPS Ну и так, на всякий случай, текщая температура в 2 раза меньше показывается, чем на головках.. Причем округляется в меньшую сторону. Например если температура на головке 23,7 то в модуле показывается 11,5 (типа 23/2)...
Изображение
Локальный ключ шифрует трафик того устройства, которое к сети подключено - по идее подключенные к шлюзу устройства, должны управляться какими-то командами шлюзу. Категорию само устройство не знает, категорию знает только облако, поэтому тип конечно не определяется. Проблема в том что с облаком туи не возможно работать не зная ключа продукта, а я его не знаю... Модуль работает с эндпойнтом сделанным специально для home assistanta, а этот эдпойнт содержит информацию только о выключателях, лампочках и термостатах. Для работы с другими типами устройств приходится извращаться, а с некоторыми, типа датчиков движения и температуры, работать не получается никак - они не отдают данные по локальному протоколу, только по MQTT на адрес туи. С устройствами которые работают по локальному протоколу, но в облаке для HA не присутствуют можно пытаться работать зная локальный ключ и команды
Скажем, у меня есть ИК-пульт от Туи. Я запустил Packet Capture, поуправлял через апликацию телевизором и нашёл какую команду посылает телефон напрямую пульту - этого достаточно чтобы управлять пультом из МДМ.
Теперь с вашим шлюзом - а что именно он делает? Открывает-закрывает термоголовки или там ещё какой-то функционал заложен?
И откуда берутся данные о температуре, которые модуль показывает?
maxkrok
Сообщения: 11
Зарегистрирован: Чт мар 05, 2020 6:18 pm
Благодарил (а): 1 раз
Поблагодарили: 0

Re: [Модуль] Tuya

Сообщение maxkrok » Чт мар 05, 2020 11:43 pm

fandaymon писал(а):
Чт мар 05, 2020 11:12 pm
а что именно он делает? Открывает-закрывает термоголовки или там ещё какой-то функционал заложен?
И откуда берутся данные о температуре, которые модуль показывает?
Он дает команды TRV на регулировку (подкручивает редуктор) подачи воды в радиаторы. Температура измеряется встроенным термометром на TRV и передается на шлюз.. еще шлюз дает команды TRV по расписанию, которое хз где хранится, наверное в том же облаке... вот собственно и все..
Если нужен дамп, готов выслать.. у меня телега - @maxkrok
Если получится поймать мой шлюз буду признателен..
Husky
Сообщения: 59
Зарегистрирован: Ср мар 06, 2019 8:46 am
Благодарил (а): 5 раз
Поблагодарили: 7 раз

Re: [Модуль] Tuya

Сообщение Husky » Вс мар 08, 2020 12:09 am

Продолжаю разбираться с сетевым фильтром https://aliexpress.ru/item/33036821448. ... 33edxbDTru 4 розетки и блок USB. Не получается заставить управляться блоком USB через модуль, хотя через приложение управляется.

Вот пакет с локалкеем:
СпойлерПоказать
{
"result": [
{
"result": {},
"a": "tuya.m.my.group.device.relation.list",
"t": 1583614010192,
"success": true,
"v": "2.0",
"status": "ok"
},
{
"result": [
{
"bizType": 6,
"bizId": "33808108bcddc2a8df32",
"displayOrder": -1,
"roomId": "-1",
"homeDisplayOrder": 0
}
],
"a": "tuya.m.my.group.device.sort.list",
"t": 1583614010195,
"success": true,
"v": "1.0",
"status": "ok"
},
{
"result": [
{
"virtual": false,
"dpName": {
"1": "Switch 1",
"2": "Switch 2",
"3": "Switch 3",
"4": "Switch 4"
},
"lon": "37.1412848",
"uuid": "33808108bcddc2a8df32",
"iconUrl": "https://images.tuyaeu.com/smart/icon/ay ... 1bf796.png",
"runtimeEnv": "prod",
"lat": "55.9829562",
"devId": "33808108bcddc2a8df32",
"dpMaxTime": 1583613999809,
"productId": "aswMJsr7svx632Ra",
"dps": {
"1": false,
"2": false,
"3": false,
"4": false,
"7": false,
"9": 0,
"10": 0,
"11": 0,
"12": 0,
"15": 0
},
"ip": "46.39.243.131",
"activeTime": 1583524596,
"categoryCode": "wf_pc",
"moduleMap": {
"wifi": {
"upgradeStatus": 0,
"cdv": "1.0.0",
"bv": "5.43",
"pv": "2.2",
"verSw": "1.0.2",
"isOnline": true,
"id": 24546638,
"cadv": ""
},
"mcu": {
"upgradeStatus": 0,
"cdv": "",
"verSw": "1.0.2",
"isOnline": true,
"id": 24546639,
"cadv": ""
}
},
"devAttribute": 3,
"name": "smart Power Strip",
"timezoneId": "Europe/Moscow",
"category": "pc",
"localKey": "********************"
}
],
"a": "tuya.m.my.group.device.list",
"t": 1583614010242,
"success": true,
"v": "1.0",
"status": "ok"
},
{
"result": [],
"a": "tuya.m.my.group.mesh.list",
"t": 1583614010191,
"success": true,
"v": "1.0",
"status": "ok"
},
{
"result": [],
"a": "tuya.m.device.sig.mesh.list",
"t": 1583614010191,
"success": true,
"v": "1.0",
"status": "ok"
},
{
"result": [],
"a": "tuya.m.my.group.device.group.list",
"t": 1583614010193,
"success": true,
"v": "2.0",
"status": "ok"
},
{
"result": {
"geoName": "",
"rooms": [],
"role": 2,
"gid": 10941441,
"groupId": 10941441,
"displayOrder": 0,
"admin": true,
"lon": 0,
"dealStatus": 2,
"groupUserId": 11381340,
"background": "",
"name": "Мой дом ..",
"id": 10221299,
"lat": 0
},
"a": "tuya.m.location.get",
"t": 1583614010205,
"success": true,
"v": "2.0",
"status": "ok"
},
{
"result": [
{
"panelConfig": {
"bic": [
{
"code": "timer",
"selected": true
},
{
"code": "jump_url",
"selected": false
}
]
},
"categoryCode": "wf_pc",
"meshCategory": "",
"supportGroup": true,
"schemaInfo": {
"schemaExt": "[{\"id\":9,\"inputStyle\":\"\",\"inputType\":\"\"},{\"id\":10,\"inputStyle\":\"\",\"inputType\":\"\"},{\"id\":11,\"inputStyle\":\"\",\"inputType\":\"\"},{\"id\":12,\"inputStyle\":\"\",\"inputType\":\"\"},{\"id\":15,\"inputStyle\":\"\",\"inputType\":\"\"}]",
"schema": "[{\"mode\":\"rw\",\"code\":\"switch_1\",\"name\":\"开关1\",\"property\":{\"type\":\"bool\"},\"iconname\":\"icon-dp_power2\",\"id\":1,\"type\":\"obj\",\"desc\":\"\"},{\"mode\":\"rw\",\"code\":\"switch_2\",\"name\":\"开关2\",\"property\":{\"type\":\"bool\"},\"iconname\":\"icon-dp_power2\",\"id\":2,\"type\":\"obj\",\"desc\":\"\"},{\"mode\":\"rw\",\"code\":\"switch_3\",\"name\":\"开关3\",\"property\":{\"type\":\"bool\"},\"iconname\":\"icon-dp_power2\",\"id\":3,\"type\":\"obj\",\"desc\":\"\"},{\"mode\":\"rw\",\"code\":\"switch_4\",\"name\":\"开关4\",\"property\":{\"type\":\"bool\"},\"iconname\":\"icon-dp_power2\",\"id\":4,\"type\":\"obj\",\"desc\":\"\"},{\"mode\":\"rw\",\"code\":\"switch_usb1\",\"name\":\"USB开关1\",\"property\":{\"type\":\"bool\"},\"iconname\":\"icon-dp_power2\",\"id\":7,\"type\":\"obj\",\"desc\":\"\"},{\"mode\":\"rw\",\"code\":\"countdown_1\",\"name\":\"开关1倒计时\",\"property\":{\"unit\":\"s\",\"min\":0,\"max\":86400,\"scale\":0,\"step\":1,\"type\":\"value\"},\"iconname\":\"icon-dp_time2\",\"id\":9,\"type\":\"obj\",\"desc\":\"\"},{\"mode\":\"rw\",\"code\":\"countdown_2\",\"name\":\"开关2倒计时\",\"property\":{\"unit\":\"s\",\"min\":0,\"max\":86400,\"scale\":0,\"step\":1,\"type\":\"value\"},\"iconname\":\"icon-dp_time2\",\"id\":10,\"type\":\"obj\",\"desc\":\"\"},{\"mode\":\"rw\",\"code\":\"countdown_3\",\"name\":\"开关3倒计时\",\"property\":{\"unit\":\"s\",\"min\":0,\"max\":86400,\"scale\":0,\"step\":1,\"type\":\"value\"},\"iconname\":\"icon-dp_time2\",\"id\":11,\"type\":\"obj\",\"desc\":\"\"},{\"mode\":\"rw\",\"code\":\"countdown_4\",\"name\":\"开关4倒计时\",\"property\":{\"unit\":\"s\",\"min\":0,\"max\":86400,\"scale\":0,\"step\":1,\"type\":\"value\"},\"iconname\":\"icon-dp_time2\",\"id\":12,\"type\":\"obj\",\"desc\":\"\"},{\"mode\":\"rw\",\"code\":\"countdown_usb1\",\"name\":\"USB1倒计时\",\"property\":{\"unit\":\"s\",\"min\":0,\"max\":86400,\"scale\":0,\"step\":1,\"type\":\"value\"},\"iconname\":\"icon-dp_time2\",\"id\":15,\"type\":\"obj\",\"desc\":\"\"}]"
},
"capability": 1,
"shortcut": {
"quickOpDps": [],
"faultDps": [],
"displayDps": [],
"displayMsgs": {}
},
"uiInfo": {
"phase": "release",
"rnFind": true,
"appRnVersion": "5.1",
"ui": "00000002d3_1.3.6",
"id": 729339,
"type": "RN"
},
"i18nTime": 1578536530157,
"attribute": 274878956416,
"id": "aswMJsr7svx632Ra",
"category": "pc"
}
],
"a": "tuya.m.device.ref.info.my.list",
"t": 1583614010218,
"success": true,
"v": "4.0",
"status": "ok"
},
{
"result": [],
"a": "tuya.m.my.shared.device.list",
"t": 1583614010198,
"success": true,
"v": "1.0",
"status": "ok"
},
{
"result": [],
"a": "tuya.m.my.shared.device.group.list",
"t": 1583614010195,
"success": true,
"v": "2.0",
"status": "ok"
}
],
"t": 1583614010242,
"success": true,
"status": "ok"
}
В блоке dpName перечисляются только розетки, но далее в "dps" идет статус еще устройства с ID 7, это как раз блок USB, в приложении он идет под номером 7

Можно как-то настроить управление USB?
Пробовал добавлять вручную ID_7 не помогло
fandaymon
Сообщения: 1567
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 40 раз
Поблагодарили: 578 раз

Re: [Модуль] Tuya

Сообщение fandaymon » Вс мар 08, 2020 12:51 am

Husky писал(а):
Вс мар 08, 2020 12:09 am
Продолжаю разбираться с сетевым фильтром https://aliexpress.ru/item/33036821448. ... 33edxbDTru 4 розетки и блок USB. Не получается заставить управляться блоком USB через модуль, хотя через приложение управляется.


В блоке dpName перечисляются только розетки, но далее в "dps" идет статус еще устройства с ID 7, это как раз блок USB, в приложении он идет под номером 7

Можно как-то настроить управление USB?
Пробовал добавлять вручную ID_7 не помогло
Так по логу видно, что блока USB как устройства нет - там только 4 свитча. В dsp есть, но чтобы через dsp управлять, нужно локальное управление - вписать в модуде в первое устройство локальный ключ и локальный ip. Если в reporte будет 7, то и управлять ею получится
Husky
Сообщения: 59
Зарегистрирован: Ср мар 06, 2019 8:46 am
Благодарил (а): 5 раз
Поблагодарили: 7 раз

Re: [Модуль] Tuya

Сообщение Husky » Вс мар 08, 2020 11:15 am

fandaymon писал(а):
Вс мар 08, 2020 12:51 am
Husky писал(а):
Вс мар 08, 2020 12:09 am
Продолжаю разбираться с сетевым фильтром https://aliexpress.ru/item/33036821448. ... 33edxbDTru 4 розетки и блок USB. Не получается заставить управляться блоком USB через модуль, хотя через приложение управляется.


В блоке dpName перечисляются только розетки, но далее в "dps" идет статус еще устройства с ID 7, это как раз блок USB, в приложении он идет под номером 7

Можно как-то настроить управление USB?
Пробовал добавлять вручную ID_7 не помогло
Так по логу видно, что блока USB как устройства нет - там только 4 свитча. В dsp есть, но чтобы через dsp управлять, нужно локальное управление - вписать в модуде в первое устройство локальный ключ и локальный ip. Если в reporte будет 7, то и управлять ею получится
Вписал локальный ключ в первый свитч, добавил устройство id_7,там появилось только свойство report с значением null, больше ничего
fandaymon
Сообщения: 1567
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 40 раз
Поблагодарили: 578 раз

Re: [Модуль] Tuya

Сообщение fandaymon » Вс мар 08, 2020 1:00 pm

Husky писал(а):
Вс мар 08, 2020 11:15 am
fandaymon писал(а):
Вс мар 08, 2020 12:51 am
Husky писал(а):
Вс мар 08, 2020 12:09 am
Продолжаю разбираться с сетевым фильтром https://aliexpress.ru/item/33036821448. ... 33edxbDTru 4 розетки и блок USB. Не получается заставить управляться блоком USB через модуль, хотя через приложение управляется.


В блоке dpName перечисляются только розетки, но далее в "dps" идет статус еще устройства с ID 7, это как раз блок USB, в приложении он идет под номером 7

Можно как-то настроить управление USB?
Пробовал добавлять вручную ID_7 не помогло
Так по логу видно, что блока USB как устройства нет - там только 4 свитча. В dsp есть, но чтобы через dsp управлять, нужно локальное управление - вписать в модуде в первое устройство локальный ключ и локальный ip. Если в reporte будет 7, то и управлять ею получится
Вписал локальный ключ в первый свитч, добавил устройство id_7,там появилось только свойство report с значением null, больше ничего
Свойство report должно было появится в первом свитче
Husky
Сообщения: 59
Зарегистрирован: Ср мар 06, 2019 8:46 am
Благодарил (а): 5 раз
Поблагодарили: 7 раз

Re: [Модуль] Tuya

Сообщение Husky » Пн мар 09, 2020 12:40 am

fandaymon писал(а):
Вс мар 08, 2020 1:00 pm
Husky писал(а):
Вс мар 08, 2020 11:15 am
fandaymon писал(а):
Вс мар 08, 2020 12:51 am
Husky писал(а):
Вс мар 08, 2020 12:09 am
Продолжаю разбираться с сетевым фильтром https://aliexpress.ru/item/33036821448. ... 33edxbDTru 4 розетки и блок USB. Не получается заставить управляться блоком USB через модуль, хотя через приложение управляется.


В блоке dpName перечисляются только розетки, но далее в "dps" идет статус еще устройства с ID 7, это как раз блок USB, в приложении он идет под номером 7

Можно как-то настроить управление USB?
Пробовал добавлять вручную ID_7 не помогло
Так по логу видно, что блока USB как устройства нет - там только 4 свитча. В dsp есть, но чтобы через dsp управлять, нужно локальное управление - вписать в модуде в первое устройство локальный ключ и локальный ip. Если в reporte будет 7, то и управлять ею получится
Вписал локальный ключ в первый свитч, добавил устройство id_7,там появилось только свойство report с значением null, больше ничего
Свойство report должно было появится в первом свитче
Не появилось, и никаких новых свойств кроме online и state не появилось ни в первом ни в других переключателях. Неверный локальный ключ?
fandaymon
Сообщения: 1567
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 40 раз
Поблагодарили: 578 раз

Re: [Модуль] Tuya

Сообщение fandaymon » Пн мар 09, 2020 1:02 am

Husky писал(а):
Пн мар 09, 2020 12:40 am

Не появилось, и никаких новых свойств кроме online и state не появилось ни в первом ни в других переключателях. Неверный локальный ключ?
Проверить легко - надо сделать новый сценарий, скопировать туда такой код

Код: Выделить всё

include_once(DIR_MODULES . 'tuya/tuya.class.php');
$tuya_module = new tuya();
$local_key='';
$local_ip='';
$dev_id='';
$gw_id=$dev_id;

   $prefix="000055aa00000000000000";
   $suffix="000000000000aa55";

    $hexByte="0a";
    $json='{"gwId":"'.$gw_id.'","devId":"'.$dev_id.'"}';
  
    $json_payload=openssl_encrypt($json, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);


   $postfix_payload = hex2bin(bin2hex($json_payload) . $suffix);
   $postfix_payload_hex_len = dechex(strlen($postfix_payload));

   $buffer = hex2bin($prefix . $hexByte . '000000' . $postfix_payload_hex_len ) . $postfix_payload;
   $buffer=bin2hex($buffer);
   $buffer1=strtoupper(substr($buffer,0,-16));

   $hex_crc = dechex(crc32(hex2bin($buffer1))) ;
   $buffer=substr($buffer,0,-16) .($hex_crc).substr($buffer,-8);
   $data=$tuya_module->Tuya_send_receive(hex2bin($buffer),$local_ip);
   $result = substr($data,20,-8);
   $result = openssl_decrypt($result, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);
 
var_dump($result);
В $local_key, $local_ip и $dev_id записать свои и запустить
$dev_id это общая часть для всех розеток, т.е до знака подчеркивания
Husky
Сообщения: 59
Зарегистрирован: Ср мар 06, 2019 8:46 am
Благодарил (а): 5 раз
Поблагодарили: 7 раз

Re: [Модуль] Tuya

Сообщение Husky » Пн мар 09, 2020 2:16 am

fandaymon писал(а):
Пн мар 09, 2020 1:02 am
Husky писал(а):
Пн мар 09, 2020 12:40 am

Не появилось, и никаких новых свойств кроме online и state не появилось ни в первом ни в других переключателях. Неверный локальный ключ?
Проверить легко - надо сделать новый сценарий, скопировать туда такой код

Код: Выделить всё

include_once(DIR_MODULES . 'tuya/tuya.class.php');
$tuya_module = new tuya();
$local_key='';
$local_ip='';
$dev_id='';
$gw_id=$dev_id;

   $prefix="000055aa00000000000000";
   $suffix="000000000000aa55";

    $hexByte="0a";
    $json='{"gwId":"'.$gw_id.'","devId":"'.$dev_id.'"}';
  
    $json_payload=openssl_encrypt($json, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);


   $postfix_payload = hex2bin(bin2hex($json_payload) . $suffix);
   $postfix_payload_hex_len = dechex(strlen($postfix_payload));

   $buffer = hex2bin($prefix . $hexByte . '000000' . $postfix_payload_hex_len ) . $postfix_payload;
   $buffer=bin2hex($buffer);
   $buffer1=strtoupper(substr($buffer,0,-16));

   $hex_crc = dechex(crc32(hex2bin($buffer1))) ;
   $buffer=substr($buffer,0,-16) .($hex_crc).substr($buffer,-8);
   $data=$tuya_module->Tuya_send_receive(hex2bin($buffer),$local_ip);
   $result = substr($data,20,-8);
   $result = openssl_decrypt($result, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);
 
var_dump($result);
В $local_key, $local_ip и $dev_id записать свои и запустить
$dev_id это общая часть для всех розеток, т.е до знака подчеркивания
Вот такое выдает:

Код: Выделить всё

Warning: hex2bin(): Hexadecimal input string must have an even length in /var/www/html/modules/scripts/scripts.class.php(151) : eval()'d code on line 26
NULL bool(false) 
NULL Это var_dump($data);
fandaymon
Сообщения: 1567
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 40 раз
Поблагодарили: 578 раз

Re: [Модуль] Tuya

Сообщение fandaymon » Пн мар 09, 2020 2:32 am

Husky писал(а):
Пн мар 09, 2020 2:16 am
fandaymon писал(а):
Пн мар 09, 2020 1:02 am
Husky писал(а):
Пн мар 09, 2020 12:40 am

Не появилось, и никаких новых свойств кроме online и state не появилось ни в первом ни в других переключателях. Неверный локальный ключ?
Проверить легко - надо сделать новый сценарий, скопировать туда такой код

Код: Выделить всё

include_once(DIR_MODULES . 'tuya/tuya.class.php');
$tuya_module = new tuya();
$local_key='';
$local_ip='';
$dev_id='';
$gw_id=$dev_id;

   $prefix="000055aa00000000000000";
   $suffix="000000000000aa55";

    $hexByte="0a";
    $json='{"gwId":"'.$gw_id.'","devId":"'.$dev_id.'"}';
  
    $json_payload=openssl_encrypt($json, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);


   $postfix_payload = hex2bin(bin2hex($json_payload) . $suffix);
   $postfix_payload_hex_len = dechex(strlen($postfix_payload));

   $buffer = hex2bin($prefix . $hexByte . '000000' . $postfix_payload_hex_len ) . $postfix_payload;
   $buffer=bin2hex($buffer);
   $buffer1=strtoupper(substr($buffer,0,-16));

   $hex_crc = dechex(crc32(hex2bin($buffer1))) ;
   $buffer=substr($buffer,0,-16) .($hex_crc).substr($buffer,-8);
   $data=$tuya_module->Tuya_send_receive(hex2bin($buffer),$local_ip);
   $result = substr($data,20,-8);
   $result = openssl_decrypt($result, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);
 
var_dump($result);
В $local_key, $local_ip и $dev_id записать свои и запустить
$dev_id это общая часть для всех розеток, т.е до знака подчеркивания
Вот такое выдает:

Код: Выделить всё

Warning: hex2bin(): Hexadecimal input string must have an even length in /var/www/html/modules/scripts/scripts.class.php(151) : eval()'d code on line 26
NULL bool(false) 
NULL Это var_dump($data);
Устройство на наш запрос ничего не отвечает. Скорее всего ключ не правильный...
Ответить