[Модуль] Tuya

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

Модератор: immortal

Daniral
Сообщения: 82
Зарегистрирован: Чт мар 05, 2020 5:11 pm
Благодарил (а): 18 раз
Поблагодарили: 1 раз

Re: [Модуль] Tuya

Сообщение Daniral » Вт ноя 24, 2020 1:08 pm

Вторая розетка ведёт себя точно также
fandaymon
Сообщения: 1554
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: [Модуль] Tuya

Сообщение fandaymon » Вт ноя 24, 2020 4:06 pm

Daniral писал(а):
Вт ноя 24, 2020 11:45 am

Len of Dev_ID=22
Status=json obj data unvalid
Status1=
000055aa000000000000000d0000002c0000000149d2434632d59f1f543e300daa9c35ba6c8829bc94ee32ef311b29e13609cb88f608e4c50000aa55
Tuya: alt. status=data format error

После замены
А посмотреть какой dps получается?

echo $dps;

Правильный должен быть со всеми ключами, например если их 4 - 1,2,9,10, то в $dsp='{"1":null,"2":null,"9":null,"10":null}'
Последний раз редактировалось fandaymon Вт ноя 24, 2020 4:10 pm, всего редактировалось 1 раз.
fandaymon
Сообщения: 1554
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: [Модуль] Tuya

Сообщение fandaymon » Вт ноя 24, 2020 4:08 pm

Ну т.е. понятно что статус не отдают устройства с id длиной 22 символа. ОК - будем пытаться их вылечить
Daniral
Сообщения: 82
Зарегистрирован: Чт мар 05, 2020 5:11 pm
Благодарил (а): 18 раз
Поблагодарили: 1 раз

Re: [Модуль] Tuya

Сообщение Daniral » Вт ноя 24, 2020 4:13 pm

fandaymon писал(а):
Вт ноя 24, 2020 4:06 pm
Daniral писал(а):
Вт ноя 24, 2020 11:45 am

Len of Dev_ID=22
Status=json obj data unvalid
Status1=
000055aa000000000000000d0000002c0000000149d2434632d59f1f543e300daa9c35ba6c8829bc94ee32ef311b29e13609cb88f608e4c50000aa55
Tuya: alt. status=data format error

После замены
А посмотреть какой dps получается?

echo $dps;

Правильный должен быть со всеми ключами, например если их 4 - 1,2,9,10, то в $dsp='{"1":null,"2":null,"9":null,"10":null}'
А куда вставить?
Daniral
Сообщения: 82
Зарегистрирован: Чт мар 05, 2020 5:11 pm
Благодарил (а): 18 раз
Поблагодарили: 1 раз

Re: [Модуль] Tuya

Сообщение Daniral » Вт ноя 24, 2020 5:01 pm

fandaymon писал(а):
Вт ноя 24, 2020 4:06 pm
Daniral писал(а):
Вт ноя 24, 2020 11:45 am

Len of Dev_ID=22
Status=json obj data unvalid
Status1=
000055aa000000000000000d0000002c0000000149d2434632d59f1f543e300daa9c35ba6c8829bc94ee32ef311b29e13609cb88f608e4c50000aa55
Tuya: alt. status=data format error

После замены
А посмотреть какой dps получается?

echo $dps;

Правильный должен быть со всеми ключами, например если их 4 - 1,2,9,10, то в $dsp='{"1":null,"2":null,"9":null,"10":null}'
Вставил в конце перед закрытием сокета
Len of Dev_ID=22
Status=json obj data unvalid
Status1=
000055aa000000000000000d0000002c000000012d186a358e098233d9ed327a4e9c672ac45d1103c9d32ef6c8afd877931be6d1a6847bb80000aa55
Tuya: alt. status=data format error
,"state":null
fandaymon
Сообщения: 1554
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: [Модуль] Tuya

Сообщение fandaymon » Вт ноя 24, 2020 5:10 pm

Daniral писал(а):
Вт ноя 24, 2020 5:01 pm

Вставил в конце перед закрытием сокета
Len of Dev_ID=22
Status=json obj data unvalid
Status1=
000055aa000000000000000d0000002c000000012d186a358e098233d9ed327a4e9c672ac45d1103c9d32ef6c8afd877931be6d1a6847bb80000aa55
Tuya: alt. status=data format error
,"state":null
Надо сначала к оригинальному облаку подключится, чтобы получить правильные ключи для устройства

И там где цикл, должно быть так (последнюю строчку не скопировал...)

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

foreach ($command as $d) {
 $dps.= ','.'"'.$d['TITLE'] .'":null';
}

$dps = '{'.substr($dps,2).'}';
echo $dps;
Daniral
Сообщения: 82
Зарегистрирован: Чт мар 05, 2020 5:11 pm
Благодарил (а): 18 раз
Поблагодарили: 1 раз

Re: [Модуль] Tuya

Сообщение Daniral » Вт ноя 24, 2020 7:33 pm

fandaymon писал(а):
Вт ноя 24, 2020 5:10 pm
Daniral писал(а):
Вт ноя 24, 2020 5:01 pm

Вставил в конце перед закрытием сокета
Len of Dev_ID=22
Status=json obj data unvalid
Status1=
000055aa000000000000000d0000002c000000012d186a358e098233d9ed327a4e9c672ac45d1103c9d32ef6c8afd877931be6d1a6847bb80000aa55
Tuya: alt. status=data format error
,"state":null
Надо сначала к оригинальному облаку подключится, чтобы получить правильные ключи для устройства

И там где цикл, должно быть так (последнюю строчку не скопировал...)

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

foreach ($command as $d) {
 $dps.= ','.'"'.$d['TITLE'] .'":null';
}

$dps = '{'.substr($dps,2).'}';
echo $dps;

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

   
   include_once(DIR_MODULES . 'tuya/tuya.class.php');
$tuya_module = new tuya();
$device = SQLSelectOne("SELECT ID, TITLE, LOCAL_KEY, DEV_ID, DEV_IP FROM tudevices WHERE TITLE='MazganDetskaya'");
$local_key = $device['LOCAL_KEY'];
$dev_id = $device['DEV_ID'];
$local_ip = $device['DEV_IP'];
echo 'Len of Dev_ID=' . strlen($dev_id) . '<BR>';
$hexByte="0a";
$json='{"gwId":"'.$dev_id.'","devId":"'.$dev_id.'"}';
$payload =$tuya_module->TuyaLocalEncrypt($hexByte, $json, $local_key);
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 1, "usec" => 0));
$buf='';
socket_connect($socket, $local_ip, 6668);
$send=socket_send($socket, $payload, strlen($payload), 0);
$reciv=socket_recv ( $socket , $buf , 2048 ,0);
$result = substr($buf,20,-8);
$result = openssl_decrypt($result, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);
$status=json_decode($result);
echo ' Status=' .$result .'<BR>';
$reciv=socket_recv ( $socket , $buf , 2048 ,0);
$result = substr($buf,20,-8);
$result = openssl_decrypt($result, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);
$status=json_decode($result);
echo ' Status1=' .$result .'<BR>';
$hexByte="0d";
$sql = "SELECT TITLE from tucommands WHERE DEVICE_ID='" . $device['ID']. "' AND TITLE!='online'";
$command = SQLSelect($sql);
$dps='';
foreach ($command as $d) {
 $dps.= ','.'"'.$d['TITLE'] .'":null';
}
$dps = '{'.substr($dps,2).'}';
echo $dps;
$json='{"devId":"'.$dev_id.'","uid":"","t":"'.time().'","dps": ' . $dps . '}';
$payload =$tuya_module->TuyaLocalEncrypt($hexByte, $json, $local_key);
$buf='';
$send=socket_send($socket, $payload, strlen($payload), 0);
$reciv=socket_recv ( $socket , $buf , 2048 ,0);
$result = substr($buf,20,-8);
$result = openssl_decrypt($result, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);
$status=json_decode($result );
echo bin2hex($buf ).'<BR>';					
echo  ' Tuya: alt. status=' . $result.'<BR>';
socket_close($socket);
Сделал так. Результат тот же.
Len of Dev_ID=22
Status=json obj data unvalid
Status1=
{state":null}
000055aa000000000000000d0000002c000000012d186a358e098233d9ed327a4e9c672ac45d1103c9d32ef6c8afd877931be6d1a6847bb80000aa55
Tuya: alt. status=data format error
fandaymon
Сообщения: 1554
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: [Модуль] Tuya

Сообщение fandaymon » Вт ноя 24, 2020 7:41 pm

Daniral писал(а):
Вт ноя 24, 2020 7:33 pm

include_once(DIR_MODULES . 'tuya/tuya.class.php');
$tuya_module = new tuya();
$device = SQLSelectOne("SELECT ID, TITLE, LOCAL_KEY, DEV_ID, DEV_IP FROM tudevices WHERE TITLE='MazganDetskaya'");
$local_key = $device['LOCAL_KEY'];
$dev_id = $device['DEV_ID'];
$local_ip = $device['DEV_IP'];
echo 'Len of Dev_ID=' . strlen($dev_id) . '<BR>';
$hexByte="0a";
$json='{"gwId":"'.$dev_id.'","devId":"'.$dev_id.'"}';
$payload =$tuya_module->TuyaLocalEncrypt($hexByte, $json, $local_key);
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array("sec" => 1, "usec" => 0));
$buf='';
socket_connect($socket, $local_ip, 6668);
$send=socket_send($socket, $payload, strlen($payload), 0);
$reciv=socket_recv ( $socket , $buf , 2048 ,0);
$result = substr($buf,20,-8);
$result = openssl_decrypt($result, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);
$status=json_decode($result);
echo ' Status=' .$result .'<BR>';
$reciv=socket_recv ( $socket , $buf , 2048 ,0);
$result = substr($buf,20,-8);
$result = openssl_decrypt($result, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);
$status=json_decode($result);
echo ' Status1=' .$result .'<BR>';
$hexByte="0d";
$sql = "SELECT TITLE from tucommands WHERE DEVICE_ID='" . $device['ID']. "' AND TITLE!='online' AND TITLE!='state'";
$command = SQLSelect($sql);
$dps='';
foreach ($command as $d) {
$dps.= ','.'"'.$d['TITLE'] .'":null';
}
$dps = '{'.substr($dps,2).'}';
echo $dps;
$json='{"devId":"'.$dev_id.'","uid":"","t":"'.time().'","dps": ' . $dps . '}';
$payload =$tuya_module->TuyaLocalEncrypt($hexByte, $json, $local_key);
$buf='';
$send=socket_send($socket, $payload, strlen($payload), 0);
$reciv=socket_recv ( $socket , $buf , 2048 ,0);
$result = substr($buf,20,-8);
$result = openssl_decrypt($result, 'AES-128-ECB', $local_key, OPENSSL_RAW_DATA);
$status=json_decode($result );
echo bin2hex($buf ).'<BR>';
echo ' Tuya: alt. status=' . $result.'<BR>';
socket_close($socket);
[/code]

Сделал так. Результат тот же.
Len of Dev_ID=22
Status=json obj data unvalid
Status1=
{state":null}
000055aa000000000000000d0000002c000000012d186a358e098233d9ed327a4e9c672ac45d1103c9d32ef6c8afd877931be6d1a6847bb80000aa55
Tuya: alt. status=data format error
Я же говорю - надо сначала подключится к оригинальному облаку, чтобы получить все вот эти "1", "2" и т.д. в таблицу метрик устройства. Я так понимаю сейчас у этого устройства только 2 метрики - online и state
Добавил в sql строку ещё условие не брать state
Daniral
Сообщения: 82
Зарегистрирован: Чт мар 05, 2020 5:11 pm
Благодарил (а): 18 раз
Поблагодарили: 1 раз

Re: [Модуль] Tuya

Сообщение Daniral » Вт ноя 24, 2020 8:17 pm

Как узнать что я подключен к облоку
Галочку на подключение к облоку стоит
fandaymon
Сообщения: 1554
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: [Модуль] Tuya

Сообщение fandaymon » Вт ноя 24, 2020 8:20 pm

Daniral писал(а):
Вт ноя 24, 2020 8:17 pm
Как узнать что я подключен к облоку
Галочку на подключение к облоку стоит
К оригинальному стоит? После подключения в поле Web Tuya SID должна появится длинная строка eu12533465274.... Это означает, что модуль подключился. После подключения скачивается информация обо всех устройствах, которые есть в облаке и о метриках, которые есть у этих устройств
Ответить